@rocicorp/zero 0.12.2025012601 → 0.12.2025012800
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/advanced.js +2 -2
- package/out/{chunk-F5QR3K72.js → chunk-424PT5DM.js} +1 -1
- package/out/{chunk-JZD6FXRT.js → chunk-MJYDJPXG.js} +37 -43
- package/out/{chunk-JZD6FXRT.js.map → chunk-MJYDJPXG.js.map} +3 -3
- package/out/{chunk-I5GSZARI.js → chunk-QAAJZ32T.js} +1 -1
- package/out/{chunk-I5GSZARI.js.map → chunk-QAAJZ32T.js.map} +1 -1
- package/out/datadog/src/mod.d.ts +1 -1
- package/out/react.js +1 -1
- package/out/react.js.map +1 -1
- package/out/replicache/src/btree/diff.d.ts +2 -2
- package/out/replicache/src/btree/node.d.ts +8 -8
- package/out/replicache/src/btree/read.d.ts +6 -6
- package/out/replicache/src/btree/write.d.ts +7 -7
- package/out/replicache/src/call-default-fetch.d.ts +1 -1
- package/out/replicache/src/config.d.ts +1 -1
- package/out/replicache/src/connection-loop-delegates.d.ts +2 -2
- package/out/replicache/src/connection-loop.d.ts +1 -1
- package/out/replicache/src/cookies.d.ts +2 -2
- package/out/replicache/src/dag/chunk.d.ts +1 -1
- package/out/replicache/src/dag/gc.d.ts +2 -2
- package/out/replicache/src/dag/key.d.ts +2 -2
- package/out/replicache/src/dag/lazy-store.d.ts +5 -5
- package/out/replicache/src/dag/store-impl.d.ts +5 -5
- package/out/replicache/src/dag/store.d.ts +3 -3
- package/out/replicache/src/dag/visitor.d.ts +3 -3
- package/out/replicache/src/db/commit.d.ts +8 -8
- package/out/replicache/src/db/index.d.ts +7 -7
- package/out/replicache/src/db/read.d.ts +8 -8
- package/out/replicache/src/db/rebase.d.ts +7 -7
- package/out/replicache/src/db/scan.d.ts +1 -1
- package/out/replicache/src/db/write.d.ts +14 -14
- package/out/replicache/src/filter-async-iterable.d.ts +1 -1
- package/out/replicache/src/format-version.d.ts +2 -2
- package/out/replicache/src/frozen-json.d.ts +2 -2
- package/out/replicache/src/get-default-puller.d.ts +1 -1
- package/out/replicache/src/get-default-pusher.d.ts +1 -1
- package/out/replicache/src/hash.d.ts +1 -1
- package/out/replicache/src/impl.d.ts +3 -3
- package/out/replicache/src/index-defs.d.ts +1 -1
- package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts +1 -1
- package/out/replicache/src/kv/idb-store.d.ts +1 -1
- package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
- package/out/replicache/src/kv/mem-store.d.ts +1 -1
- package/out/replicache/src/kv/read-impl.d.ts +2 -2
- package/out/replicache/src/kv/store.d.ts +1 -1
- package/out/replicache/src/kv/write-impl-base.d.ts +3 -3
- package/out/replicache/src/kv/write-impl.d.ts +3 -3
- package/out/replicache/src/merge-async-iterables.d.ts +1 -1
- package/out/replicache/src/mod.d.ts +36 -36
- package/out/replicache/src/mutation-recovery.d.ts +8 -8
- package/out/replicache/src/new-client-channel.d.ts +1 -1
- package/out/replicache/src/on-persist-channel.d.ts +1 -1
- package/out/replicache/src/patch-operation.d.ts +1 -1
- package/out/replicache/src/pending-mutations.d.ts +3 -3
- package/out/replicache/src/persist/client-gc.d.ts +3 -3
- package/out/replicache/src/persist/client-group-gc.d.ts +2 -2
- package/out/replicache/src/persist/client-groups.d.ts +5 -5
- package/out/replicache/src/persist/clients.d.ts +9 -9
- package/out/replicache/src/persist/collect-idb-databases.d.ts +3 -3
- package/out/replicache/src/persist/gather-mem-only-visitor.d.ts +4 -4
- package/out/replicache/src/persist/gather-not-cached-visitor.d.ts +5 -5
- package/out/replicache/src/persist/heartbeat.d.ts +3 -3
- package/out/replicache/src/persist/idb-databases-store.d.ts +1 -1
- package/out/replicache/src/persist/persist.d.ts +6 -6
- package/out/replicache/src/persist/refresh.d.ts +7 -7
- package/out/replicache/src/process-scheduler.d.ts +1 -1
- package/out/replicache/src/puller.d.ts +6 -6
- package/out/replicache/src/pusher.d.ts +3 -3
- package/out/replicache/src/replicache-impl.d.ts +12 -12
- package/out/replicache/src/replicache-options.d.ts +5 -5
- package/out/replicache/src/replicache.d.ts +10 -10
- package/out/replicache/src/scan-iterator.d.ts +6 -6
- package/out/replicache/src/scan-options.d.ts +2 -2
- package/out/replicache/src/subscriptions.d.ts +7 -7
- package/out/replicache/src/subscriptions.d.ts.map +1 -1
- package/out/replicache/src/sync/diff.d.ts +6 -6
- package/out/replicache/src/sync/ids.d.ts +1 -1
- package/out/replicache/src/sync/patch.d.ts +2 -2
- package/out/replicache/src/sync/pull.d.ts +11 -11
- package/out/replicache/src/sync/push.d.ts +4 -4
- package/out/replicache/src/sync/request-id.d.ts +1 -1
- package/out/replicache/src/transactions.d.ts +9 -9
- package/out/replicache/src/types.d.ts +5 -5
- package/out/shared/src/btree-set.js +1 -1
- package/out/shared/src/deep-clone.d.ts +1 -1
- package/out/shared/src/iterables.js +1 -1
- package/out/shared/src/json-schema.d.ts +1 -1
- package/out/shared/src/json-schema.js +3 -3
- package/out/shared/src/json.js +3 -3
- package/out/shared/src/options.d.ts +1 -1
- package/out/shared/src/options.js +3 -3
- package/out/shared/src/queue.js +1 -1
- package/out/shared/src/random-values.d.ts +1 -1
- package/out/shared/src/random-values.d.ts.map +1 -1
- package/out/shared/src/sleep.js +1 -1
- package/out/solid.js +3 -3
- package/out/solid.js.map +1 -1
- package/out/zero/src/advanced.d.ts +1 -1
- package/out/zero/src/build-schema.d.ts +1 -1
- package/out/zero/src/build-schema.js +1 -1
- package/out/zero/src/change-protocol.d.ts +1 -1
- package/out/zero/src/change-protocol.js +1 -1
- package/out/zero/src/cli.d.ts +1 -1
- package/out/zero/src/cli.js +1 -1
- package/out/zero/src/react.d.ts +1 -1
- package/out/zero/src/server/change-streamer.d.ts +1 -1
- package/out/zero/src/server/change-streamer.js +1 -1
- package/out/zero/src/server/main.d.ts +1 -1
- package/out/zero/src/server/main.js +1 -1
- package/out/zero/src/server/multi/main.d.ts +1 -1
- package/out/zero/src/server/multi/main.js +1 -1
- package/out/zero/src/server/replicator.d.ts +1 -1
- package/out/zero/src/server/replicator.js +1 -1
- package/out/zero/src/server/syncer.d.ts +1 -1
- package/out/zero/src/server/syncer.js +1 -1
- package/out/zero/src/solid.d.ts +1 -1
- package/out/zero/src/zero-cache-dev.js +3 -3
- package/out/zero/src/zero.d.ts +1 -1
- package/out/zero-advanced/src/mod.d.ts +8 -8
- package/out/zero-advanced/src/mod.d.ts.map +1 -1
- package/out/zero-cache/src/auth/jwt.d.ts +1 -1
- package/out/zero-cache/src/auth/load-schema.d.ts +3 -3
- package/out/zero-cache/src/auth/load-schema.d.ts.map +1 -1
- package/out/zero-cache/src/auth/load-schema.js +3 -3
- package/out/zero-cache/src/auth/load-schema.js.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.d.ts +2 -2
- package/out/zero-cache/src/auth/read-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +3 -3
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts +5 -5
- package/out/zero-cache/src/auth/write-authorizer.js +14 -14
- package/out/zero-cache/src/config/zero-config.d.ts +2 -2
- package/out/zero-cache/src/config/zero-config.js +6 -6
- package/out/zero-cache/src/db/create.d.ts +1 -1
- package/out/zero-cache/src/db/create.js +1 -1
- package/out/zero-cache/src/db/lite-tables.d.ts +2 -2
- package/out/zero-cache/src/db/lite-tables.js +5 -5
- package/out/zero-cache/src/db/migration-lite.d.ts +2 -2
- package/out/zero-cache/src/db/migration-lite.js +4 -4
- package/out/zero-cache/src/db/migration.d.ts +2 -2
- package/out/zero-cache/src/db/migration.js +3 -3
- package/out/zero-cache/src/db/pg-to-lite.d.ts +2 -2
- package/out/zero-cache/src/db/pg-to-lite.js +5 -5
- package/out/zero-cache/src/db/short-lived-client.d.ts +1 -1
- package/out/zero-cache/src/db/short-lived-client.js +1 -1
- package/out/zero-cache/src/db/specs.d.ts +4 -4
- package/out/zero-cache/src/db/specs.js +3 -3
- package/out/zero-cache/src/db/statements.d.ts +2 -2
- package/out/zero-cache/src/db/statements.js +2 -2
- package/out/zero-cache/src/db/transaction-pool.d.ts +4 -4
- package/out/zero-cache/src/db/transaction-pool.js +3 -3
- package/out/zero-cache/src/server/change-streamer.d.ts +1 -1
- package/out/zero-cache/src/server/change-streamer.js +13 -13
- package/out/zero-cache/src/server/logging.d.ts +1 -1
- package/out/zero-cache/src/server/logging.js +2 -2
- package/out/zero-cache/src/server/main.d.ts +1 -1
- package/out/zero-cache/src/server/main.js +13 -13
- package/out/zero-cache/src/server/multi/config.d.ts +2 -2
- package/out/zero-cache/src/server/multi/config.js +3 -3
- package/out/zero-cache/src/server/multi/main.d.ts +1 -1
- package/out/zero-cache/src/server/multi/main.js +8 -8
- package/out/zero-cache/src/server/multi/runtime.js +1 -1
- package/out/zero-cache/src/server/multi/tenant-dispatcher.d.ts +2 -2
- package/out/zero-cache/src/server/multi/tenant-dispatcher.js +2 -2
- package/out/zero-cache/src/server/replicator.d.ts +1 -1
- package/out/zero-cache/src/server/replicator.js +10 -10
- package/out/zero-cache/src/server/syncer.d.ts +1 -1
- package/out/zero-cache/src/server/syncer.js +21 -21
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +8 -8
- package/out/zero-cache/src/services/change-source/pg/change-source.js +24 -24
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +2 -2
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +15 -15
- package/out/zero-cache/src/services/change-source/pg/lsn.d.ts +2 -2
- package/out/zero-cache/src/services/change-source/pg/lsn.js +2 -2
- 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.js +3 -3
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +2 -2
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +3 -3
- 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.js +3 -3
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +4 -4
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +7 -7
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js +4 -4
- package/out/zero-cache/src/services/change-source/pg/sync-schema.d.ts +2 -2
- package/out/zero-cache/src/services/change-source/pg/sync-schema.js +3 -3
- package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.js +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +14 -14
- package/out/zero-cache/src/services/change-source/protocol/current/data.js +3 -3
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +16 -16
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +4 -4
- package/out/zero-cache/src/services/change-source/protocol/current/mod.d.ts +6 -6
- package/out/zero-cache/src/services/change-source/protocol/current/mod.js +6 -6
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +2 -2
- package/out/zero-cache/src/services/change-source/protocol/mod.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/protocol/mod.js +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +4 -4
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +7 -7
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +6 -6
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +13 -13
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +10 -10
- package/out/zero-cache/src/services/change-streamer/change-streamer.js +3 -3
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +2 -2
- package/out/zero-cache/src/services/change-streamer/forwarder.js +2 -2
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +2 -2
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +3 -3
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +2 -2
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +6 -6
- package/out/zero-cache/src/services/change-streamer/storer.js +9 -9
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +5 -5
- package/out/zero-cache/src/services/change-streamer/subscriber.js +5 -5
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts +1 -1
- package/out/zero-cache/src/services/dispatcher/connect-params.js +3 -3
- package/out/zero-cache/src/services/dispatcher/sync-dispatcher.d.ts +2 -2
- package/out/zero-cache/src/services/dispatcher/sync-dispatcher.js +4 -4
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.d.ts +2 -2
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.js +3 -3
- package/out/zero-cache/src/services/http-service.d.ts +1 -1
- package/out/zero-cache/src/services/http-service.js +2 -2
- package/out/zero-cache/src/services/life-cycle.d.ts +2 -2
- package/out/zero-cache/src/services/life-cycle.js +2 -2
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +2 -2
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +8 -8
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +14 -14
- package/out/zero-cache/src/services/replicator/change-processor.d.ts +23 -0
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-processor.js +415 -0
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -0
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +5 -27
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +9 -421
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.d.ts +2 -2
- package/out/zero-cache/src/services/replicator/notifier.js +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +5 -5
- package/out/zero-cache/src/services/replicator/replicator.js +3 -3
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +6 -6
- package/out/zero-cache/src/services/replicator/schema/change-log.js +4 -4
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +3 -3
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +3 -3
- package/out/zero-cache/src/services/runner.d.ts +1 -1
- package/out/zero-cache/src/services/running-state.d.ts +1 -1
- package/out/zero-cache/src/services/running-state.js +2 -2
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +7 -7
- package/out/zero-cache/src/services/view-syncer/client-handler.js +9 -9
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +6 -6
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +17 -17
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +6 -6
- package/out/zero-cache/src/services/view-syncer/cvr.js +8 -8
- package/out/zero-cache/src/services/view-syncer/database-storage.d.ts +2 -2
- package/out/zero-cache/src/services/view-syncer/database-storage.js +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +1 -1
- package/out/zero-cache/src/services/view-syncer/key-columns.d.ts +2 -2
- package/out/zero-cache/src/services/view-syncer/key-columns.js +3 -3
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +6 -6
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +8 -8
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +2 -2
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +4 -4
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js +2 -2
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +12 -12
- package/out/zero-cache/src/services/view-syncer/schema/types.js +4 -4
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +5 -5
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +12 -12
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +9 -9
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +20 -20
- package/out/zero-cache/src/types/bigint-json.d.ts +1 -1
- package/out/zero-cache/src/types/bigint-json.js +1 -1
- package/out/zero-cache/src/types/error-for-client.d.ts +1 -1
- package/out/zero-cache/src/types/lexi-version.js +2 -2
- package/out/zero-cache/src/types/lite.d.ts +4 -4
- package/out/zero-cache/src/types/lite.js +2 -2
- package/out/zero-cache/src/types/pg.d.ts +3 -3
- package/out/zero-cache/src/types/pg.js +2 -2
- package/out/zero-cache/src/types/row-key.d.ts +1 -1
- package/out/zero-cache/src/types/row-key.js +3 -3
- package/out/zero-cache/src/types/schema-versions.d.ts +1 -1
- package/out/zero-cache/src/types/schema-versions.js +2 -2
- package/out/zero-cache/src/types/streams.d.ts +2 -2
- package/out/zero-cache/src/types/streams.js +4 -4
- package/out/zero-cache/src/types/subscription.d.ts +1 -1
- package/out/zero-cache/src/types/timeout.js +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +5 -5
- package/out/zero-cache/src/workers/connection.js +9 -9
- package/out/zero-cache/src/workers/replicator.d.ts +5 -5
- package/out/zero-cache/src/workers/replicator.js +4 -4
- package/out/zero-cache/src/workers/syncer.d.ts +8 -8
- package/out/zero-cache/src/workers/syncer.js +10 -10
- package/out/zero-client/src/client/context.d.ts +6 -6
- package/out/zero-client/src/client/crud.d.ts +6 -6
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.d.ts +2 -2
- package/out/zero-client/src/client/log-options.d.ts +2 -2
- package/out/zero-client/src/client/log-options.d.ts.map +1 -1
- package/out/zero-client/src/client/metrics.d.ts +2 -2
- package/out/zero-client/src/client/options.d.ts +3 -3
- package/out/zero-client/src/client/query-manager.d.ts +6 -6
- package/out/zero-client/src/client/reload-error-handler.d.ts +1 -1
- package/out/zero-client/src/client/replicache-types.d.ts +1 -1
- package/out/zero-client/src/client/server-error.d.ts +2 -2
- package/out/zero-client/src/client/server-option.d.ts +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +4 -4
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +12 -12
- package/out/zero-client/src/mod.d.ts +17 -17
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-client/src/util/socket.d.ts +1 -1
- package/out/zero-protocol/src/ast-hash.d.ts +1 -1
- package/out/zero-protocol/src/ast-hash.js +2 -2
- package/out/zero-protocol/src/ast.d.ts +2 -2
- package/out/zero-protocol/src/ast.js +5 -5
- package/out/zero-protocol/src/change-desired-queries.d.ts +3 -3
- package/out/zero-protocol/src/change-desired-queries.js +2 -2
- package/out/zero-protocol/src/clients-patch.d.ts +1 -1
- package/out/zero-protocol/src/clients-patch.js +1 -1
- package/out/zero-protocol/src/connect.d.ts +3 -3
- package/out/zero-protocol/src/connect.js +2 -2
- package/out/zero-protocol/src/data.d.ts +3 -3
- package/out/zero-protocol/src/data.js +2 -2
- package/out/zero-protocol/src/delete-clients.d.ts +1 -1
- package/out/zero-protocol/src/delete-clients.js +1 -1
- package/out/zero-protocol/src/down.d.ts +6 -6
- package/out/zero-protocol/src/down.js +7 -7
- package/out/zero-protocol/src/error.d.ts +1 -1
- package/out/zero-protocol/src/error.js +2 -2
- package/out/zero-protocol/src/mod.d.ts +14 -14
- package/out/zero-protocol/src/mod.js +14 -14
- package/out/zero-protocol/src/ping.d.ts +1 -1
- package/out/zero-protocol/src/ping.js +1 -1
- package/out/zero-protocol/src/poke.d.ts +9 -9
- package/out/zero-protocol/src/poke.js +5 -5
- package/out/zero-protocol/src/pong.d.ts +1 -1
- package/out/zero-protocol/src/pong.js +1 -1
- package/out/zero-protocol/src/primary-key.d.ts +1 -1
- package/out/zero-protocol/src/primary-key.js +1 -1
- package/out/zero-protocol/src/protocol-version.js +1 -1
- package/out/zero-protocol/src/pull.d.ts +1 -1
- package/out/zero-protocol/src/pull.js +2 -2
- package/out/zero-protocol/src/push.d.ts +26 -26
- package/out/zero-protocol/src/push.js +5 -5
- package/out/zero-protocol/src/queries-patch.d.ts +4 -4
- package/out/zero-protocol/src/queries-patch.js +2 -2
- package/out/zero-protocol/src/row-patch.d.ts +5 -5
- package/out/zero-protocol/src/row-patch.js +4 -4
- package/out/zero-protocol/src/up.d.ts +7 -7
- package/out/zero-protocol/src/up.js +7 -7
- package/out/zero-protocol/src/up.js.map +1 -1
- package/out/zero-protocol/src/version.d.ts +1 -1
- package/out/zero-protocol/src/version.js +1 -1
- package/out/zero-protocol/src/warm.d.ts +1 -1
- package/out/zero-protocol/src/warm.js +1 -1
- package/out/zero-react/src/mod.d.ts +8 -8
- package/out/zero-react/src/use-query.d.ts +4 -4
- package/out/zero-react/src/use-zero.d.ts +2 -2
- package/out/zero-schema/src/build-schema-options.d.ts +1 -1
- package/out/zero-schema/src/build-schema-options.js +1 -1
- package/out/zero-schema/src/build-schema.js +5 -5
- package/out/zero-schema/src/build-schema.js.map +1 -1
- package/out/zero-schema/src/builder/relationship-builder.d.ts +2 -2
- package/out/zero-schema/src/builder/schema-builder.d.ts +3 -3
- package/out/zero-schema/src/builder/schema-builder.js +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts +3 -3
- package/out/zero-schema/src/compiled-permissions.d.ts +18 -18
- package/out/zero-schema/src/compiled-permissions.js +2 -2
- package/out/zero-schema/src/mod.d.ts +4 -4
- package/out/zero-schema/src/mod.d.ts.map +1 -1
- package/out/zero-schema/src/permissions.d.ts +5 -5
- package/out/zero-schema/src/schema-config.d.ts +4 -4
- package/out/zero-schema/src/schema-config.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.js +4 -4
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-schema/src/table-schema.d.ts +1 -1
- package/out/zero-solid/src/create-zero.d.ts +2 -2
- package/out/zero-solid/src/create-zero.d.ts.map +1 -1
- package/out/zero-solid/src/mod.d.ts +2 -2
- package/out/zero-solid/src/solid-view.d.ts +3 -3
- package/out/zero-solid/src/use-query.d.ts +3 -3
- package/out/zero-solid/src/use-query.d.ts.map +1 -1
- package/out/zero.js +3 -3
- package/out/zql/src/builder/builder.d.ts +7 -7
- package/out/zql/src/builder/builder.js +10 -10
- package/out/zql/src/builder/filter.d.ts +2 -2
- package/out/zql/src/builder/filter.js +2 -2
- package/out/zql/src/builder/like.d.ts +1 -1
- package/out/zql/src/builder/like.js +1 -1
- package/out/zql/src/ivm/array-view.d.ts +4 -4
- package/out/zql/src/ivm/array-view.js +2 -2
- package/out/zql/src/ivm/change.d.ts +2 -2
- package/out/zql/src/ivm/constraint.d.ts +2 -2
- package/out/zql/src/ivm/constraint.js +3 -3
- package/out/zql/src/ivm/data.d.ts +3 -3
- package/out/zql/src/ivm/data.js +1 -1
- package/out/zql/src/ivm/exists.d.ts +6 -6
- package/out/zql/src/ivm/exists.js +7 -7
- package/out/zql/src/ivm/fan-in.d.ts +6 -6
- package/out/zql/src/ivm/fan-in.js +4 -4
- package/out/zql/src/ivm/fan-out.d.ts +5 -5
- package/out/zql/src/ivm/filter-push.d.ts +3 -3
- package/out/zql/src/ivm/filter-push.d.ts.map +1 -1
- package/out/zql/src/ivm/filter-push.js +2 -2
- package/out/zql/src/ivm/filter-push.js.map +1 -1
- package/out/zql/src/ivm/filter.d.ts +5 -5
- package/out/zql/src/ivm/filter.js +2 -2
- package/out/zql/src/ivm/join.d.ts +7 -7
- package/out/zql/src/ivm/join.js +4 -4
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts +3 -3
- package/out/zql/src/ivm/memory-source.d.ts +11 -11
- package/out/zql/src/ivm/memory-source.js +9 -9
- package/out/zql/src/ivm/memory-storage.d.ts +3 -3
- package/out/zql/src/ivm/operator.d.ts +7 -7
- package/out/zql/src/ivm/operator.js +1 -1
- package/out/zql/src/ivm/schema.d.ts +4 -4
- package/out/zql/src/ivm/skip.d.ts +6 -6
- package/out/zql/src/ivm/skip.js +2 -2
- package/out/zql/src/ivm/source.d.ts +3 -3
- package/out/zql/src/ivm/take.d.ts +6 -6
- package/out/zql/src/ivm/take.js +8 -8
- package/out/zql/src/ivm/view-apply-change.d.ts +3 -3
- package/out/zql/src/ivm/view-apply-change.js +2 -2
- package/out/zql/src/ivm/view.d.ts +4 -4
- package/out/zql/src/query/auth-query.d.ts +7 -7
- package/out/zql/src/query/auth-query.js +2 -2
- package/out/zql/src/query/dnf.d.ts +1 -1
- package/out/zql/src/query/dnf.js +2 -2
- package/out/zql/src/query/expression.d.ts +3 -4
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/expression.js +2 -2
- package/out/zql/src/query/query-impl.d.ts +8 -8
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +7 -7
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internal.d.ts +4 -4
- package/out/zql/src/query/query.d.ts +7 -10
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/typed-view.d.ts +1 -1
- package/out/zqlite/src/db.js +2 -2
- package/out/zqlite/src/internal/statement-cache.d.ts +1 -1
- package/out/zqlite/src/internal/statement-cache.d.ts.map +1 -1
- package/out/zqlite/src/internal/statement-cache.js +1 -1
- package/out/zqlite/src/internal/statement-cache.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +6 -6
- package/out/zqlite/src/table-source.js +11 -11
- package/package.json +4 -4
- /package/out/{chunk-F5QR3K72.js.map → chunk-424PT5DM.js.map} +0 -0
|
@@ -1,25 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { listIndexes, listTables } from '../../db/lite-tables.js';
|
|
8
|
-
import { mapPostgresToLite, mapPostgresToLiteColumn, mapPostgresToLiteIndex, } from '../../db/pg-to-lite.js';
|
|
9
|
-
import { StatementRunner } from '../../db/statements.js';
|
|
10
|
-
import { stringify } from '../../types/bigint-json.js';
|
|
11
|
-
import { liteRow } from '../../types/lite.js';
|
|
12
|
-
import { liteTableName } from '../../types/names.js';
|
|
13
|
-
import { id } from '../../types/sql.js';
|
|
14
|
-
import { RunningState } from '../running-state.js';
|
|
15
|
-
import { Notifier } from './notifier.js';
|
|
16
|
-
import { logDeleteOp, logResetOp, logSetOp, logTruncateOp, } from './schema/change-log.js';
|
|
17
|
-
import { ZERO_VERSION_COLUMN_NAME, getSubscriptionState, updateReplicationWatermark, } from './schema/replication-state.js';
|
|
1
|
+
import { Database } from "../../../../zqlite/src/db.js";
|
|
2
|
+
import { StatementRunner } from "../../db/statements.js";
|
|
3
|
+
import { RunningState } from "../running-state.js";
|
|
4
|
+
import { ChangeProcessor } from "./change-processor.js";
|
|
5
|
+
import { Notifier } from "./notifier.js";
|
|
6
|
+
import { getSubscriptionState } from "./schema/replication-state.js";
|
|
18
7
|
/**
|
|
19
8
|
* The {@link IncrementalSyncer} manages a logical replication stream from upstream,
|
|
20
9
|
* handling application lifecycle events (start, stop) and retrying the
|
|
21
10
|
* connection with exponential backoff. The actual handling of the logical
|
|
22
|
-
* replication messages is done by the {@link
|
|
11
|
+
* replication messages is done by the {@link ChangeProcessor}.
|
|
23
12
|
*/
|
|
24
13
|
export class IncrementalSyncer {
|
|
25
14
|
#id;
|
|
@@ -44,7 +33,7 @@ export class IncrementalSyncer {
|
|
|
44
33
|
this.#notifier.notifySubscribers();
|
|
45
34
|
while (this.#state.shouldRun()) {
|
|
46
35
|
const { replicaVersion, watermark } = getSubscriptionState(this.#replica);
|
|
47
|
-
const processor = new
|
|
36
|
+
const processor = new ChangeProcessor(this.#replica, this.#txMode, (lc, err) => this.stop(lc, err));
|
|
48
37
|
let downstream;
|
|
49
38
|
let unregister = () => { };
|
|
50
39
|
let err;
|
|
@@ -61,7 +50,7 @@ export class IncrementalSyncer {
|
|
|
61
50
|
for await (const message of downstream) {
|
|
62
51
|
if (message[0] === 'error') {
|
|
63
52
|
// Unrecoverable error. Stop the service.
|
|
64
|
-
|
|
53
|
+
this.stop(lc, message[1]);
|
|
65
54
|
break;
|
|
66
55
|
}
|
|
67
56
|
if (processor.processMessage(lc, message)) {
|
|
@@ -89,405 +78,4 @@ export class IncrementalSyncer {
|
|
|
89
78
|
this.#state.stop(lc, err);
|
|
90
79
|
}
|
|
91
80
|
}
|
|
92
|
-
function ensureError(err) {
|
|
93
|
-
if (err instanceof Error) {
|
|
94
|
-
return err;
|
|
95
|
-
}
|
|
96
|
-
const error = new Error();
|
|
97
|
-
error.cause = err;
|
|
98
|
-
return error;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* The {@link MessageProcessor} partitions the stream of messages into transactions
|
|
102
|
-
* by creating a {@link TransactionProcessor} when a transaction begins, and dispatching
|
|
103
|
-
* messages to it until the commit is received.
|
|
104
|
-
*
|
|
105
|
-
* From https://www.postgresql.org/docs/current/protocol-logical-replication.html#PROTOCOL-LOGICAL-MESSAGES-FLOW :
|
|
106
|
-
*
|
|
107
|
-
* "The logical replication protocol sends individual transactions one by one.
|
|
108
|
-
* This means that all messages between a pair of Begin and Commit messages
|
|
109
|
-
* belong to the same transaction."
|
|
110
|
-
*/
|
|
111
|
-
// Exported for testing.
|
|
112
|
-
export class MessageProcessor {
|
|
113
|
-
#db;
|
|
114
|
-
#txMode;
|
|
115
|
-
#failService;
|
|
116
|
-
// The TransactionProcessor lazily loads table specs into this Map,
|
|
117
|
-
// and reloads them after a schema change. It is cached here to avoid
|
|
118
|
-
// reading them from the DB on every transaction.
|
|
119
|
-
#tableSpecs = new Map();
|
|
120
|
-
#currentTx = null;
|
|
121
|
-
#failure;
|
|
122
|
-
constructor(db, txMode, failService) {
|
|
123
|
-
this.#db = db;
|
|
124
|
-
this.#txMode = txMode;
|
|
125
|
-
this.#failService = failService;
|
|
126
|
-
}
|
|
127
|
-
#fail(lc, err) {
|
|
128
|
-
if (!this.#failure) {
|
|
129
|
-
this.#currentTx?.abort(lc); // roll back any pending transaction.
|
|
130
|
-
this.#failure = ensureError(err);
|
|
131
|
-
if (!(err instanceof AbortError)) {
|
|
132
|
-
// Propagate the failure up to the service.
|
|
133
|
-
lc.error?.('Message Processing failed:', this.#failure);
|
|
134
|
-
this.#failService(lc, this.#failure);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
abort(lc) {
|
|
139
|
-
this.#fail(lc, new AbortError());
|
|
140
|
-
}
|
|
141
|
-
/** @return If a transaction was committed. */
|
|
142
|
-
processMessage(lc, downstream) {
|
|
143
|
-
const [type, message] = downstream;
|
|
144
|
-
if (this.#failure) {
|
|
145
|
-
lc.debug?.(`Dropping ${message.tag}`);
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
try {
|
|
149
|
-
const watermark = type === 'begin'
|
|
150
|
-
? downstream[2].commitWatermark
|
|
151
|
-
: type === 'commit'
|
|
152
|
-
? downstream[2].watermark
|
|
153
|
-
: undefined;
|
|
154
|
-
return this.#processMessage(lc, message, watermark);
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
this.#fail(lc, e);
|
|
158
|
-
}
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
#beginTransaction(lc, commitVersion) {
|
|
162
|
-
let start = Date.now();
|
|
163
|
-
for (let i = 0;; i++) {
|
|
164
|
-
try {
|
|
165
|
-
return new TransactionProcessor(lc, this.#db, this.#txMode, this.#tableSpecs, commitVersion);
|
|
166
|
-
}
|
|
167
|
-
catch (e) {
|
|
168
|
-
// The db occasionally errors with a 'database is locked' error when
|
|
169
|
-
// being concurrently processed by `litestream replicate`, even with
|
|
170
|
-
// a long busy_timeout. Retry once to see if any deadlock situation
|
|
171
|
-
// was resolved when aborting the first attempt.
|
|
172
|
-
if (e instanceof SqliteError) {
|
|
173
|
-
lc.error?.(`${e.code} after ${Date.now() - start} ms (attempt ${i + 1})`, e);
|
|
174
|
-
if (i === 0) {
|
|
175
|
-
// retry once
|
|
176
|
-
start = Date.now();
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
throw e;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/** @return If a transaction was committed. */
|
|
185
|
-
#processMessage(lc, msg, watermark) {
|
|
186
|
-
if (msg.tag === 'begin') {
|
|
187
|
-
if (this.#currentTx) {
|
|
188
|
-
throw new Error(`Already in a transaction ${stringify(msg)}`);
|
|
189
|
-
}
|
|
190
|
-
this.#currentTx = this.#beginTransaction(lc, must(watermark));
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
// For non-begin messages, there should be a #currentTx set.
|
|
194
|
-
const tx = this.#currentTx;
|
|
195
|
-
if (!tx) {
|
|
196
|
-
throw new Error(`Received message outside of transaction: ${stringify(msg)}`);
|
|
197
|
-
}
|
|
198
|
-
if (msg.tag === 'commit') {
|
|
199
|
-
// Undef this.#currentTx to allow the assembly of the next transaction.
|
|
200
|
-
this.#currentTx = null;
|
|
201
|
-
assert(watermark);
|
|
202
|
-
tx.processCommit(msg, watermark);
|
|
203
|
-
return true;
|
|
204
|
-
}
|
|
205
|
-
if (msg.tag === 'rollback') {
|
|
206
|
-
this.#currentTx?.abort(lc);
|
|
207
|
-
this.#currentTx = null;
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
switch (msg.tag) {
|
|
211
|
-
case 'insert':
|
|
212
|
-
tx.processInsert(msg);
|
|
213
|
-
break;
|
|
214
|
-
case 'update':
|
|
215
|
-
tx.processUpdate(msg);
|
|
216
|
-
break;
|
|
217
|
-
case 'delete':
|
|
218
|
-
tx.processDelete(msg);
|
|
219
|
-
break;
|
|
220
|
-
case 'truncate':
|
|
221
|
-
tx.processTruncate(msg);
|
|
222
|
-
break;
|
|
223
|
-
case 'create-table':
|
|
224
|
-
tx.processCreateTable(msg);
|
|
225
|
-
break;
|
|
226
|
-
case 'rename-table':
|
|
227
|
-
tx.processRenameTable(msg);
|
|
228
|
-
break;
|
|
229
|
-
case 'add-column':
|
|
230
|
-
tx.processAddColumn(msg);
|
|
231
|
-
break;
|
|
232
|
-
case 'update-column':
|
|
233
|
-
tx.processUpdateColumn(msg);
|
|
234
|
-
break;
|
|
235
|
-
case 'drop-column':
|
|
236
|
-
tx.processDropColumn(msg);
|
|
237
|
-
break;
|
|
238
|
-
case 'drop-table':
|
|
239
|
-
tx.processDropTable(msg);
|
|
240
|
-
break;
|
|
241
|
-
case 'create-index':
|
|
242
|
-
tx.processCreateIndex(msg);
|
|
243
|
-
break;
|
|
244
|
-
case 'drop-index':
|
|
245
|
-
tx.processDropIndex(msg);
|
|
246
|
-
break;
|
|
247
|
-
default:
|
|
248
|
-
unreachable(msg);
|
|
249
|
-
}
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* The {@link TransactionProcessor} handles the sequence of messages from
|
|
255
|
-
* upstream, from `BEGIN` to `COMMIT` and executes the corresponding mutations
|
|
256
|
-
* on the {@link postgres.TransactionSql} on the replica.
|
|
257
|
-
*
|
|
258
|
-
* When applying row contents to the replica, the `_0_version` column is added / updated,
|
|
259
|
-
* and a corresponding entry in the `ChangeLog` is added. The version value is derived
|
|
260
|
-
* from the watermark of the preceding transaction (stored as the `nextStateVersion` in the
|
|
261
|
-
* `ReplicationState` table).
|
|
262
|
-
*
|
|
263
|
-
* Side note: For non-streaming Postgres transactions, the commitEndLsn (and thus
|
|
264
|
-
* commit watermark) is available in the `begin` message, so it could theoretically
|
|
265
|
-
* be used for the row version of changes within the transaction. However, the
|
|
266
|
-
* commitEndLsn is not available in the streaming (in-progress) transaction
|
|
267
|
-
* protocol, and may not be available for CDC streams of other upstream types.
|
|
268
|
-
* Therefore, the zero replication protocol is designed to not require the commit
|
|
269
|
-
* watermark when a transaction begins.
|
|
270
|
-
*
|
|
271
|
-
* Also of interest is the fact that all INSERT Messages are logically applied as
|
|
272
|
-
* UPSERTs. See {@link processInsert} for the underlying motivation.
|
|
273
|
-
*/
|
|
274
|
-
class TransactionProcessor {
|
|
275
|
-
#lc;
|
|
276
|
-
#startMs;
|
|
277
|
-
#db;
|
|
278
|
-
#version;
|
|
279
|
-
#tableSpecs;
|
|
280
|
-
constructor(lc, db, txMode, tableSpecs, commitVersion) {
|
|
281
|
-
this.#startMs = Date.now();
|
|
282
|
-
if (txMode === 'CONCURRENT') {
|
|
283
|
-
// Although the Replicator / Incremental Syncer is the only writer of the replica,
|
|
284
|
-
// a `BEGIN CONCURRENT` transaction is used to allow View Syncers to simulate
|
|
285
|
-
// (i.e. and `ROLLBACK`) changes on historic snapshots of the database for the
|
|
286
|
-
// purpose of IVM).
|
|
287
|
-
//
|
|
288
|
-
// This TransactionProcessor is the only logic that will actually
|
|
289
|
-
// `COMMIT` any transactions to the replica.
|
|
290
|
-
db.beginConcurrent();
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
// For the backup-replicator (i.e. replication-manager), there are no View Syncers
|
|
294
|
-
// and thus BEGIN CONCURRENT is not necessary. In fact, BEGIN CONCURRENT can cause
|
|
295
|
-
// deadlocks with forced wal-checkpoints (which `litestream replicate` performs),
|
|
296
|
-
// so it is important to use vanilla transactions in this configuration.
|
|
297
|
-
db.beginImmediate();
|
|
298
|
-
}
|
|
299
|
-
this.#db = db;
|
|
300
|
-
this.#version = commitVersion;
|
|
301
|
-
this.#lc = lc.withContext('version', commitVersion);
|
|
302
|
-
this.#tableSpecs = tableSpecs;
|
|
303
|
-
if (this.#tableSpecs.size === 0) {
|
|
304
|
-
this.#reloadTableSpecs();
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
#reloadTableSpecs() {
|
|
308
|
-
this.#tableSpecs.clear();
|
|
309
|
-
for (const spec of listTables(this.#db.db)) {
|
|
310
|
-
this.#tableSpecs.set(spec.name, spec);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
#tableSpec(name) {
|
|
314
|
-
return must(this.#tableSpecs.get(name), `Unknown table ${name}`);
|
|
315
|
-
}
|
|
316
|
-
processInsert(insert) {
|
|
317
|
-
const table = liteTableName(insert.relation);
|
|
318
|
-
const newRow = liteRow(insert.new, this.#tableSpec(table));
|
|
319
|
-
const row = {
|
|
320
|
-
...newRow,
|
|
321
|
-
[ZERO_VERSION_COLUMN_NAME]: this.#version,
|
|
322
|
-
};
|
|
323
|
-
const columns = Object.keys(row).map(c => id(c));
|
|
324
|
-
this.#db.run(`
|
|
325
|
-
INSERT INTO ${id(table)} (${columns.join(',')})
|
|
326
|
-
VALUES (${new Array(columns.length).fill('?').join(',')})
|
|
327
|
-
`, Object.values(row));
|
|
328
|
-
if (insert.relation.keyColumns.length === 0) {
|
|
329
|
-
// INSERTs can be replicated for rows without a PRIMARY KEY or a
|
|
330
|
-
// UNIQUE INDEX. These are written to the replica but not recorded
|
|
331
|
-
// in the changeLog, because these rows cannot participate in IVM.
|
|
332
|
-
//
|
|
333
|
-
// (Once the table schema has been corrected to include a key, the
|
|
334
|
-
// associated schema change will reset pipelines and data can be
|
|
335
|
-
// loaded via hydration.)
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
const key = Object.fromEntries(insert.relation.keyColumns.map(col => [col, newRow[col]]));
|
|
339
|
-
logSetOp(this.#db, this.#version, table, key);
|
|
340
|
-
}
|
|
341
|
-
processUpdate(update) {
|
|
342
|
-
const table = liteTableName(update.relation);
|
|
343
|
-
const newRow = liteRow(update.new, this.#tableSpec(table));
|
|
344
|
-
const row = {
|
|
345
|
-
...newRow,
|
|
346
|
-
[ZERO_VERSION_COLUMN_NAME]: this.#version,
|
|
347
|
-
};
|
|
348
|
-
// update.key is set with the old values if the key has changed.
|
|
349
|
-
const oldKey = update.key
|
|
350
|
-
? liteRow(update.key, this.#tableSpec(table))
|
|
351
|
-
: null;
|
|
352
|
-
const newKey = Object.fromEntries(update.relation.keyColumns.map(col => [col, newRow[col]]));
|
|
353
|
-
const currKey = oldKey ?? newKey;
|
|
354
|
-
const setExprs = Object.keys(row).map(col => `${id(col)}=?`);
|
|
355
|
-
const conds = Object.keys(currKey).map(col => `${id(col)}=?`);
|
|
356
|
-
this.#db.run(`
|
|
357
|
-
UPDATE ${id(table)}
|
|
358
|
-
SET ${setExprs.join(',')}
|
|
359
|
-
WHERE ${conds.join(' AND ')}
|
|
360
|
-
`, [...Object.values(row), ...Object.values(currKey)]);
|
|
361
|
-
if (oldKey) {
|
|
362
|
-
logDeleteOp(this.#db, this.#version, table, oldKey);
|
|
363
|
-
}
|
|
364
|
-
logSetOp(this.#db, this.#version, table, newKey);
|
|
365
|
-
}
|
|
366
|
-
processDelete(del) {
|
|
367
|
-
// REPLICA IDENTITY DEFAULT means the `key` must be set.
|
|
368
|
-
// https://www.postgresql.org/docs/current/protocol-logicalrep-message-formats.html
|
|
369
|
-
assert(del.relation.replicaIdentity === 'default');
|
|
370
|
-
const table = liteTableName(del.relation);
|
|
371
|
-
const rowKey = liteRow(del.key, this.#tableSpec(table));
|
|
372
|
-
const conds = Object.keys(rowKey).map(col => `${id(col)}=?`);
|
|
373
|
-
this.#db.run(`DELETE FROM ${id(table)} WHERE ${conds.join(' AND ')}`, Object.values(rowKey));
|
|
374
|
-
logDeleteOp(this.#db, this.#version, table, rowKey);
|
|
375
|
-
}
|
|
376
|
-
processTruncate(truncate) {
|
|
377
|
-
for (const relation of truncate.relations) {
|
|
378
|
-
const table = liteTableName(relation);
|
|
379
|
-
// Update replica data.
|
|
380
|
-
this.#db.run(`DELETE FROM ${id(table)}`);
|
|
381
|
-
// Update change log.
|
|
382
|
-
logTruncateOp(this.#db, this.#version, table);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
processCreateTable(create) {
|
|
386
|
-
const table = mapPostgresToLite(create.spec);
|
|
387
|
-
this.#db.db.exec(createTableStatement(table));
|
|
388
|
-
this.#logResetOp(table.name);
|
|
389
|
-
this.#lc.info?.(create.tag, table.name);
|
|
390
|
-
}
|
|
391
|
-
processRenameTable(rename) {
|
|
392
|
-
const oldName = liteTableName(rename.old);
|
|
393
|
-
const newName = liteTableName(rename.new);
|
|
394
|
-
this.#db.db.exec(`ALTER TABLE ${id(oldName)} RENAME TO ${id(newName)}`);
|
|
395
|
-
this.#bumpVersions(newName);
|
|
396
|
-
this.#logResetOp(oldName);
|
|
397
|
-
this.#lc.info?.(rename.tag, oldName, newName);
|
|
398
|
-
}
|
|
399
|
-
processAddColumn(msg) {
|
|
400
|
-
const table = liteTableName(msg.table);
|
|
401
|
-
const { name } = msg.column;
|
|
402
|
-
const spec = mapPostgresToLiteColumn(table, msg.column);
|
|
403
|
-
this.#db.db.exec(`ALTER TABLE ${id(table)} ADD ${id(name)} ${columnDef(spec)}`);
|
|
404
|
-
this.#bumpVersions(table);
|
|
405
|
-
this.#lc.info?.(msg.tag, table, msg.column);
|
|
406
|
-
}
|
|
407
|
-
processUpdateColumn(msg) {
|
|
408
|
-
const table = liteTableName(msg.table);
|
|
409
|
-
let oldName = msg.old.name;
|
|
410
|
-
const newName = msg.new.name;
|
|
411
|
-
const oldSpec = mapPostgresToLiteColumn(table, msg.old);
|
|
412
|
-
const newSpec = mapPostgresToLiteColumn(table, msg.new);
|
|
413
|
-
// The only updates that are relevant are the column name and the data type.
|
|
414
|
-
if (oldName === newName && oldSpec.dataType === newSpec.dataType) {
|
|
415
|
-
this.#lc.info?.(msg.tag, 'no thing to update', oldSpec, newSpec);
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
// If the data type changes, we have to make a new column with the new data type
|
|
419
|
-
// and copy the values over.
|
|
420
|
-
if (oldSpec.dataType !== newSpec.dataType) {
|
|
421
|
-
// Remember (and drop) the indexes that reference the column.
|
|
422
|
-
const indexes = listIndexes(this.#db.db).filter(idx => idx.tableName === table && oldName in idx.columns);
|
|
423
|
-
const stmts = indexes.map(idx => `DROP INDEX IF EXISTS ${id(idx.name)};`);
|
|
424
|
-
const tmpName = `tmp.${newName}`;
|
|
425
|
-
stmts.push(`
|
|
426
|
-
ALTER TABLE ${id(table)} ADD ${id(tmpName)} ${columnDef(newSpec)};
|
|
427
|
-
UPDATE ${id(table)} SET ${id(tmpName)} = ${id(oldName)};
|
|
428
|
-
ALTER TABLE ${id(table)} DROP ${id(oldName)};
|
|
429
|
-
`);
|
|
430
|
-
for (const idx of indexes) {
|
|
431
|
-
// Re-create the indexes to reference the new column.
|
|
432
|
-
idx.columns[tmpName] = idx.columns[oldName];
|
|
433
|
-
delete idx.columns[oldName];
|
|
434
|
-
stmts.push(createIndexStatement(idx));
|
|
435
|
-
}
|
|
436
|
-
this.#db.db.exec(stmts.join(''));
|
|
437
|
-
oldName = tmpName;
|
|
438
|
-
}
|
|
439
|
-
if (oldName !== newName) {
|
|
440
|
-
this.#db.db.exec(`ALTER TABLE ${id(table)} RENAME ${id(oldName)} TO ${id(newName)}`);
|
|
441
|
-
}
|
|
442
|
-
this.#bumpVersions(table);
|
|
443
|
-
this.#lc.info?.(msg.tag, table, msg.new);
|
|
444
|
-
}
|
|
445
|
-
processDropColumn(msg) {
|
|
446
|
-
const table = liteTableName(msg.table);
|
|
447
|
-
const { column } = msg;
|
|
448
|
-
this.#db.db.exec(`ALTER TABLE ${id(table)} DROP ${id(column)}`);
|
|
449
|
-
this.#bumpVersions(table);
|
|
450
|
-
this.#lc.info?.(msg.tag, table, column);
|
|
451
|
-
}
|
|
452
|
-
processDropTable(drop) {
|
|
453
|
-
const name = liteTableName(drop.id);
|
|
454
|
-
this.#db.db.exec(`DROP TABLE IF EXISTS ${id(name)}`);
|
|
455
|
-
this.#logResetOp(name);
|
|
456
|
-
this.#lc.info?.(drop.tag, name);
|
|
457
|
-
}
|
|
458
|
-
processCreateIndex(create) {
|
|
459
|
-
const index = mapPostgresToLiteIndex(create.spec);
|
|
460
|
-
this.#db.db.exec(createIndexStatement(index));
|
|
461
|
-
// indexes affect tables visibility (e.g. sync-ability is gated on
|
|
462
|
-
// having a unique index), so reset pipelines to refresh table schemas.
|
|
463
|
-
this.#logResetOp(index.tableName);
|
|
464
|
-
this.#lc.info?.(create.tag, index.name);
|
|
465
|
-
}
|
|
466
|
-
processDropIndex(drop) {
|
|
467
|
-
const name = liteTableName(drop.id);
|
|
468
|
-
this.#db.db.exec(`DROP INDEX IF EXISTS ${id(name)}`);
|
|
469
|
-
this.#lc.info?.(drop.tag, name);
|
|
470
|
-
}
|
|
471
|
-
#bumpVersions(table) {
|
|
472
|
-
this.#db.run(`UPDATE ${id(table)} SET ${id(ZERO_VERSION_COLUMN_NAME)} = ?`, this.#version);
|
|
473
|
-
this.#logResetOp(table);
|
|
474
|
-
}
|
|
475
|
-
#logResetOp(table) {
|
|
476
|
-
logResetOp(this.#db, this.#version, table);
|
|
477
|
-
this.#reloadTableSpecs();
|
|
478
|
-
}
|
|
479
|
-
processCommit(commit, watermark) {
|
|
480
|
-
if (watermark !== this.#version) {
|
|
481
|
-
throw new Error(`'commit' version ${watermark} does not match 'begin' version ${this.#version}: ${stringify(commit)}`);
|
|
482
|
-
}
|
|
483
|
-
updateReplicationWatermark(this.#db, watermark);
|
|
484
|
-
this.#db.commit();
|
|
485
|
-
const elapsedMs = Date.now() - this.#startMs;
|
|
486
|
-
this.#lc.debug?.(`Committed tx@${this.#version} (${elapsedMs} ms)`);
|
|
487
|
-
}
|
|
488
|
-
abort(lc) {
|
|
489
|
-
lc.info?.(`aborting transaction ${this.#version}`);
|
|
490
|
-
this.#db.rollback();
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
81
|
//# sourceMappingURL=incremental-sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incremental-sync.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/replicator/incremental-sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"incremental-sync.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/replicator/incremental-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Result, Subscription } from '../../types/subscription.
|
|
2
|
-
import type { ReplicaState, ReplicaStateNotifier } from './replicator.
|
|
1
|
+
import { type Result, Subscription } from '../../types/subscription.ts';
|
|
2
|
+
import type { ReplicaState, ReplicaStateNotifier } from './replicator.ts';
|
|
3
3
|
/**
|
|
4
4
|
* Handles the semantics of {@link ReplicatorVersionNotifier.subscribe()}
|
|
5
5
|
* notifications, namely:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'eventemitter3';
|
|
2
|
-
import { Subscription, } from
|
|
2
|
+
import { Subscription, } from "../../types/subscription.js";
|
|
3
3
|
/**
|
|
4
4
|
* Handles the semantics of {@link ReplicatorVersionNotifier.subscribe()}
|
|
5
5
|
* notifications, namely:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type { ReadonlyJSONObject } from '../../../../shared/src/json.
|
|
3
|
-
import { Database } from '../../../../zqlite/src/db.
|
|
4
|
-
import type { Source } from '../../types/streams.
|
|
5
|
-
import type { ChangeStreamer } from '../change-streamer/change-streamer.
|
|
6
|
-
import type { Service } from '../service.
|
|
2
|
+
import type { ReadonlyJSONObject } from '../../../../shared/src/json.ts';
|
|
3
|
+
import { Database } from '../../../../zqlite/src/db.ts';
|
|
4
|
+
import type { Source } from '../../types/streams.ts';
|
|
5
|
+
import type { ChangeStreamer } from '../change-streamer/change-streamer.ts';
|
|
6
|
+
import type { Service } from '../service.ts';
|
|
7
7
|
/** See {@link ReplicaStateNotifier.subscribe()}. */
|
|
8
8
|
export type ReplicaState = {
|
|
9
9
|
readonly state: 'version-ready';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { promiseVoid } from
|
|
2
|
-
import { Database } from
|
|
3
|
-
import { IncrementalSyncer } from
|
|
1
|
+
import { promiseVoid } from "../../../../shared/src/resolved-promises.js";
|
|
2
|
+
import { Database } from "../../../../zqlite/src/db.js";
|
|
3
|
+
import { IncrementalSyncer } from "./incremental-sync.js";
|
|
4
4
|
export class ReplicatorService {
|
|
5
5
|
id;
|
|
6
6
|
#lc;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as v from '../../../../../shared/src/valita.
|
|
2
|
-
import type { Database } from '../../../../../zqlite/src/db.
|
|
3
|
-
import { StatementRunner } from '../../../db/statements.
|
|
4
|
-
import type { LexiVersion } from '../../../types/lexi-version.
|
|
5
|
-
import type { LiteRowKey } from '../../../types/lite.
|
|
1
|
+
import * as v from '../../../../../shared/src/valita.ts';
|
|
2
|
+
import type { Database } from '../../../../../zqlite/src/db.ts';
|
|
3
|
+
import { StatementRunner } from '../../../db/statements.ts';
|
|
4
|
+
import type { LexiVersion } from '../../../types/lexi-version.ts';
|
|
5
|
+
import type { LiteRowKey } from '../../../types/lite.ts';
|
|
6
6
|
/**
|
|
7
7
|
* The Change Log tracks the last operation (set or delete) for each row in the
|
|
8
8
|
* data base, ordered by state version; in other words, a cross-table
|
|
@@ -38,7 +38,7 @@ export declare const DEL_OP = "d";
|
|
|
38
38
|
export declare const TRUNCATE_OP = "t";
|
|
39
39
|
export declare const RESET_OP = "r";
|
|
40
40
|
export declare const changeLogEntrySchema: v.Type<{
|
|
41
|
-
rowKey: Readonly<Record<string, import("../../../types/bigint-json.
|
|
41
|
+
rowKey: Readonly<Record<string, import("../../../types/bigint-json.ts").JSONValue>> | null;
|
|
42
42
|
stateVersion: string;
|
|
43
43
|
table: string;
|
|
44
44
|
op: "d" | "r" | "s" | "t";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as v from
|
|
2
|
-
import { StatementRunner } from
|
|
3
|
-
import { jsonObjectSchema, parse, stringify, } from
|
|
4
|
-
import { normalizedKeyOrder } from
|
|
1
|
+
import * as v from "../../../../../shared/src/valita.js";
|
|
2
|
+
import { StatementRunner } from "../../../db/statements.js";
|
|
3
|
+
import { jsonObjectSchema, parse, stringify, } from "../../../types/bigint-json.js";
|
|
4
|
+
import { normalizedKeyOrder } from "../../../types/row-key.js";
|
|
5
5
|
/**
|
|
6
6
|
* The Change Log tracks the last operation (set or delete) for each row in the
|
|
7
7
|
* data base, ordered by state version; in other words, a cross-table
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* These tables are created atomically in {@link setupReplicationTables}
|
|
5
5
|
* after the logical replication handoff when initial data synchronization has completed.
|
|
6
6
|
*/
|
|
7
|
-
import * as v from '../../../../../shared/src/valita.
|
|
8
|
-
import { Database } from '../../../../../zqlite/src/db.
|
|
9
|
-
import { StatementRunner } from '../../../db/statements.
|
|
7
|
+
import * as v from '../../../../../shared/src/valita.ts';
|
|
8
|
+
import { Database } from '../../../../../zqlite/src/db.ts';
|
|
9
|
+
import { StatementRunner } from '../../../db/statements.ts';
|
|
10
10
|
export declare const ZERO_VERSION_COLUMN_NAME = "_0_version";
|
|
11
11
|
declare const replicationStateSchema: v.ObjectType<{
|
|
12
12
|
stateVersion: v.Type<string>;
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* These tables are created atomically in {@link setupReplicationTables}
|
|
5
5
|
* after the logical replication handoff when initial data synchronization has completed.
|
|
6
6
|
*/
|
|
7
|
-
import * as v from
|
|
8
|
-
import { Database } from
|
|
9
|
-
import { StatementRunner } from
|
|
7
|
+
import * as v from "../../../../../shared/src/valita.js";
|
|
8
|
+
import { Database } from "../../../../../zqlite/src/db.js";
|
|
9
|
+
import { StatementRunner } from "../../../db/statements.js";
|
|
10
10
|
export const ZERO_VERSION_COLUMN_NAME = '_0_version';
|
|
11
11
|
const CREATE_REPLICATION_STATE_SCHEMA =
|
|
12
12
|
// replicaVersion : A value identifying the version at which the initial sync happened, i.e.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import { sleepWithAbort } from '../../../shared/src/sleep.
|
|
2
|
+
import { sleepWithAbort } from '../../../shared/src/sleep.ts';
|
|
3
3
|
export declare const DEFAULT_MAX_RETRY_DELAY_MS = 10000;
|
|
4
4
|
export type RetryConfig = {
|
|
5
5
|
initialRetryDelay?: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LogContext } from '@rocicorp/logger';
|
|
2
2
|
import { resolver } from '@rocicorp/resolver';
|
|
3
|
-
import { AbortError } from
|
|
4
|
-
import { sleepWithAbort } from
|
|
3
|
+
import { AbortError } from "../../../shared/src/abort-error.js";
|
|
4
|
+
import { sleepWithAbort } from "../../../shared/src/sleep.js";
|
|
5
5
|
const DEFAULT_INITIAL_RETRY_DELAY_MS = 100;
|
|
6
6
|
export const DEFAULT_MAX_RETRY_DELAY_MS = 10000;
|
|
7
7
|
/**
|