@rocicorp/zero 1.12.0-canary.2 → 1.12.0-canary.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/_virtual/{_@oxc-project_runtime@0.130.0/helpers → _@oxc-project_runtime@0.154.0/helpers/esm}/usingCtx.js +2 -2
- package/out/analyze-query/src/analyze-cli.js +2 -1
- package/out/analyze-query/src/analyze-cli.js.map +1 -1
- package/out/analyze-query/src/bin-analyze.js +5 -3
- package/out/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/analyze-query/src/bin-transform.js +3 -2
- package/out/analyze-query/src/bin-transform.js.map +1 -1
- package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
- package/out/ast-to-zql/src/bin.js +3 -2
- package/out/ast-to-zql/src/bin.js.map +1 -1
- package/out/ast-to-zql/src/format.js.map +1 -1
- package/out/datadog/src/datadog-log-sink.js +5 -4
- package/out/datadog/src/datadog-log-sink.js.map +1 -1
- package/out/otel/src/log-options.js.map +1 -1
- package/out/replicache/src/btree/node.js +13 -11
- package/out/replicache/src/btree/node.js.map +1 -1
- package/out/replicache/src/btree/read.js +4 -2
- package/out/replicache/src/btree/read.js.map +1 -1
- package/out/replicache/src/btree/splice.js.map +1 -1
- package/out/replicache/src/btree/write.js +9 -5
- package/out/replicache/src/btree/write.js.map +1 -1
- package/out/replicache/src/config.js +1 -2
- package/out/replicache/src/connection-loop.js.map +1 -1
- package/out/replicache/src/dag/chunk.js +1 -1
- package/out/replicache/src/dag/gc.js.map +1 -1
- package/out/replicache/src/dag/lazy-store.js +8 -7
- package/out/replicache/src/dag/lazy-store.js.map +1 -1
- package/out/replicache/src/dag/store-impl.js +1 -1
- package/out/replicache/src/dag/store-impl.js.map +1 -1
- package/out/replicache/src/dag/visitor.js.map +1 -1
- package/out/replicache/src/db/commit.js +5 -3
- package/out/replicache/src/db/commit.js.map +1 -1
- package/out/replicache/src/db/read.js +1 -1
- package/out/replicache/src/db/read.js.map +1 -1
- package/out/replicache/src/db/rebase.js.map +1 -1
- package/out/replicache/src/db/write.js +5 -2
- package/out/replicache/src/db/write.js.map +1 -1
- package/out/replicache/src/deleted-clients.js +3 -2
- package/out/replicache/src/deleted-clients.js.map +1 -1
- package/out/replicache/src/expo-sqlite.js +1 -2
- package/out/replicache/src/frozen-json.js +1 -1
- package/out/replicache/src/frozen-json.js.map +1 -1
- package/out/replicache/src/get-default-puller.js +1 -1
- package/out/replicache/src/hash.js +1 -1
- package/out/replicache/src/hash.js.map +1 -1
- package/out/replicache/src/impl.js +1 -2
- package/out/replicache/src/index-defs.js +5 -3
- package/out/replicache/src/index-defs.js.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/idb-store.js +1 -1
- package/out/replicache/src/kv/idb-store.js.map +1 -1
- package/out/replicache/src/kv/mem-fallback-store.js +1 -1
- package/out/replicache/src/kv/mem-fallback-store.js.map +1 -1
- package/out/replicache/src/kv/mem-store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
- package/out/replicache/src/kv/read-impl.js.map +1 -1
- package/out/replicache/src/kv/sqlite-store.js +1 -1
- package/out/replicache/src/kv/sqlite-store.js.map +1 -1
- package/out/replicache/src/kv/write-impl-base.js +4 -1
- package/out/replicache/src/kv/write-impl-base.js.map +1 -1
- package/out/replicache/src/kv/write-impl.js.map +1 -1
- package/out/replicache/src/log-options.js +2 -1
- package/out/replicache/src/log-options.js.map +1 -1
- package/out/replicache/src/make-idb-name.js +1 -1
- package/out/replicache/src/new-client-channel.js +9 -7
- package/out/replicache/src/new-client-channel.js.map +1 -1
- package/out/replicache/src/on-persist-channel.js +1 -1
- package/out/replicache/src/on-persist-channel.js.map +1 -1
- package/out/replicache/src/op-sqlite.js +1 -2
- package/out/replicache/src/pending-mutations.js +2 -1
- package/out/replicache/src/pending-mutations.js.map +1 -1
- package/out/replicache/src/persist/client-gc.js +2 -2
- package/out/replicache/src/persist/client-gc.js.map +1 -1
- package/out/replicache/src/persist/client-group-gc.js +2 -2
- package/out/replicache/src/persist/client-group-gc.js.map +1 -1
- package/out/replicache/src/persist/client-groups.js +1 -1
- package/out/replicache/src/persist/client-groups.js.map +1 -1
- package/out/replicache/src/persist/clients.js +1 -1
- package/out/replicache/src/persist/clients.js.map +1 -1
- package/out/replicache/src/persist/collect-idb-databases.js +5 -4
- package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
- package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
- package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
- package/out/replicache/src/persist/heartbeat.js +2 -2
- package/out/replicache/src/persist/heartbeat.js.map +1 -1
- package/out/replicache/src/persist/idb-databases-store.js +1 -1
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
- package/out/replicache/src/persist/make-client-id.js +1 -1
- package/out/replicache/src/persist/make-client-id.js.map +1 -1
- package/out/replicache/src/persist/persist.js +3 -2
- package/out/replicache/src/persist/persist.js.map +1 -1
- package/out/replicache/src/persist/refresh.js +8 -5
- package/out/replicache/src/persist/refresh.js.map +1 -1
- package/out/replicache/src/process-scheduler.js.map +1 -1
- package/out/replicache/src/replicache-impl.js +3 -3
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/scan-iterator.js.map +1 -1
- package/out/replicache/src/scan-options.js +7 -6
- package/out/replicache/src/scan-options.js.map +1 -1
- package/out/replicache/src/sqlite.js +1 -2
- package/out/replicache/src/subscriptions.js +1 -1
- package/out/replicache/src/subscriptions.js.map +1 -1
- package/out/replicache/src/sync/diff.js +3 -1
- package/out/replicache/src/sync/diff.js.map +1 -1
- package/out/replicache/src/sync/ids.js.map +1 -1
- package/out/replicache/src/sync/patch.js +2 -4
- package/out/replicache/src/sync/patch.js.map +1 -1
- package/out/replicache/src/sync/pull.js +3 -1
- package/out/replicache/src/sync/pull.js.map +1 -1
- package/out/replicache/src/sync/push.js.map +1 -1
- package/out/replicache/src/sync/request-id.js +1 -1
- package/out/replicache/src/sync/request-id.js.map +1 -1
- package/out/replicache/src/transactions.js +1 -1
- package/out/replicache/src/transactions.js.map +1 -1
- package/out/shared/src/arrays.js +4 -1
- package/out/shared/src/arrays.js.map +1 -1
- package/out/shared/src/asserts.js +1 -1
- package/out/shared/src/bigint-json.d.ts +9 -0
- package/out/shared/src/bigint-json.d.ts.map +1 -1
- package/out/shared/src/bigint-json.js +27 -2
- package/out/shared/src/bigint-json.js.map +1 -1
- package/out/shared/src/broadcast-channel.js +1 -1
- package/out/shared/src/btree-set.js +11 -8
- package/out/shared/src/btree-set.js.map +1 -1
- package/out/shared/src/cache.js.map +1 -1
- package/out/shared/src/config.js +1 -1
- package/out/shared/src/custom-key-map.js.map +1 -1
- package/out/shared/src/custom-key-set.js.map +1 -1
- package/out/shared/src/deep-clone.js +1 -1
- package/out/shared/src/document-visible.js.map +1 -1
- package/out/shared/src/dotenv.js.map +1 -1
- package/out/shared/src/error.js +1 -1
- package/out/shared/src/error.js.map +1 -1
- package/out/shared/src/hash.js +2 -2
- package/out/shared/src/hash.js.map +1 -1
- package/out/shared/src/iterables.js.map +1 -1
- package/out/shared/src/json-schema.js.map +1 -1
- package/out/shared/src/json.js.map +1 -1
- package/out/shared/src/logging-test-utils.js +1 -1
- package/out/shared/src/logging.js +1 -1
- package/out/shared/src/logging.js.map +1 -1
- package/out/shared/src/navigator.js +1 -1
- package/out/shared/src/options.js +9 -12
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/promise-race.js.map +1 -1
- package/out/shared/src/queue.js.map +1 -1
- package/out/shared/src/record-proxy.js.map +1 -1
- package/out/shared/src/ring-buffer.js.map +1 -1
- package/out/shared/src/size-of-value.js +7 -10
- package/out/shared/src/size-of-value.js.map +1 -1
- package/out/shared/src/sorted-entries.js.map +1 -1
- package/out/shared/src/tdigest-schema.js.map +1 -1
- package/out/shared/src/tdigest.js.map +1 -1
- package/out/shared/src/valita.js +1 -1
- package/out/shared/src/valita.js.map +1 -1
- package/out/z2s/src/compiler.js +2 -4
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/z2s/src/sql.js +1 -1
- package/out/z2s/src/sql.js.map +1 -1
- package/out/zero/package.js +212 -189
- package/out/zero/package.js.map +1 -1
- package/out/zero/src/adapters/drizzle.js +1 -2
- package/out/zero/src/adapters/kysely.js +1 -2
- package/out/zero/src/adapters/pg.js +1 -2
- package/out/zero/src/adapters/postgresjs.js +1 -2
- package/out/zero/src/adapters/prisma.js +1 -2
- package/out/zero/src/analyze.js +1 -2
- package/out/zero/src/change-protocol/v0.js +1 -2
- package/out/zero/src/expo-sqlite.js +1 -2
- package/out/zero/src/op-sqlite.js +1 -2
- package/out/zero/src/react-native.js.map +1 -1
- package/out/zero/src/sqlite.js +1 -2
- package/out/zero/src/zero-cache-dev.js +10 -9
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero/src/zero-out.js +2 -1
- package/out/zero/src/zero-out.js.map +1 -1
- package/out/zero-cache/src/auth/auth.js +1 -1
- package/out/zero-cache/src/auth/auth.js.map +1 -1
- package/out/zero-cache/src/auth/jwt.js +4 -1
- package/out/zero-cache/src/auth/jwt.js.map +1 -1
- package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +3 -2
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +5 -16
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/network.js +1 -1
- package/out/zero-cache/src/config/network.js.map +1 -1
- package/out/zero-cache/src/config/server-context.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +9 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +17 -2
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.js +1 -1
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
- package/out/zero-cache/src/db/create.js.map +1 -1
- package/out/zero-cache/src/db/index-predicate.js.map +1 -1
- package/out/zero-cache/src/db/lite-tables.d.ts +2 -2
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +1 -1
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.js +5 -3
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/pg-copy-binary.js +4 -3
- package/out/zero-cache/src/db/pg-copy-binary.js.map +1 -1
- package/out/zero-cache/src/db/pg-copy.js +0 -1
- package/out/zero-cache/src/db/pg-copy.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
- package/out/zero-cache/src/db/run-transaction.js.map +1 -1
- package/out/zero-cache/src/db/specs.js +7 -5
- package/out/zero-cache/src/db/specs.js.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -1
- package/out/zero-cache/src/db/statements.d.ts.map +1 -1
- package/out/zero-cache/src/db/statements.js +9 -2
- package/out/zero-cache/src/db/statements.js.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +5 -3
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
- package/out/zero-cache/src/db/warmup.js.map +1 -1
- package/out/zero-cache/src/observability/events.js.map +1 -1
- package/out/zero-cache/src/observability/log-throttle.js.map +1 -1
- package/out/zero-cache/src/observability/metrics.js.map +1 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +4 -2
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.js.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +2 -1
- package/out/zero-cache/src/server/anonymous-otel-start.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 -1
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
- package/out/zero-cache/src/server/logging.js +1 -1
- package/out/zero-cache/src/server/logging.js.map +1 -1
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
- package/out/zero-cache/src/server/otel-start.js.map +1 -1
- package/out/zero-cache/src/server/reaper.js +2 -2
- package/out/zero-cache/src/server/reaper.js.map +1 -1
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +2 -1
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/runner/runtime.js +2 -1
- package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
- package/out/zero-cache/src/server/slot-keeper.js.map +1 -1
- package/out/zero-cache/src/server/syncer-assigner.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +6 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.js +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/worker-urls.js.map +1 -1
- package/out/zero-cache/src/services/analyze.js +1 -1
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/init-cleanup.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js +3 -3
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +3 -3
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js +2 -2
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +4 -6
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js +2 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +10 -8
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +3 -2
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js +2 -2
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +3 -3
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +3 -3
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +13 -12
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +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 +8 -8
- 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/published.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.js +3 -2
- package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +2 -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 +13 -10
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js +1 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current.js +1 -1
- package/out/zero-cache/src/services/change-source/protocol/mod.js +1 -2
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state.js +1 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js +2 -3
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +2 -2
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +4 -2
- 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.js +21 -21
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +11 -10
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +3 -3
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/replica-poller.js +1 -1
- package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.js +12 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js +2 -2
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +4 -6
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +1 -3
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js.map +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 +2 -2
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.js +1 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +2 -2
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js +0 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -1
- package/out/zero-cache/src/services/heapz.js +2 -1
- package/out/zero-cache/src/services/heapz.js.map +1 -1
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +1 -1
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +4 -2
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +1 -1
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +2 -2
- package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +1 -1
- package/out/zero-cache/src/services/litestream/litestream-controller.js.map +1 -1
- package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
- package/out/zero-cache/src/services/litestream/restore-progress.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js +3 -2
- package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
- package/out/zero-cache/src/services/plannerz.js +4 -3
- package/out/zero-cache/src/services/plannerz.js.map +1 -1
- package/out/zero-cache/src/services/profz.js +5 -3
- package/out/zero-cache/src/services/profz.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-cookies.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-db.js +3 -2
- package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js +1 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/drain-handler.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.js +4 -3
- package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.js +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.js +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +19 -7
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.js +31 -15
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +10 -7
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/runner.js.map +1 -1
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +1 -1
- package/out/zero-cache/src/services/statz.js +2 -1
- package/out/zero-cache/src/services/statz.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +2 -2
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/batch-pacer.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +18 -0
- 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 +70 -23
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.d.ts +15 -2
- package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.js +46 -6
- package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +2 -2
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +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 +10 -5
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +12 -4
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js +1 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +2 -2
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +5 -3
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +8 -5
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/plan-warnings.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/push-cost.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/push-cutoff.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-shape.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.js +1 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js +7 -1
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +12 -4
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +11 -7
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +13 -9
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/error-with-level.js.map +1 -1
- package/out/zero-cache/src/types/lexi-version.js.map +1 -1
- package/out/zero-cache/src/types/lite.js +1 -1
- package/out/zero-cache/src/types/lite.js.map +1 -1
- package/out/zero-cache/src/types/pg-data-type.js +1 -1
- package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
- package/out/zero-cache/src/types/pg.js +6 -4
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/types/poke-chunk.js +2 -2
- package/out/zero-cache/src/types/poke-chunk.js.map +1 -1
- package/out/zero-cache/src/types/processes.js +1 -1
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/profiler.js.map +1 -1
- package/out/zero-cache/src/types/row-key.js.map +1 -1
- package/out/zero-cache/src/types/sql.js.map +1 -1
- package/out/zero-cache/src/types/streams.js +10 -9
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/strings.js.map +1 -1
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/types/timeout.js +1 -1
- package/out/zero-cache/src/types/websocket-handoff.js +1 -1
- package/out/zero-cache/src/types/ws.js +1 -1
- package/out/zero-cache/src/workers/connection.js +2 -3
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/mutator.js.map +1 -1
- package/out/zero-cache/src/workers/replicator.js +5 -4
- package/out/zero-cache/src/workers/replicator.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 +9 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +2 -2
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.js +1 -1
- package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/bindings.js +11 -11
- package/out/zero-client/src/client/connection-manager.js.map +1 -1
- package/out/zero-client/src/client/connection.js +1 -1
- package/out/zero-client/src/client/connection.js.map +1 -1
- package/out/zero-client/src/client/context.js.map +1 -1
- package/out/zero-client/src/client/crud-impl.js +1 -1
- package/out/zero-client/src/client/crud-impl.js.map +1 -1
- package/out/zero-client/src/client/crud.js +1 -1
- package/out/zero-client/src/client/crud.js.map +1 -1
- package/out/zero-client/src/client/custom.js +1 -1
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/enable-analytics.js +1 -1
- package/out/zero-client/src/client/enable-analytics.js.map +1 -1
- package/out/zero-client/src/client/error.js.map +1 -1
- package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
- package/out/zero-client/src/client/inspector/client.js.map +1 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js +1 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
- package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
- package/out/zero-client/src/client/inspector/query.js.map +1 -1
- package/out/zero-client/src/client/ivm-branch.js +1 -3
- package/out/zero-client/src/client/ivm-branch.js.map +1 -1
- package/out/zero-client/src/client/keys.js +2 -1
- package/out/zero-client/src/client/keys.js.map +1 -1
- package/out/zero-client/src/client/log-options.js.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js +5 -3
- package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
- package/out/zero-client/src/client/metrics.js +3 -5
- package/out/zero-client/src/client/metrics.js.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/query-manager.js +2 -2
- package/out/zero-client/src/client/query-manager.js.map +1 -1
- package/out/zero-client/src/client/reload-error-handler.js +4 -3
- package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
- package/out/zero-client/src/client/zero-rep.js.map +1 -1
- package/out/zero-client/src/client/zero.js +19 -11
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.js +23 -23
- package/out/zero-client/src/util/nanoid.js.map +1 -1
- package/out/zero-permissions/src/permissions.js +3 -2
- package/out/zero-permissions/src/permissions.js.map +1 -1
- package/out/zero-pg/src/mod.js +9 -9
- package/out/zero-protocol/src/analyze-query-result.js +1 -1
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/application-error.js.map +1 -1
- package/out/zero-protocol/src/ast.js +19 -9
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
- package/out/zero-protocol/src/client-schema.js +1 -1
- package/out/zero-protocol/src/client-schema.js.map +1 -1
- package/out/zero-protocol/src/close-connection.js +1 -1
- package/out/zero-protocol/src/close-connection.js.map +1 -1
- package/out/zero-protocol/src/connect.js +1 -1
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/custom-queries.js +1 -1
- package/out/zero-protocol/src/custom-queries.js.map +1 -1
- package/out/zero-protocol/src/data.js +4 -2
- package/out/zero-protocol/src/data.js.map +1 -1
- package/out/zero-protocol/src/delete-clients.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +27 -27
- package/out/zero-protocol/src/down.js.map +1 -1
- package/out/zero-protocol/src/error.js.map +1 -1
- package/out/zero-protocol/src/inspect-down.js +1 -1
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/inspect-up.js +1 -1
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/mutate-server.js +1 -1
- package/out/zero-protocol/src/mutate-server.js.map +1 -1
- package/out/zero-protocol/src/mutation-id.js.map +1 -1
- package/out/zero-protocol/src/mutation.js +1 -1
- package/out/zero-protocol/src/mutation.js.map +1 -1
- package/out/zero-protocol/src/mutations-patch.js +1 -1
- package/out/zero-protocol/src/mutations-patch.js.map +1 -1
- package/out/zero-protocol/src/ping.js +1 -1
- package/out/zero-protocol/src/ping.js.map +1 -1
- package/out/zero-protocol/src/poke.js +1 -1
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/pong.js +1 -1
- package/out/zero-protocol/src/pong.js.map +1 -1
- package/out/zero-protocol/src/primary-key.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +1 -0
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/pull.js +1 -1
- package/out/zero-protocol/src/pull.js.map +1 -1
- package/out/zero-protocol/src/push.js +1 -1
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.js +1 -1
- package/out/zero-protocol/src/queries-patch.js.map +1 -1
- package/out/zero-protocol/src/query-hash-visitor.js.map +1 -1
- package/out/zero-protocol/src/query-hash.js +2 -2
- package/out/zero-protocol/src/query-server.js +1 -1
- package/out/zero-protocol/src/query-server.js.map +1 -1
- package/out/zero-protocol/src/row-patch.js.map +1 -1
- package/out/zero-protocol/src/up.js.map +1 -1
- package/out/zero-protocol/src/update-auth.js.map +1 -1
- package/out/zero-protocol/src/version.js.map +1 -1
- package/out/zero-react/src/bindings.js +11 -11
- package/out/zero-react/src/mod.js +5 -5
- package/out/zero-react/src/use-query.js +1 -1
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +1 -1
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.js +2 -1
- package/out/zero-react/src/zero-provider.js.map +1 -1
- package/out/zero-react/src/zero.js +23 -23
- package/out/zero-schema/src/builder/schema-builder.js +3 -2
- package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +1 -1
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-schema/src/compiled-permissions.js.map +1 -1
- package/out/zero-schema/src/name-mapper.js +7 -5
- package/out/zero-schema/src/name-mapper.js.map +1 -1
- package/out/zero-schema/src/schema-config.js +1 -1
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-server/src/adapters/drizzle.js.map +1 -1
- package/out/zero-server/src/adapters/kysely.js.map +1 -1
- package/out/zero-server/src/adapters/pg.js.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
- package/out/zero-server/src/adapters/prisma.js.map +1 -1
- package/out/zero-server/src/closable-db-transaction.js.map +1 -1
- package/out/zero-server/src/custom.js +1 -1
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/mod.js +8 -8
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/push-processor.js.map +1 -1
- package/out/zero-server/src/queries/process-queries.js +2 -1
- package/out/zero-server/src/queries/process-queries.js.map +1 -1
- package/out/zero-server/src/schema.js +7 -7
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-server/src/zql-database.js.map +1 -1
- package/out/zero-solid/src/bindings.js +11 -11
- package/out/zero-solid/src/mod.js +5 -5
- package/out/zero-solid/src/solid-view.js +1 -1
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/use-connection-state.js +2 -1
- package/out/zero-solid/src/use-connection-state.js.map +1 -1
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/use-zero-online.js +2 -1
- package/out/zero-solid/src/use-zero-online.js.map +1 -1
- package/out/zero-solid/src/use-zero.js +3 -2
- package/out/zero-solid/src/use-zero.js.map +1 -1
- package/out/zero-solid/src/zero.js +23 -23
- package/out/zero-types/src/name-mapper.js.map +1 -1
- package/out/zql/src/builder/builder.js +15 -13
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/correlated-predicate-pushdown.js.map +1 -1
- package/out/zql/src/builder/debug-delegate.js.map +1 -1
- package/out/zql/src/builder/like.js +0 -1
- package/out/zql/src/builder/like.js.map +1 -1
- package/out/zql/src/ivm/array-view.js.map +1 -1
- package/out/zql/src/ivm/cap.js +2 -4
- package/out/zql/src/ivm/cap.js.map +1 -1
- package/out/zql/src/ivm/constraint.js +1 -1
- package/out/zql/src/ivm/constraint.js.map +1 -1
- package/out/zql/src/ivm/data.js.map +1 -1
- package/out/zql/src/ivm/deferred-input.js.map +1 -1
- package/out/zql/src/ivm/exists.js +20 -18
- package/out/zql/src/ivm/exists.js.map +1 -1
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/fan-out.js.map +1 -1
- package/out/zql/src/ivm/filter-operators.js +1 -1
- package/out/zql/src/ivm/filter-operators.js.map +1 -1
- package/out/zql/src/ivm/filter-push.js.map +1 -1
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/flipped-join.js +1 -3
- package/out/zql/src/ivm/flipped-join.js.map +1 -1
- package/out/zql/src/ivm/join-index-tap.js.map +1 -1
- package/out/zql/src/ivm/join-index.js.map +1 -1
- package/out/zql/src/ivm/join-utils.js +11 -13
- package/out/zql/src/ivm/join-utils.js.map +1 -1
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
- package/out/zql/src/ivm/memory-source.js +26 -22
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/memory-storage.js.map +1 -1
- package/out/zql/src/ivm/operator.js +2 -2
- package/out/zql/src/ivm/push-accumulated.js +0 -1
- package/out/zql/src/ivm/push-accumulated.js.map +1 -1
- package/out/zql/src/ivm/skip-yields.js.map +1 -1
- package/out/zql/src/ivm/skip.js.map +1 -1
- package/out/zql/src/ivm/take-gate.js.map +1 -1
- package/out/zql/src/ivm/take.js +3 -5
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/union-fan-in.js +1 -1
- package/out/zql/src/ivm/union-fan-in.js.map +1 -1
- package/out/zql/src/ivm/union-fan-out.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +1 -1
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/mutate/crud.js +3 -2
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zql/src/planner/planner-builder.js +1 -1
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/planner/planner-connection.js.map +1 -1
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/planner/planner-fan-in.js.map +1 -1
- package/out/zql/src/planner/planner-fan-out.js.map +1 -1
- package/out/zql/src/planner/planner-filter.js.map +1 -1
- package/out/zql/src/planner/planner-graph.js +1 -5
- package/out/zql/src/planner/planner-graph.js.map +1 -1
- package/out/zql/src/planner/planner-join.js +1 -1
- package/out/zql/src/planner/planner-join.js.map +1 -1
- package/out/zql/src/planner/planner-source.js.map +1 -1
- package/out/zql/src/planner/planner-terminus.js.map +1 -1
- package/out/zql/src/query/create-builder.js +2 -1
- package/out/zql/src/query/create-builder.js.map +1 -1
- package/out/zql/src/query/expression.js +1 -1
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/measure-push-operator.js.map +1 -1
- package/out/zql/src/query/named.js +2 -1
- package/out/zql/src/query/named.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +1 -1
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-impl.js +3 -2
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-registry.js +1 -1
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/query-transitions.js +1 -1
- package/out/zql/src/query/query-transitions.js.map +1 -1
- package/out/zql/src/query/runnable-query-impl.js +3 -2
- package/out/zql/src/query/runnable-query-impl.js.map +1 -1
- package/out/zql/src/query/static-query.js.map +1 -1
- package/out/zql/src/query/ttl.js +8 -8
- package/out/zql/src/query/ttl.js.map +1 -1
- package/out/zql/src/query/validate-input.js.map +1 -1
- package/out/zqlite/src/database-storage.d.ts +27 -8
- package/out/zqlite/src/database-storage.d.ts.map +1 -1
- package/out/zqlite/src/database-storage.js +195 -26
- package/out/zqlite/src/database-storage.js.map +1 -1
- package/out/zqlite/src/db.d.ts +47 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +121 -21
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/explain-queries.js.map +1 -1
- package/out/zqlite/src/fetch-sql.d.ts +27 -0
- package/out/zqlite/src/fetch-sql.d.ts.map +1 -0
- package/out/zqlite/src/fetch-sql.js +112 -0
- package/out/zqlite/src/fetch-sql.js.map +1 -0
- package/out/zqlite/src/index-usage.js.map +1 -1
- package/out/zqlite/src/internal/sql-inline.js.map +1 -1
- package/out/zqlite/src/internal/sql.js.map +1 -1
- package/out/zqlite/src/internal/statement-cache.d.ts +7 -0
- package/out/zqlite/src/internal/statement-cache.d.ts.map +1 -1
- package/out/zqlite/src/internal/statement-cache.js +11 -4
- package/out/zqlite/src/internal/statement-cache.js.map +1 -1
- package/out/zqlite/src/mod.js +5 -5
- package/out/zqlite/src/pending-delta.js.map +1 -1
- package/out/zqlite/src/query-builder.d.ts +11 -1
- package/out/zqlite/src/query-builder.d.ts.map +1 -1
- package/out/zqlite/src/query-builder.js +22 -7
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/query-delegate.js.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +2 -5
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +3 -2
- package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
- package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +20 -2
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +73 -39
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +17 -15
- package/out/otel/src/maybe-time.d.ts +0 -3
- package/out/otel/src/maybe-time.d.ts.map +0 -1
- package/out/otel/src/maybe-time.js +0 -15
- package/out/otel/src/maybe-time.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-poke-handler.js","names":["#replicachePoke","#onPokeError","#clientID","#lc","#pokeBuffer","#pokeLock","#schema","#serverToClient","#mutationTracker","#receivingPoke","#handlePokeError","#pokePlaybackLoopRunning","#startPlaybackLoop","#clear","#scheduledCallback","#lastScheduledTimestamp","#processPokesForFrame"],"sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"sourcesContent":["import {Lock} from '@rocicorp/lock';\nimport type {LogContext} from '@rocicorp/logger';\nimport type {\n PatchOperationInternal,\n PokeInternal,\n} from '../../../replicache/src/impl.ts';\nimport type {PatchOperation} from '../../../replicache/src/patch-operation.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {MutationPatch} from '../../../zero-protocol/src/mutations-patch.ts';\nimport {\n pokePartsSchema,\n type PokeEndBody,\n type PokePartBody,\n type PokeParts,\n type PokeStartBody,\n} from '../../../zero-protocol/src/poke.ts';\nimport type {QueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport type {RowPatchOp} from '../../../zero-protocol/src/row-patch.ts';\nimport {\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n toDesiredQueriesKey,\n toGotQueriesKey,\n toMutationResponseKey,\n toPrimaryKeyString,\n} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\ntype PokeAccumulator = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly pokeEnd: PokeEndBody;\n};\n\ntype ReceivingPoke = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly chunks: Uint8Array[];\n};\n\nexport type PokeEndResult = {\n readonly lastMutationIDChangeForSelf: number | undefined;\n readonly hasRows: boolean;\n};\n\n/**\n * Handles the multi-part format of zero pokes.\n * As an optimization it also debounces pokes, only poking Replicache with a\n * merged poke at most once per scheduled callback (using setTimeout).\n * This debouncing avoids wastefully computing separate diffs and IVM updates\n * for intermediate states. setTimeout is used instead of requestAnimationFrame\n * to ensure pokes are delivered even when the tab is in the background,\n * enabling notifications (sounds, favicon badges) to work correctly.\n */\nexport class PokeHandler {\n readonly #replicachePoke: (poke: PokeInternal) => Promise<void>;\n readonly #onPokeError: (error: unknown) => void;\n readonly #clientID: ClientID;\n readonly #lc: LogContext;\n #receivingPoke: ReceivingPoke | undefined = undefined;\n readonly #pokeBuffer: PokeAccumulator[] = [];\n #pokePlaybackLoopRunning = false;\n #lastScheduledTimestamp = 0;\n // Serializes calls to this.#replicachePoke otherwise we can cause out of\n // order poke errors.\n readonly #pokeLock = new Lock();\n readonly #schema: Schema;\n readonly #serverToClient: NameMapper;\n readonly #mutationTracker: MutationTracker;\n\n constructor(\n replicachePoke: (poke: PokeInternal) => Promise<void>,\n onPokeError: (error: unknown) => void,\n clientID: ClientID,\n schema: Schema,\n lc: LogContext,\n mutationTracker: MutationTracker,\n ) {\n this.#replicachePoke = replicachePoke;\n this.#onPokeError = onPokeError;\n this.#clientID = clientID;\n this.#schema = schema;\n this.#serverToClient = serverToClient(schema.tables);\n this.#lc = lc.withContext('PokeHandler');\n this.#mutationTracker = mutationTracker;\n }\n\n handlePokeStart(pokeStart: PokeStartBody) {\n if (this.#receivingPoke) {\n this.#handlePokeError(\n `pokeStart ${JSON.stringify(\n pokeStart,\n )} while still receiving ${JSON.stringify(\n this.#receivingPoke.pokeStart,\n )} `,\n );\n return;\n }\n this.#receivingPoke = {\n pokeStart,\n parts: [],\n chunks: [],\n };\n }\n\n handlePokePart(pokePart: PokePartBody): number | undefined {\n if (pokePart.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokePart for ${pokePart.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (this.#receivingPoke.chunks.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.parts.push(pokePart);\n return pokePart.lastMutationIDChanges?.[this.#clientID];\n }\n\n handlePokeChunk(chunk: Uint8Array): void {\n if (!this.#receivingPoke) {\n this.#handlePokeError('received a binary poke chunk without pokeStart');\n return;\n }\n if (this.#receivingPoke.parts.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.chunks.push(chunk);\n }\n\n handlePokeEnd(pokeEnd: PokeEndBody): PokeEndResult | undefined {\n if (pokeEnd.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokeEnd for ${pokeEnd.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (pokeEnd.cancel) {\n this.#receivingPoke = undefined;\n return;\n }\n const receivingPoke = this.#receivingPoke;\n let parts = receivingPoke.parts;\n if (receivingPoke.chunks.length > 0) {\n try {\n parts = decodePokeChunks(receivingPoke.chunks);\n } catch (e) {\n this.#handlePokeError(e);\n return;\n }\n }\n\n const result = summarizePoke(parts, this.#clientID);\n this.#pokeBuffer.push({\n pokeStart: receivingPoke.pokeStart,\n parts,\n pokeEnd,\n });\n this.#receivingPoke = undefined;\n if (!this.#pokePlaybackLoopRunning) {\n this.#startPlaybackLoop();\n }\n return result;\n }\n\n handleDisconnect(): void {\n this.#lc.debug?.('clearing due to disconnect');\n this.#clear();\n }\n\n #startPlaybackLoop() {\n this.#lc.debug?.('starting playback loop');\n this.#pokePlaybackLoopRunning = true;\n setTimeout(this.#scheduledCallback, 0);\n }\n\n #scheduledCallback = async () => {\n const lc = this.#lc.withContext(\n 'scheduledAt',\n Math.floor(performance.now()),\n );\n if (this.#pokeBuffer.length === 0) {\n lc.debug?.('stopping playback loop');\n this.#pokePlaybackLoopRunning = false;\n return;\n }\n setTimeout(this.#scheduledCallback, 0);\n const start = performance.now();\n lc.debug?.(\n 'scheduled callback fired, processing pokes. Since last callback',\n start - this.#lastScheduledTimestamp,\n );\n this.#lastScheduledTimestamp = start;\n await this.#processPokesForFrame(lc);\n lc.debug?.('processing pokes took', performance.now() - start);\n };\n\n #processPokesForFrame(lc: LogContext): Promise<void> {\n return this.#pokeLock.withLock(async () => {\n const now = Date.now();\n lc.debug?.('got poke lock at', now);\n lc.debug?.('merging', this.#pokeBuffer.length);\n try {\n const merged = mergePokes(\n this.#pokeBuffer,\n this.#schema,\n this.#serverToClient,\n );\n this.#pokeBuffer.length = 0;\n if (merged === undefined) {\n lc.debug?.('frame is empty');\n return;\n }\n const start = performance.now();\n lc.debug?.('poking replicache');\n await this.#replicachePoke(merged);\n lc.debug?.('poking replicache took', performance.now() - start);\n\n if (!('error' in merged.pullResponse)) {\n const lmid =\n merged.pullResponse.lastMutationIDChanges[this.#clientID];\n if (lmid !== undefined) {\n this.#mutationTracker.lmidAdvanced(lmid);\n }\n }\n } catch (e) {\n this.#handlePokeError(e);\n }\n });\n }\n\n #handlePokeError(e: unknown) {\n if (String(e).includes('unexpected base cookie for poke')) {\n // This can happen if cookie changes due to refresh from idb due\n // to an update arriving to different tabs in the same\n // client group at very different times. Unusual but possible.\n this.#lc.debug?.('clearing due to', e);\n } else {\n this.#lc.error?.('clearing due to unexpected poke error', e);\n }\n this.#clear();\n this.#onPokeError(e);\n }\n\n #clear() {\n this.#receivingPoke = undefined;\n this.#pokeBuffer.length = 0;\n }\n}\n\nfunction decodePokeChunks(chunks: Uint8Array[]): PokeParts {\n const decoder = new TextDecoder('utf-8', {fatal: true});\n const decoded = new Array<string>(chunks.length + 1);\n for (let i = 0; i < chunks.length; i++) {\n decoded[i] = decoder.decode(chunks[i], {stream: true});\n }\n decoded[chunks.length] = decoder.decode();\n chunks.length = 0;\n return v.parse(JSON.parse(decoded.join('')), pokePartsSchema, 'passthrough');\n}\n\nfunction summarizePoke(\n parts: PokePartBody[],\n clientID: ClientID,\n): PokeEndResult {\n let lastMutationIDChangeForSelf: number | undefined;\n let hasRows = false;\n for (const part of parts) {\n const lmid = part.lastMutationIDChanges?.[clientID];\n if (lmid !== undefined) {\n lastMutationIDChangeForSelf = lmid;\n }\n hasRows ||= Boolean(part.rowsPatch?.length);\n }\n return {lastMutationIDChangeForSelf, hasRows};\n}\n\nexport function mergePokes(\n pokeBuffer: PokeAccumulator[],\n schema: Schema,\n serverToClient: NameMapper,\n):\n | (PokeInternal & {mutationResults?: MutationPatch[] | undefined})\n | undefined {\n if (pokeBuffer.length === 0) {\n return undefined;\n }\n const {baseCookie} = pokeBuffer[0].pokeStart;\n // oxlint-disable-next-line typescript/no-non-null-assertion\n const lastPoke = pokeBuffer.at(-1)!;\n const {cookie} = lastPoke.pokeEnd;\n const mergedPatch: PatchOperationInternal[] = [];\n const mergedLastMutationIDChanges: Record<string, number> = {};\n const mutationResults: MutationPatch[] = [];\n\n let prevPokeEnd = undefined;\n for (const pokeAccumulator of pokeBuffer) {\n if (\n prevPokeEnd &&\n pokeAccumulator.pokeStart.baseCookie &&\n pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie\n ) {\n throw Error(\n `unexpected cookie gap ${JSON.stringify(prevPokeEnd)} ${JSON.stringify(\n pokeAccumulator.pokeStart,\n )}`,\n );\n }\n prevPokeEnd = pokeAccumulator.pokeEnd;\n for (const pokePart of pokeAccumulator.parts) {\n if (pokePart.lastMutationIDChanges) {\n for (const [clientID, lastMutationID] of Object.entries(\n pokePart.lastMutationIDChanges,\n )) {\n mergedLastMutationIDChanges[clientID] = lastMutationID;\n }\n }\n if (pokePart.desiredQueriesPatches) {\n for (const [clientID, queriesPatch] of Object.entries(\n pokePart.desiredQueriesPatches,\n )) {\n for (const op of queriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, hash =>\n toDesiredQueriesKey(clientID, hash),\n ),\n );\n }\n }\n }\n if (pokePart.gotQueriesPatch) {\n for (const op of pokePart.gotQueriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, toGotQueriesKey),\n );\n }\n }\n if (pokePart.rowsPatch) {\n for (const p of pokePart.rowsPatch) {\n const patchOp = rowsPatchOpToReplicachePatchOp(\n p,\n schema,\n serverToClient,\n );\n if (patchOp) {\n mergedPatch.push(patchOp);\n }\n }\n }\n if (pokePart.mutationsPatch) {\n for (const op of pokePart.mutationsPatch) {\n mergedPatch.push(mutationPatchOpToReplicachePatchOp(op));\n }\n }\n }\n }\n const ret: PokeInternal & {mutationResults?: MutationPatch[] | undefined} = {\n baseCookie,\n pullResponse: {\n lastMutationIDChanges: mergedLastMutationIDChanges,\n patch: mergedPatch,\n cookie,\n },\n };\n\n // For backwards compatibility. Because we're strict on our validation,\n // zero-client must be able to parse pokes with this field before we introduce it.\n // So users can update their clients and then start using custom mutators that write responses to the db.\n if (mutationResults.length > 0) {\n ret.mutationResults = mutationResults;\n }\n return ret;\n}\n\nfunction queryPatchOpToReplicachePatchOp(\n op: QueriesPatchOp,\n toKey: (hash: string) => string,\n): PatchOperation {\n switch (op.op) {\n case 'clear':\n return op;\n case 'del':\n return {\n op: 'del',\n key: toKey(op.hash),\n };\n case 'put':\n return {\n op: 'put',\n key: toKey(op.hash),\n value: null,\n };\n default:\n unreachable(op);\n }\n}\n\nexport function mutationPatchOpToReplicachePatchOp(\n op: MutationPatch,\n): PatchOperationInternal {\n switch (op.op) {\n case 'put':\n return {\n op: 'put',\n key: toMutationResponseKey(op.mutation.id),\n value: op.mutation.result,\n };\n case 'del':\n return {\n op: 'del',\n key: toMutationResponseKey(op.id),\n };\n }\n}\n\nfunction rowsPatchOpToReplicachePatchOp(\n op: RowPatchOp,\n schema: Schema,\n serverToClient: NameMapper,\n): PatchOperationInternal | undefined {\n if (op.op === 'clear') {\n return op;\n }\n // Skip rows for tables not in the client schema. This can happen when\n // the server-side query AST references tables (e.g. issueNotifications)\n // that are not yet part of the client schema definition.\n const tableName = serverToClient.tableNameIfKnown(op.tableName);\n if (!tableName) {\n return undefined;\n }\n switch (op.op) {\n case 'del':\n return {\n op: 'del',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n };\n case 'put':\n return {\n op: 'put',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.value),\n ),\n value: serverToClient.row(op.tableName, op.value),\n };\n case 'update':\n return {\n op: 'update',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n merge: op.merge\n ? serverToClient.row(op.tableName, op.merge)\n : undefined,\n constrain: serverToClient.columns(op.tableName, op.constrain),\n };\n default:\n unreachable(op);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zero-poke-handler.js","names":["v.parse"],"sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"sourcesContent":["import {Lock} from '@rocicorp/lock';\nimport type {LogContext} from '@rocicorp/logger';\nimport type {\n PatchOperationInternal,\n PokeInternal,\n} from '../../../replicache/src/impl.ts';\nimport type {PatchOperation} from '../../../replicache/src/patch-operation.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {MutationPatch} from '../../../zero-protocol/src/mutations-patch.ts';\nimport {\n pokePartsSchema,\n type PokeEndBody,\n type PokePartBody,\n type PokeParts,\n type PokeStartBody,\n} from '../../../zero-protocol/src/poke.ts';\nimport type {QueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport type {RowPatchOp} from '../../../zero-protocol/src/row-patch.ts';\nimport {\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n toDesiredQueriesKey,\n toGotQueriesKey,\n toMutationResponseKey,\n toPrimaryKeyString,\n} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\ntype PokeAccumulator = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly pokeEnd: PokeEndBody;\n};\n\ntype ReceivingPoke = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly chunks: Uint8Array[];\n};\n\nexport type PokeEndResult = {\n readonly lastMutationIDChangeForSelf: number | undefined;\n readonly hasRows: boolean;\n};\n\n/**\n * Handles the multi-part format of zero pokes.\n * As an optimization it also debounces pokes, only poking Replicache with a\n * merged poke at most once per scheduled callback (using setTimeout).\n * This debouncing avoids wastefully computing separate diffs and IVM updates\n * for intermediate states. setTimeout is used instead of requestAnimationFrame\n * to ensure pokes are delivered even when the tab is in the background,\n * enabling notifications (sounds, favicon badges) to work correctly.\n */\nexport class PokeHandler {\n readonly #replicachePoke: (poke: PokeInternal) => Promise<void>;\n readonly #onPokeError: (error: unknown) => void;\n readonly #clientID: ClientID;\n readonly #lc: LogContext;\n #receivingPoke: ReceivingPoke | undefined = undefined;\n readonly #pokeBuffer: PokeAccumulator[] = [];\n #pokePlaybackLoopRunning = false;\n #lastScheduledTimestamp = 0;\n // Serializes calls to this.#replicachePoke otherwise we can cause out of\n // order poke errors.\n readonly #pokeLock = new Lock();\n readonly #schema: Schema;\n readonly #serverToClient: NameMapper;\n readonly #mutationTracker: MutationTracker;\n\n constructor(\n replicachePoke: (poke: PokeInternal) => Promise<void>,\n onPokeError: (error: unknown) => void,\n clientID: ClientID,\n schema: Schema,\n lc: LogContext,\n mutationTracker: MutationTracker,\n ) {\n this.#replicachePoke = replicachePoke;\n this.#onPokeError = onPokeError;\n this.#clientID = clientID;\n this.#schema = schema;\n this.#serverToClient = serverToClient(schema.tables);\n this.#lc = lc.withContext('PokeHandler');\n this.#mutationTracker = mutationTracker;\n }\n\n handlePokeStart(pokeStart: PokeStartBody) {\n if (this.#receivingPoke) {\n this.#handlePokeError(\n `pokeStart ${JSON.stringify(\n pokeStart,\n )} while still receiving ${JSON.stringify(\n this.#receivingPoke.pokeStart,\n )} `,\n );\n return;\n }\n this.#receivingPoke = {\n pokeStart,\n parts: [],\n chunks: [],\n };\n }\n\n handlePokePart(pokePart: PokePartBody): number | undefined {\n if (pokePart.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokePart for ${pokePart.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (this.#receivingPoke.chunks.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.parts.push(pokePart);\n return pokePart.lastMutationIDChanges?.[this.#clientID];\n }\n\n handlePokeChunk(chunk: Uint8Array): void {\n if (!this.#receivingPoke) {\n this.#handlePokeError('received a binary poke chunk without pokeStart');\n return;\n }\n if (this.#receivingPoke.parts.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.chunks.push(chunk);\n }\n\n handlePokeEnd(pokeEnd: PokeEndBody): PokeEndResult | undefined {\n if (pokeEnd.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokeEnd for ${pokeEnd.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (pokeEnd.cancel) {\n this.#receivingPoke = undefined;\n return;\n }\n const receivingPoke = this.#receivingPoke;\n let parts = receivingPoke.parts;\n if (receivingPoke.chunks.length > 0) {\n try {\n parts = decodePokeChunks(receivingPoke.chunks);\n } catch (e) {\n this.#handlePokeError(e);\n return;\n }\n }\n\n const result = summarizePoke(parts, this.#clientID);\n this.#pokeBuffer.push({\n pokeStart: receivingPoke.pokeStart,\n parts,\n pokeEnd,\n });\n this.#receivingPoke = undefined;\n if (!this.#pokePlaybackLoopRunning) {\n this.#startPlaybackLoop();\n }\n return result;\n }\n\n handleDisconnect(): void {\n this.#lc.debug?.('clearing due to disconnect');\n this.#clear();\n }\n\n #startPlaybackLoop() {\n this.#lc.debug?.('starting playback loop');\n this.#pokePlaybackLoopRunning = true;\n setTimeout(this.#scheduledCallback, 0);\n }\n\n #scheduledCallback = async () => {\n const lc = this.#lc.withContext(\n 'scheduledAt',\n Math.floor(performance.now()),\n );\n if (this.#pokeBuffer.length === 0) {\n lc.debug?.('stopping playback loop');\n this.#pokePlaybackLoopRunning = false;\n return;\n }\n setTimeout(this.#scheduledCallback, 0);\n const start = performance.now();\n lc.debug?.(\n 'scheduled callback fired, processing pokes. Since last callback',\n start - this.#lastScheduledTimestamp,\n );\n this.#lastScheduledTimestamp = start;\n await this.#processPokesForFrame(lc);\n lc.debug?.('processing pokes took', performance.now() - start);\n };\n\n #processPokesForFrame(lc: LogContext): Promise<void> {\n return this.#pokeLock.withLock(async () => {\n const now = Date.now();\n lc.debug?.('got poke lock at', now);\n lc.debug?.('merging', this.#pokeBuffer.length);\n try {\n const merged = mergePokes(\n this.#pokeBuffer,\n this.#schema,\n this.#serverToClient,\n );\n this.#pokeBuffer.length = 0;\n if (merged === undefined) {\n lc.debug?.('frame is empty');\n return;\n }\n const start = performance.now();\n lc.debug?.('poking replicache');\n await this.#replicachePoke(merged);\n lc.debug?.('poking replicache took', performance.now() - start);\n\n if (!('error' in merged.pullResponse)) {\n const lmid =\n merged.pullResponse.lastMutationIDChanges[this.#clientID];\n if (lmid !== undefined) {\n this.#mutationTracker.lmidAdvanced(lmid);\n }\n }\n } catch (e) {\n this.#handlePokeError(e);\n }\n });\n }\n\n #handlePokeError(e: unknown) {\n if (String(e).includes('unexpected base cookie for poke')) {\n // This can happen if cookie changes due to refresh from idb due\n // to an update arriving to different tabs in the same\n // client group at very different times. Unusual but possible.\n this.#lc.debug?.('clearing due to', e);\n } else {\n this.#lc.error?.('clearing due to unexpected poke error', e);\n }\n this.#clear();\n this.#onPokeError(e);\n }\n\n #clear() {\n this.#receivingPoke = undefined;\n this.#pokeBuffer.length = 0;\n }\n}\n\nfunction decodePokeChunks(chunks: Uint8Array[]): PokeParts {\n const decoder = new TextDecoder('utf-8', {fatal: true});\n const decoded = new Array<string>(chunks.length + 1);\n for (let i = 0; i < chunks.length; i++) {\n decoded[i] = decoder.decode(chunks[i], {stream: true});\n }\n decoded[chunks.length] = decoder.decode();\n chunks.length = 0;\n return v.parse(JSON.parse(decoded.join('')), pokePartsSchema, 'passthrough');\n}\n\nfunction summarizePoke(\n parts: PokePartBody[],\n clientID: ClientID,\n): PokeEndResult {\n let lastMutationIDChangeForSelf: number | undefined;\n let hasRows = false;\n for (const part of parts) {\n const lmid = part.lastMutationIDChanges?.[clientID];\n if (lmid !== undefined) {\n lastMutationIDChangeForSelf = lmid;\n }\n hasRows ||= Boolean(part.rowsPatch?.length);\n }\n return {lastMutationIDChangeForSelf, hasRows};\n}\n\nexport function mergePokes(\n pokeBuffer: PokeAccumulator[],\n schema: Schema,\n serverToClient: NameMapper,\n):\n | (PokeInternal & {mutationResults?: MutationPatch[] | undefined})\n | undefined {\n if (pokeBuffer.length === 0) {\n return undefined;\n }\n const {baseCookie} = pokeBuffer[0].pokeStart;\n // oxlint-disable-next-line typescript/no-non-null-assertion\n const lastPoke = pokeBuffer.at(-1)!;\n const {cookie} = lastPoke.pokeEnd;\n const mergedPatch: PatchOperationInternal[] = [];\n const mergedLastMutationIDChanges: Record<string, number> = {};\n const mutationResults: MutationPatch[] = [];\n\n let prevPokeEnd = undefined;\n for (const pokeAccumulator of pokeBuffer) {\n if (\n prevPokeEnd &&\n pokeAccumulator.pokeStart.baseCookie &&\n pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie\n ) {\n throw Error(\n `unexpected cookie gap ${JSON.stringify(prevPokeEnd)} ${JSON.stringify(\n pokeAccumulator.pokeStart,\n )}`,\n );\n }\n prevPokeEnd = pokeAccumulator.pokeEnd;\n for (const pokePart of pokeAccumulator.parts) {\n if (pokePart.lastMutationIDChanges) {\n for (const [clientID, lastMutationID] of Object.entries(\n pokePart.lastMutationIDChanges,\n )) {\n mergedLastMutationIDChanges[clientID] = lastMutationID;\n }\n }\n if (pokePart.desiredQueriesPatches) {\n for (const [clientID, queriesPatch] of Object.entries(\n pokePart.desiredQueriesPatches,\n )) {\n for (const op of queriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, hash =>\n toDesiredQueriesKey(clientID, hash),\n ),\n );\n }\n }\n }\n if (pokePart.gotQueriesPatch) {\n for (const op of pokePart.gotQueriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, toGotQueriesKey),\n );\n }\n }\n if (pokePart.rowsPatch) {\n for (const p of pokePart.rowsPatch) {\n const patchOp = rowsPatchOpToReplicachePatchOp(\n p,\n schema,\n serverToClient,\n );\n if (patchOp) {\n mergedPatch.push(patchOp);\n }\n }\n }\n if (pokePart.mutationsPatch) {\n for (const op of pokePart.mutationsPatch) {\n mergedPatch.push(mutationPatchOpToReplicachePatchOp(op));\n }\n }\n }\n }\n const ret: PokeInternal & {mutationResults?: MutationPatch[] | undefined} = {\n baseCookie,\n pullResponse: {\n lastMutationIDChanges: mergedLastMutationIDChanges,\n patch: mergedPatch,\n cookie,\n },\n };\n\n // For backwards compatibility. Because we're strict on our validation,\n // zero-client must be able to parse pokes with this field before we introduce it.\n // So users can update their clients and then start using custom mutators that write responses to the db.\n if (mutationResults.length > 0) {\n ret.mutationResults = mutationResults;\n }\n return ret;\n}\n\nfunction queryPatchOpToReplicachePatchOp(\n op: QueriesPatchOp,\n toKey: (hash: string) => string,\n): PatchOperation {\n switch (op.op) {\n case 'clear':\n return op;\n case 'del':\n return {\n op: 'del',\n key: toKey(op.hash),\n };\n case 'put':\n return {\n op: 'put',\n key: toKey(op.hash),\n value: null,\n };\n default:\n unreachable(op);\n }\n}\n\nexport function mutationPatchOpToReplicachePatchOp(\n op: MutationPatch,\n): PatchOperationInternal {\n switch (op.op) {\n case 'put':\n return {\n op: 'put',\n key: toMutationResponseKey(op.mutation.id),\n value: op.mutation.result,\n };\n case 'del':\n return {\n op: 'del',\n key: toMutationResponseKey(op.id),\n };\n }\n}\n\nfunction rowsPatchOpToReplicachePatchOp(\n op: RowPatchOp,\n schema: Schema,\n serverToClient: NameMapper,\n): PatchOperationInternal | undefined {\n if (op.op === 'clear') {\n return op;\n }\n // Skip rows for tables not in the client schema. This can happen when\n // the server-side query AST references tables (e.g. issueNotifications)\n // that are not yet part of the client schema definition.\n const tableName = serverToClient.tableNameIfKnown(op.tableName);\n if (!tableName) {\n return undefined;\n }\n switch (op.op) {\n case 'del':\n return {\n op: 'del',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n };\n case 'put':\n return {\n op: 'put',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.value),\n ),\n value: serverToClient.row(op.tableName, op.value),\n };\n case 'update':\n return {\n op: 'update',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n merge: op.merge\n ? serverToClient.row(op.tableName, op.merge)\n : undefined,\n constrain: serverToClient.columns(op.tableName, op.constrain),\n };\n default:\n unreachable(op);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-rep.js","names":[
|
|
1
|
+
{"version":3,"file":"zero-rep.js","names":[],"sources":["../../../../../zero-client/src/client/zero-rep.ts"],"sourcesContent":["import type {\n InternalDiff,\n InternalDiffOperation,\n} from '../../../replicache/src/btree/node.ts';\nimport type {LazyStore} from '../../../replicache/src/dag/lazy-store.ts';\nimport {readFromHash} from '../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../replicache/src/format-version-enum.ts';\nimport type {Hash} from '../../../replicache/src/hash.ts';\nimport type {\n EphemeralID,\n MutationTrackingData,\n ZeroOption,\n ZeroReadOptions,\n} from '../../../replicache/src/replicache-options.ts';\nimport {withRead} from '../../../replicache/src/with-transactions.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {ZeroContext} from './context.ts';\nimport type {IVMSourceBranch} from './ivm-branch.ts';\nimport {ENTITIES_KEY_PREFIX} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\n// Replicache doesn't support undefined auth tokens\nconst REPLICACHE_NO_AUTH_TOKEN = '';\n\nexport const toReplicacheAuthToken = (\n auth: string | undefined | null,\n): string => auth ?? REPLICACHE_NO_AUTH_TOKEN;\n\nexport const fromReplicacheAuthToken = (auth: string): string | undefined =>\n !auth ? undefined : auth;\n\ntype TxData = {\n ivmSources: IVMSourceBranch;\n token: string | undefined;\n context: unknown;\n fork: () => TxData;\n};\n\nexport class ZeroRep implements ZeroOption {\n readonly #context: ZeroContext;\n readonly #ivmMain: IVMSourceBranch;\n readonly #customMutatorsEnabled: boolean;\n readonly #mutationTracker: MutationTracker;\n #store: LazyStore | undefined;\n // matches replicache's auth token type\n #auth: string = REPLICACHE_NO_AUTH_TOKEN;\n\n constructor(\n context: ZeroContext,\n ivmMain: IVMSourceBranch,\n customMutatorsEnabled: boolean,\n mutationTracker: MutationTracker,\n ) {\n this.#context = context;\n this.#ivmMain = ivmMain;\n this.#customMutatorsEnabled = customMutatorsEnabled;\n this.#mutationTracker = mutationTracker;\n }\n\n set auth(auth: string) {\n this.#auth = auth;\n }\n\n async init(hash: Hash, store: LazyStore) {\n const diffs: InternalDiffOperation[] = [];\n await withRead(store, async dagRead => {\n const read = await readFromHash(hash, dagRead, FormatVersion.Latest);\n for await (const entry of read.map.scan(ENTITIES_KEY_PREFIX, true)) {\n if (!entry[0].startsWith(ENTITIES_KEY_PREFIX)) {\n break;\n }\n diffs.push({\n op: 'add',\n key: entry[0],\n newValue: entry[1],\n });\n }\n });\n this.#store = store;\n\n this.#context.processChanges(undefined, hash, diffs);\n // Pipelines for queries materialized before this point were deferred so\n // the replica above was loaded into the sources without fanning out to\n // them. Build and hydrate them now that the sources are populated,\n // yielding between pipelines so the app stays responsive. Replicache is\n // not ready until this returns so no changes arrive in the meantime.\n await this.#context.hydratePendingPipelines();\n }\n\n getTxData = (\n desiredHead: Hash,\n readOptions?: ZeroReadOptions,\n ): Promise<TxData> | undefined => {\n // getTxData requires some extensive testing for complete confidence\n // that it will not break. Do not enable `getTxData` unless the user\n // has opted into custom mutators.\n if (!this.#customMutatorsEnabled) {\n return;\n }\n\n return this.#ivmMain\n .forkToHead(must(this.#store), desiredHead, readOptions)\n .then(branch => this.#makeTxData(branch));\n };\n\n #makeTxData = (branch: IVMSourceBranch): TxData => ({\n ivmSources: branch,\n token: fromReplicacheAuthToken(this.#auth),\n context: this.#context,\n fork: () => this.#makeTxData(branch.fork()),\n });\n\n advance = (expectedHash: Hash, newHash: Hash, diffs: InternalDiff): void => {\n this.#context.processChanges(expectedHash, newHash, diffs);\n };\n\n trackMutation(): MutationTrackingData {\n return this.#mutationTracker.trackMutation();\n }\n mutationIDAssigned(ephemeralID: EphemeralID, mutationID: number): void {\n this.#mutationTracker.mutationIDAssigned(ephemeralID, mutationID);\n }\n rejectMutation(ephemeralID: EphemeralID, ex: unknown): void {\n this.#mutationTracker.rejectMutation(ephemeralID, ex);\n }\n}\n"],"mappings":";;;;;AAsBA,IAAM,2BAA2B;AAEjC,IAAa,yBACX,SACW,QAAQ;AAErB,IAAa,2BAA2B,SACtC,CAAC,OAAO,KAAA,IAAY;AAStB,IAAa,UAAb,MAA2C;CACzC;CACA;CACA;CACA;CACA;CAEA,QAAgB;CAEhB,YACE,SACA,SACA,uBACA,iBACA;EACA,KAAK,WAAW;EAChB,KAAK,WAAW;EAChB,KAAK,yBAAyB;EAC9B,KAAK,mBAAmB;CAC1B;CAEA,IAAI,KAAK,MAAc;EACrB,KAAK,QAAQ;CACf;CAEA,MAAM,KAAK,MAAY,OAAkB;EACvC,MAAM,QAAiC,CAAC;EACxC,MAAM,SAAS,OAAO,OAAM,YAAW;GACrC,MAAM,OAAO,MAAM,aAAa,MAAM,SAAS,CAAoB;GACnE,WAAW,MAAM,SAAS,KAAK,IAAI,KAAA,MAA0B,IAAI,GAAG;IAClE,IAAI,CAAC,MAAM,EAAE,CAAC,WAAA,IAA8B,GAC1C;IAEF,MAAM,KAAK;KACT,IAAI;KACJ,KAAK,MAAM;KACX,UAAU,MAAM;IAClB,CAAC;GACH;EACF,CAAC;EACD,KAAK,SAAS;EAEd,KAAK,SAAS,eAAe,KAAA,GAAW,MAAM,KAAK;EAMnD,MAAM,KAAK,SAAS,wBAAwB;CAC9C;CAEA,aACE,aACA,gBACgC;EAIhC,IAAI,CAAC,KAAK,wBACR;EAGF,OAAO,KAAK,SACT,WAAW,KAAK,KAAK,MAAM,GAAG,aAAa,WAAW,CAAC,CACvD,MAAK,WAAU,KAAK,YAAY,MAAM,CAAC;CAC5C;CAEA,eAAe,YAAqC;EAClD,YAAY;EACZ,OAAO,wBAAwB,KAAK,KAAK;EACzC,SAAS,KAAK;EACd,YAAY,KAAK,YAAY,OAAO,KAAK,CAAC;CAC5C;CAEA,WAAW,cAAoB,SAAe,UAA8B;EAC1E,KAAK,SAAS,eAAe,cAAc,SAAS,KAAK;CAC3D;CAEA,gBAAsC;EACpC,OAAO,KAAK,iBAAiB,cAAc;CAC7C;CACA,mBAAmB,aAA0B,YAA0B;EACrE,KAAK,iBAAiB,mBAAmB,aAAa,UAAU;CAClE;CACA,eAAe,aAA0B,IAAmB;EAC1D,KAAK,iBAAiB,eAAe,aAAa,EAAE;CACtD;AACF"}
|
|
@@ -21,7 +21,7 @@ import { Closed, Connected, Connecting, Disconnected, Error as Error$1, Initiali
|
|
|
21
21
|
import { getDocumentVisibilityWatcher } from "../../../shared/src/document-visible.js";
|
|
22
22
|
import { ReplicacheImpl } from "../../../replicache/src/replicache-impl.js";
|
|
23
23
|
import "../../../replicache/src/impl.js";
|
|
24
|
-
import { localNavigator } from "../../../shared/src/navigator.js";
|
|
24
|
+
import { navigator as localNavigator } from "../../../shared/src/navigator.js";
|
|
25
25
|
import { promiseRace } from "../../../shared/src/promise-race.js";
|
|
26
26
|
import { emptyFunction } from "../../../shared/src/sentinels.js";
|
|
27
27
|
import { Subscribable } from "../../../shared/src/subscribable.js";
|
|
@@ -60,6 +60,9 @@ import { PokeHandler } from "./zero-poke-handler.js";
|
|
|
60
60
|
import { ZeroRep, fromReplicacheAuthToken, toReplicacheAuthToken } from "./zero-rep.js";
|
|
61
61
|
import { resolver } from "@rocicorp/resolver";
|
|
62
62
|
import { LogContext } from "@rocicorp/logger";
|
|
63
|
+
//#region ../zero-client/src/client/zero.ts
|
|
64
|
+
var exposedToTestingSymbol = Symbol();
|
|
65
|
+
var createLogOptionsSymbol = Symbol();
|
|
63
66
|
function connectionReadyResolver() {
|
|
64
67
|
const ready = resolver();
|
|
65
68
|
ready.promise.catch(() => {});
|
|
@@ -77,12 +80,12 @@ var DEFAULT_PING_TIMEOUT_MS = 5e3;
|
|
|
77
80
|
* request timed out.
|
|
78
81
|
*/
|
|
79
82
|
var PULL_TIMEOUT_MS = 5e3;
|
|
80
|
-
var DEFAULT_DISCONNECT_HIDDEN_DELAY_MS =
|
|
83
|
+
var DEFAULT_DISCONNECT_HIDDEN_DELAY_MS = 3e5;
|
|
81
84
|
/**
|
|
82
85
|
* The amount of time we allow for continuous connecting attempts before
|
|
83
86
|
* transitioning to disconnected state.
|
|
84
87
|
*/
|
|
85
|
-
var DEFAULT_DISCONNECT_TIMEOUT_MS =
|
|
88
|
+
var DEFAULT_DISCONNECT_TIMEOUT_MS = 6e4;
|
|
86
89
|
/**
|
|
87
90
|
* The amount of time we wait for a connection to be established before we
|
|
88
91
|
* consider it timed out.
|
|
@@ -95,6 +98,7 @@ var CONNECT_TIMEOUT_MS = 1e4;
|
|
|
95
98
|
var SLOW_ACTIVE_CLIENTS_THRESHOLD_MS = 50;
|
|
96
99
|
var CHECK_CONNECTIVITY_ON_ERROR_FREQUENCY = 6;
|
|
97
100
|
var DEFAULT_QUERY_CHANGE_THROTTLE_MS = 10;
|
|
101
|
+
var LOGGED_OUT_STORAGE_USER_ID = "__anonymous__";
|
|
98
102
|
function convertOnUpdateNeededReason(reason) {
|
|
99
103
|
return { type: reason.type };
|
|
100
104
|
}
|
|
@@ -236,7 +240,8 @@ var Zero = class Zero {
|
|
|
236
240
|
message: "ZeroOptions.userID should not be empty. Omit it entirely for logged-out clients."
|
|
237
241
|
});
|
|
238
242
|
this.#checkAuthValid(userID ?? void 0, options.auth);
|
|
239
|
-
const
|
|
243
|
+
const cacheURL = options.cacheURL ?? options.server;
|
|
244
|
+
const server = getServer(cacheURL);
|
|
240
245
|
this.#enableAnalytics = shouldEnableAnalytics(server, false);
|
|
241
246
|
let { kvStore = "idb" } = options;
|
|
242
247
|
if (kvStore === "idb") {
|
|
@@ -277,11 +282,12 @@ var Zero = class Zero {
|
|
|
277
282
|
this.storageKey = storageKey ?? "";
|
|
278
283
|
const { clientSchema, hash } = clientSchemaFrom(schema);
|
|
279
284
|
this.#clientSchema = clientSchema;
|
|
280
|
-
const
|
|
285
|
+
const nameKey = JSON.stringify({
|
|
281
286
|
storageKey: this.storageKey,
|
|
282
287
|
mutateUrl: options.mutateURL ?? "",
|
|
283
288
|
queryUrl: options.queryURL ?? options.getQueriesURL ?? ""
|
|
284
|
-
})
|
|
289
|
+
});
|
|
290
|
+
const hashedKey = h64(nameKey).toString(36);
|
|
285
291
|
const storageScopedUserID = userID ?? "__anonymous__";
|
|
286
292
|
const replicacheOptions = {
|
|
287
293
|
schemaVersion: `52.${hash}`,
|
|
@@ -307,14 +313,15 @@ var Zero = class Zero {
|
|
|
307
313
|
if (enableLegacyQueries) this.#queryManager.updateLegacy(ast, ttl);
|
|
308
314
|
}, (customQueryID, ttl) => this.#queryManager.updateCustom(customQueryID, ttl), () => this.#queryManager.flushBatch(), batchViewUpdates, this.#addMetric, assertValidRunOptions, this.#visibilityWatcher);
|
|
309
315
|
this.query = createRunnableBuilder(this.#zeroContext, schema);
|
|
310
|
-
const
|
|
316
|
+
const replicacheImplOptions = {
|
|
311
317
|
enableClientGroupForking: false,
|
|
312
318
|
enableMutationRecovery: false,
|
|
313
319
|
enablePullAndPushInOpen: false,
|
|
314
320
|
enableRefresh: () => this.#enableRefresh(),
|
|
315
321
|
onClientsDeleted: (deletedClients) => this.#deleteClientsManager.onClientsDeleted(deletedClients),
|
|
316
322
|
zero: new ZeroRep(this.#zeroContext, this.#ivmMain, options.mutators !== void 0, this.#mutationTracker)
|
|
317
|
-
}
|
|
323
|
+
};
|
|
324
|
+
const rep = new ReplicacheImpl(replicacheOptions, replicacheImplOptions);
|
|
318
325
|
this.#rep = rep;
|
|
319
326
|
this.#server = server;
|
|
320
327
|
this.userID = userID ?? void 0;
|
|
@@ -772,9 +779,10 @@ var Zero = class Zero {
|
|
|
772
779
|
wasClean
|
|
773
780
|
});
|
|
774
781
|
if (code === 1009) {
|
|
782
|
+
const recentMessagesInfo = this.#recentSentMessages.length > 0 ? "\nRecent sent messages:\n" + JSON.stringify(this.#recentSentMessages, null, 2) : "";
|
|
775
783
|
const messageTooLargeError = new ClientError({
|
|
776
784
|
kind: InvalidMessage$1,
|
|
777
|
-
message: "A WebSocket message exceeded the server message size limit. This is usually caused by a mutation's args containing a large value such as a base64-encoded image. Consider uploading large files to object storage and storing only the URL in Zero." +
|
|
785
|
+
message: "A WebSocket message exceeded the server message size limit. This is usually caused by a mutation's args containing a large value such as a base64-encoded image. Consider uploading large files to object storage and storing only the URL in Zero." + recentMessagesInfo
|
|
778
786
|
});
|
|
779
787
|
this.#disconnect(lc, messageTooLargeError);
|
|
780
788
|
await this.#rep.disableClientGroup();
|
|
@@ -1538,7 +1546,7 @@ var OnlineManager = class extends Subscribable {
|
|
|
1538
1546
|
return this.#online;
|
|
1539
1547
|
}
|
|
1540
1548
|
};
|
|
1541
|
-
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushURL, userPushHeaders, userQueryURL, userQueryHeaders, additionalConnectParams, activeClientsManager, maxHeaderLength =
|
|
1549
|
+
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushURL, userPushHeaders, userQueryURL, userQueryHeaders, additionalConnectParams, activeClientsManager, maxHeaderLength = 8192, onEvent) {
|
|
1542
1550
|
onEvent?.("reading the profile ID");
|
|
1543
1551
|
const url = await createConnectionURL(socketOrigin, clientID, clientGroupID, userID, baseCookie, lmid, wsid, rep, debugPerf, additionalConnectParams, lc);
|
|
1544
1552
|
const WS = mustGetBrowserGlobal("WebSocket");
|
|
@@ -1630,6 +1638,6 @@ async function makeActiveClientsManager(clientGroupID, clientID, signal, onDelet
|
|
|
1630
1638
|
return manager;
|
|
1631
1639
|
}
|
|
1632
1640
|
//#endregion
|
|
1633
|
-
export { Zero };
|
|
1641
|
+
export { CONNECT_TIMEOUT_MS, DEFAULT_DISCONNECT_HIDDEN_DELAY_MS, DEFAULT_DISCONNECT_TIMEOUT_MS, DEFAULT_PING_TIMEOUT_MS, LOGGED_OUT_STORAGE_USER_ID, OnlineManager, PULL_TIMEOUT_MS, RUN_LOOP_INTERVAL_MS, Zero, createConnectionURL, createLogOptionsSymbol, createSocket, exposedToTestingSymbol };
|
|
1634
1642
|
|
|
1635
1643
|
//# sourceMappingURL=zero.js.map
|