@rocicorp/zero 0.0.0-202410031711
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/deps/sqlite3/sqlite3.c +260574 -0
- package/deps/sqlite3/sqlite3.h +13572 -0
- package/deps/sqlite3/sqlite3ext.h +719 -0
- package/out/btree/b+tree.d.ts +471 -0
- package/out/btree/b+tree.d.ts.map +1 -0
- package/out/btree/b+tree.js +1708 -0
- package/out/btree/b+tree.js.map +1 -0
- package/out/btree/interfaces.d.ts +270 -0
- package/out/btree/interfaces.d.ts.map +1 -0
- package/out/btree/interfaces.js +3 -0
- package/out/btree/interfaces.js.map +1 -0
- package/out/chunk-2RUT5EQV.js +28 -0
- package/out/chunk-2RUT5EQV.js.map +7 -0
- package/out/datadog/src/datadog-log-sink.d.ts +20 -0
- package/out/datadog/src/datadog-log-sink.d.ts.map +1 -0
- package/out/datadog/src/datadog-log-sink.js +231 -0
- package/out/datadog/src/datadog-log-sink.js.map +1 -0
- package/out/datadog/src/mod.d.ts +2 -0
- package/out/datadog/src/mod.d.ts.map +1 -0
- package/out/react.js +108 -0
- package/out/react.js.map +7 -0
- package/out/replicache/src/async-iterable-to-array.d.ts +2 -0
- package/out/replicache/src/async-iterable-to-array.d.ts.map +1 -0
- package/out/replicache/src/bg-interval.d.ts +3 -0
- package/out/replicache/src/bg-interval.d.ts.map +1 -0
- package/out/replicache/src/binary-search.d.ts +15 -0
- package/out/replicache/src/binary-search.d.ts.map +1 -0
- package/out/replicache/src/broadcast-channel.d.ts +3 -0
- package/out/replicache/src/broadcast-channel.d.ts.map +1 -0
- package/out/replicache/src/btree/diff.d.ts +4 -0
- package/out/replicache/src/btree/diff.d.ts.map +1 -0
- package/out/replicache/src/btree/node.d.ts +125 -0
- package/out/replicache/src/btree/node.d.ts.map +1 -0
- package/out/replicache/src/btree/read.d.ts +32 -0
- package/out/replicache/src/btree/read.d.ts.map +1 -0
- package/out/replicache/src/btree/splice.d.ts +9 -0
- package/out/replicache/src/btree/splice.d.ts.map +1 -0
- package/out/replicache/src/btree/write.d.ts +24 -0
- package/out/replicache/src/btree/write.d.ts.map +1 -0
- package/out/replicache/src/call-default-fetch.d.ts +6 -0
- package/out/replicache/src/call-default-fetch.d.ts.map +1 -0
- package/out/replicache/src/config.d.ts +13 -0
- package/out/replicache/src/config.d.ts.map +1 -0
- package/out/replicache/src/connection-loop-delegates.d.ts +20 -0
- package/out/replicache/src/connection-loop-delegates.d.ts.map +1 -0
- package/out/replicache/src/connection-loop.d.ts +28 -0
- package/out/replicache/src/connection-loop.d.ts.map +1 -0
- package/out/replicache/src/cookies.d.ts +29 -0
- package/out/replicache/src/cookies.d.ts.map +1 -0
- package/out/replicache/src/dag/chunk.d.ts +35 -0
- package/out/replicache/src/dag/chunk.d.ts.map +1 -0
- package/out/replicache/src/dag/gc.d.ts +42 -0
- package/out/replicache/src/dag/gc.d.ts.map +1 -0
- package/out/replicache/src/dag/key.d.ts +26 -0
- package/out/replicache/src/dag/key.d.ts.map +1 -0
- package/out/replicache/src/dag/lazy-store.d.ts +181 -0
- package/out/replicache/src/dag/lazy-store.d.ts.map +1 -0
- package/out/replicache/src/dag/store-impl.d.ts +38 -0
- package/out/replicache/src/dag/store-impl.d.ts.map +1 -0
- package/out/replicache/src/dag/store.d.ts +36 -0
- package/out/replicache/src/dag/store.d.ts.map +1 -0
- package/out/replicache/src/dag/visitor.d.ts +13 -0
- package/out/replicache/src/dag/visitor.d.ts.map +1 -0
- package/out/replicache/src/db/commit.d.ts +133 -0
- package/out/replicache/src/db/commit.d.ts.map +1 -0
- package/out/replicache/src/db/index.d.ts +33 -0
- package/out/replicache/src/db/index.d.ts.map +1 -0
- package/out/replicache/src/db/read.d.ts +24 -0
- package/out/replicache/src/db/read.d.ts.map +1 -0
- package/out/replicache/src/db/rebase.d.ts +10 -0
- package/out/replicache/src/db/rebase.d.ts.map +1 -0
- package/out/replicache/src/db/scan.d.ts +15 -0
- package/out/replicache/src/db/scan.d.ts.map +1 -0
- package/out/replicache/src/db/write.d.ts +39 -0
- package/out/replicache/src/db/write.d.ts.map +1 -0
- package/out/replicache/src/error-responses.d.ts +26 -0
- package/out/replicache/src/error-responses.d.ts.map +1 -0
- package/out/replicache/src/filter-async-iterable.d.ts +10 -0
- package/out/replicache/src/filter-async-iterable.d.ts.map +1 -0
- package/out/replicache/src/format-version.d.ts +9 -0
- package/out/replicache/src/format-version.d.ts.map +1 -0
- package/out/replicache/src/frozen-json.d.ts +35 -0
- package/out/replicache/src/frozen-json.d.ts.map +1 -0
- package/out/replicache/src/get-default-puller.d.ts +14 -0
- package/out/replicache/src/get-default-puller.d.ts.map +1 -0
- package/out/replicache/src/get-default-pusher.d.ts +10 -0
- package/out/replicache/src/get-default-pusher.d.ts.map +1 -0
- package/out/replicache/src/hash.d.ts +29 -0
- package/out/replicache/src/hash.d.ts.map +1 -0
- package/out/replicache/src/http-request-info.d.ts +6 -0
- package/out/replicache/src/http-request-info.d.ts.map +1 -0
- package/out/replicache/src/impl.d.ts +4 -0
- package/out/replicache/src/impl.d.ts.map +1 -0
- package/out/replicache/src/index-defs.d.ts +36 -0
- package/out/replicache/src/index-defs.d.ts.map +1 -0
- package/out/replicache/src/iterable-union.d.ts +5 -0
- package/out/replicache/src/iterable-union.d.ts.map +1 -0
- package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts +25 -0
- package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts.map +1 -0
- package/out/replicache/src/kv/idb-store.d.ts +18 -0
- package/out/replicache/src/kv/idb-store.d.ts.map +1 -0
- package/out/replicache/src/kv/mem-store.d.ts +23 -0
- package/out/replicache/src/kv/mem-store.d.ts.map +1 -0
- package/out/replicache/src/kv/read-impl.d.ts +11 -0
- package/out/replicache/src/kv/read-impl.d.ts.map +1 -0
- package/out/replicache/src/kv/store.d.ts +76 -0
- package/out/replicache/src/kv/store.d.ts.map +1 -0
- package/out/replicache/src/kv/write-impl-base.d.ts +18 -0
- package/out/replicache/src/kv/write-impl-base.d.ts.map +1 -0
- package/out/replicache/src/kv/write-impl.d.ts +9 -0
- package/out/replicache/src/kv/write-impl.d.ts.map +1 -0
- package/out/replicache/src/lazy.d.ts +2 -0
- package/out/replicache/src/lazy.d.ts.map +1 -0
- package/out/replicache/src/log-options.d.ts +10 -0
- package/out/replicache/src/log-options.d.ts.map +1 -0
- package/out/replicache/src/merge-async-iterables.d.ts +16 -0
- package/out/replicache/src/merge-async-iterables.d.ts.map +1 -0
- package/out/replicache/src/mod.d.ts +38 -0
- package/out/replicache/src/mod.d.ts.map +1 -0
- package/out/replicache/src/mutation-recovery.d.ts +43 -0
- package/out/replicache/src/mutation-recovery.d.ts.map +1 -0
- package/out/replicache/src/new-client-channel.d.ts +6 -0
- package/out/replicache/src/new-client-channel.d.ts.map +1 -0
- package/out/replicache/src/on-persist-channel.d.ts +10 -0
- package/out/replicache/src/on-persist-channel.d.ts.map +1 -0
- package/out/replicache/src/patch-operation.d.ts +32 -0
- package/out/replicache/src/patch-operation.d.ts.map +1 -0
- package/out/replicache/src/pending-mutations.d.ts +14 -0
- package/out/replicache/src/pending-mutations.d.ts.map +1 -0
- package/out/replicache/src/persist/client-gc.d.ts +17 -0
- package/out/replicache/src/persist/client-gc.d.ts.map +1 -0
- package/out/replicache/src/persist/client-group-gc.d.ts +10 -0
- package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -0
- package/out/replicache/src/persist/client-groups.d.ts +72 -0
- package/out/replicache/src/persist/client-groups.d.ts.map +1 -0
- package/out/replicache/src/persist/clients.d.ts +155 -0
- package/out/replicache/src/persist/clients.d.ts.map +1 -0
- package/out/replicache/src/persist/collect-idb-databases.d.ts +91 -0
- package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -0
- package/out/replicache/src/persist/gather-mem-only-visitor.d.ts +12 -0
- package/out/replicache/src/persist/gather-mem-only-visitor.d.ts.map +1 -0
- package/out/replicache/src/persist/gather-not-cached-visitor.d.ts +17 -0
- package/out/replicache/src/persist/gather-not-cached-visitor.d.ts.map +1 -0
- package/out/replicache/src/persist/heartbeat.d.ts +9 -0
- package/out/replicache/src/persist/heartbeat.d.ts.map +1 -0
- package/out/replicache/src/persist/idb-databases-store-db-name.d.ts +5 -0
- package/out/replicache/src/persist/idb-databases-store-db-name.d.ts.map +1 -0
- package/out/replicache/src/persist/idb-databases-store.d.ts +24 -0
- package/out/replicache/src/persist/idb-databases-store.d.ts.map +1 -0
- package/out/replicache/src/persist/make-client-id.d.ts +6 -0
- package/out/replicache/src/persist/make-client-id.d.ts.map +1 -0
- package/out/replicache/src/persist/persist.d.ts +26 -0
- package/out/replicache/src/persist/persist.d.ts.map +1 -0
- package/out/replicache/src/persist/refresh.d.ts +13 -0
- package/out/replicache/src/persist/refresh.d.ts.map +1 -0
- package/out/replicache/src/process-scheduler.d.ts +20 -0
- package/out/replicache/src/process-scheduler.d.ts.map +1 -0
- package/out/replicache/src/puller.d.ts +61 -0
- package/out/replicache/src/puller.d.ts.map +1 -0
- package/out/replicache/src/pusher.d.ts +33 -0
- package/out/replicache/src/pusher.d.ts.map +1 -0
- package/out/replicache/src/replicache-impl.d.ts +321 -0
- package/out/replicache/src/replicache-impl.d.ts.map +1 -0
- package/out/replicache/src/replicache-options.d.ts +209 -0
- package/out/replicache/src/replicache-options.d.ts.map +1 -0
- package/out/replicache/src/replicache.d.ts +298 -0
- package/out/replicache/src/replicache.d.ts.map +1 -0
- package/out/replicache/src/request-idle.d.ts +6 -0
- package/out/replicache/src/request-idle.d.ts.map +1 -0
- package/out/replicache/src/scan-iterator.d.ts +127 -0
- package/out/replicache/src/scan-iterator.d.ts.map +1 -0
- package/out/replicache/src/scan-options.d.ts +67 -0
- package/out/replicache/src/scan-options.d.ts.map +1 -0
- package/out/replicache/src/set-interval-with-signal.d.ts +2 -0
- package/out/replicache/src/set-interval-with-signal.d.ts.map +1 -0
- package/out/replicache/src/size-of-value.d.ts +19 -0
- package/out/replicache/src/size-of-value.d.ts.map +1 -0
- package/out/replicache/src/subscriptions.d.ts +140 -0
- package/out/replicache/src/subscriptions.d.ts.map +1 -0
- package/out/replicache/src/sync/diff.d.ts +31 -0
- package/out/replicache/src/sync/diff.d.ts.map +1 -0
- package/out/replicache/src/sync/ids.d.ts +13 -0
- package/out/replicache/src/sync/ids.d.ts.map +1 -0
- package/out/replicache/src/sync/patch.d.ts +5 -0
- package/out/replicache/src/sync/patch.d.ts.map +1 -0
- package/out/replicache/src/sync/pull-error.d.ts +9 -0
- package/out/replicache/src/sync/pull-error.d.ts.map +1 -0
- package/out/replicache/src/sync/pull.d.ts +82 -0
- package/out/replicache/src/sync/pull.d.ts.map +1 -0
- package/out/replicache/src/sync/push.d.ts +65 -0
- package/out/replicache/src/sync/push.d.ts.map +1 -0
- package/out/replicache/src/sync/request-id.d.ts +10 -0
- package/out/replicache/src/sync/request-id.d.ts.map +1 -0
- package/out/replicache/src/sync/sync-head-name.d.ts +2 -0
- package/out/replicache/src/sync/sync-head-name.d.ts.map +1 -0
- package/out/replicache/src/test-license-key.d.ts +3 -0
- package/out/replicache/src/test-license-key.d.ts.map +1 -0
- package/out/replicache/src/to-error.d.ts +2 -0
- package/out/replicache/src/to-error.d.ts.map +1 -0
- package/out/replicache/src/transaction-closed-error.d.ts +12 -0
- package/out/replicache/src/transaction-closed-error.d.ts.map +1 -0
- package/out/replicache/src/transactions.d.ts +156 -0
- package/out/replicache/src/transactions.d.ts.map +1 -0
- package/out/replicache/src/types.d.ts +57 -0
- package/out/replicache/src/types.d.ts.map +1 -0
- package/out/replicache/src/version.d.ts +5 -0
- package/out/replicache/src/version.d.ts.map +1 -0
- package/out/replicache/src/with-transactions.d.ts +23 -0
- package/out/replicache/src/with-transactions.d.ts.map +1 -0
- package/out/shared/src/abort-error.d.ts +4 -0
- package/out/shared/src/abort-error.d.ts.map +1 -0
- package/out/shared/src/abort-error.js +4 -0
- package/out/shared/src/abort-error.js.map +1 -0
- package/out/shared/src/asserts.d.ts +17 -0
- package/out/shared/src/asserts.d.ts.map +1 -0
- package/out/shared/src/asserts.js +73 -0
- package/out/shared/src/asserts.js.map +1 -0
- package/out/shared/src/browser-env.d.ts +3 -0
- package/out/shared/src/browser-env.d.ts.map +1 -0
- package/out/shared/src/config.d.ts +3 -0
- package/out/shared/src/config.d.ts.map +1 -0
- package/out/shared/src/config.js +3 -0
- package/out/shared/src/config.js.map +1 -0
- package/out/shared/src/custom-key-map.d.ts +26 -0
- package/out/shared/src/custom-key-map.d.ts.map +1 -0
- package/out/shared/src/custom-key-map.js +65 -0
- package/out/shared/src/custom-key-map.js.map +1 -0
- package/out/shared/src/deep-clone.d.ts +4 -0
- package/out/shared/src/deep-clone.d.ts.map +1 -0
- package/out/shared/src/document-visible.d.ts +9 -0
- package/out/shared/src/document-visible.d.ts.map +1 -0
- package/out/shared/src/has-own.d.ts +5 -0
- package/out/shared/src/has-own.d.ts.map +1 -0
- package/out/shared/src/has-own.js +8 -0
- package/out/shared/src/has-own.js.map +1 -0
- package/out/shared/src/immutable.d.ts +11 -0
- package/out/shared/src/immutable.d.ts.map +1 -0
- package/out/shared/src/iterables.d.ts +11 -0
- package/out/shared/src/iterables.d.ts.map +1 -0
- package/out/shared/src/json-schema.d.ts +5 -0
- package/out/shared/src/json-schema.d.ts.map +1 -0
- package/out/shared/src/json-schema.js +36 -0
- package/out/shared/src/json-schema.js.map +1 -0
- package/out/shared/src/json.d.ts +55 -0
- package/out/shared/src/json.d.ts.map +1 -0
- package/out/shared/src/json.js +164 -0
- package/out/shared/src/json.js.map +1 -0
- package/out/shared/src/must.d.ts +2 -0
- package/out/shared/src/must.d.ts.map +1 -0
- package/out/shared/src/must.js +8 -0
- package/out/shared/src/must.js.map +1 -0
- package/out/shared/src/navigator.d.ts +7 -0
- package/out/shared/src/navigator.d.ts.map +1 -0
- package/out/shared/src/parse-big-int.d.ts +2 -0
- package/out/shared/src/parse-big-int.d.ts.map +1 -0
- package/out/shared/src/parse-big-int.js +11 -0
- package/out/shared/src/parse-big-int.js.map +1 -0
- package/out/shared/src/queue.d.ts +40 -0
- package/out/shared/src/queue.d.ts.map +1 -0
- package/out/shared/src/queue.js +118 -0
- package/out/shared/src/queue.js.map +1 -0
- package/out/shared/src/rand.d.ts +7 -0
- package/out/shared/src/rand.d.ts.map +1 -0
- package/out/shared/src/rand.js +11 -0
- package/out/shared/src/rand.js.map +1 -0
- package/out/shared/src/random-uint64.d.ts +2 -0
- package/out/shared/src/random-uint64.d.ts.map +1 -0
- package/out/shared/src/random-values.d.ts +2 -0
- package/out/shared/src/random-values.d.ts.map +1 -0
- package/out/shared/src/resolved-promises.d.ts +5 -0
- package/out/shared/src/resolved-promises.d.ts.map +1 -0
- package/out/shared/src/resolved-promises.js +5 -0
- package/out/shared/src/resolved-promises.js.map +1 -0
- package/out/shared/src/set-utils.d.ts +9 -0
- package/out/shared/src/set-utils.d.ts.map +1 -0
- package/out/shared/src/set-utils.js +60 -0
- package/out/shared/src/set-utils.js.map +1 -0
- package/out/shared/src/sleep.d.ts +15 -0
- package/out/shared/src/sleep.d.ts.map +1 -0
- package/out/shared/src/sleep.js +54 -0
- package/out/shared/src/sleep.js.map +1 -0
- package/out/shared/src/string-compare.d.ts +2 -0
- package/out/shared/src/string-compare.d.ts.map +1 -0
- package/out/shared/src/string-compare.js +10 -0
- package/out/shared/src/string-compare.js.map +1 -0
- package/out/shared/src/types.d.ts +2 -0
- package/out/shared/src/types.d.ts.map +1 -0
- package/out/shared/src/valita.d.ts +27 -0
- package/out/shared/src/valita.d.ts.map +1 -0
- package/out/shared/src/valita.js +118 -0
- package/out/shared/src/valita.js.map +1 -0
- package/out/shared/src/xxhash.d.ts +3 -0
- package/out/shared/src/xxhash.d.ts.map +1 -0
- package/out/shared/src/xxhash.js +4 -0
- package/out/shared/src/xxhash.js.map +1 -0
- package/out/zero/src/cli.d.ts +3 -0
- package/out/zero/src/cli.d.ts.map +1 -0
- package/out/zero/src/cli.js +3 -0
- package/out/zero/src/cli.js.map +1 -0
- package/out/zero/src/react.d.ts +2 -0
- package/out/zero/src/react.d.ts.map +1 -0
- package/out/zero/src/server/change-streamer.d.ts +2 -0
- package/out/zero/src/server/change-streamer.d.ts.map +1 -0
- package/out/zero/src/server/change-streamer.js +2 -0
- package/out/zero/src/server/change-streamer.js.map +1 -0
- package/out/zero/src/server/main.d.ts +2 -0
- package/out/zero/src/server/main.d.ts.map +1 -0
- package/out/zero/src/server/main.js +2 -0
- package/out/zero/src/server/main.js.map +1 -0
- package/out/zero/src/server/replicator.d.ts +2 -0
- package/out/zero/src/server/replicator.d.ts.map +1 -0
- package/out/zero/src/server/replicator.js +2 -0
- package/out/zero/src/server/replicator.js.map +1 -0
- package/out/zero/src/server/syncer.d.ts +2 -0
- package/out/zero/src/server/syncer.d.ts.map +1 -0
- package/out/zero/src/server/syncer.js +2 -0
- package/out/zero/src/server/syncer.js.map +1 -0
- package/out/zero/src/zero.d.ts +2 -0
- package/out/zero/src/zero.d.ts.map +1 -0
- package/out/zero-cache/src/config/zero-config.d.ts +1509 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -0
- package/out/zero-cache/src/config/zero-config.js +227 -0
- package/out/zero-cache/src/config/zero-config.js.map +1 -0
- package/out/zero-cache/src/db/lite-tables.d.ts +5 -0
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -0
- package/out/zero-cache/src/db/lite-tables.js +75 -0
- package/out/zero-cache/src/db/lite-tables.js.map +1 -0
- package/out/zero-cache/src/db/migration-lite.d.ts +38 -0
- package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -0
- package/out/zero-cache/src/db/migration-lite.js +161 -0
- package/out/zero-cache/src/db/migration-lite.js.map +1 -0
- package/out/zero-cache/src/db/migration.d.ts +38 -0
- package/out/zero-cache/src/db/migration.d.ts.map +1 -0
- package/out/zero-cache/src/db/migration.js +139 -0
- package/out/zero-cache/src/db/migration.js.map +1 -0
- package/out/zero-cache/src/db/statements.d.ts +31 -0
- package/out/zero-cache/src/db/statements.d.ts.map +1 -0
- package/out/zero-cache/src/db/statements.js +48 -0
- package/out/zero-cache/src/db/statements.js.map +1 -0
- package/out/zero-cache/src/db/transaction-pool.d.ts +187 -0
- package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -0
- package/out/zero-cache/src/db/transaction-pool.js +445 -0
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -0
- package/out/zero-cache/src/server/change-streamer.d.ts +3 -0
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -0
- package/out/zero-cache/src/server/change-streamer.js +30 -0
- package/out/zero-cache/src/server/change-streamer.js.map +1 -0
- package/out/zero-cache/src/server/logging.d.ts +6 -0
- package/out/zero-cache/src/server/logging.d.ts.map +1 -0
- package/out/zero-cache/src/server/logging.js +23 -0
- package/out/zero-cache/src/server/logging.js.map +1 -0
- package/out/zero-cache/src/server/main.d.ts +2 -0
- package/out/zero-cache/src/server/main.d.ts.map +1 -0
- package/out/zero-cache/src/server/main.js +92 -0
- package/out/zero-cache/src/server/main.js.map +1 -0
- package/out/zero-cache/src/server/replicator.d.ts +3 -0
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -0
- package/out/zero-cache/src/server/replicator.js +35 -0
- package/out/zero-cache/src/server/replicator.js.map +1 -0
- package/out/zero-cache/src/server/syncer.d.ts +3 -0
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -0
- package/out/zero-cache/src/server/syncer.js +45 -0
- package/out/zero-cache/src/server/syncer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +23 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +98 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +39 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +212 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +110 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.js +7 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +19 -0
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/forwarder.js +56 -0
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts +14 -0
- package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/change-source.js +206 -0
- package/out/zero-cache/src/services/change-streamer/pg/change-source.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.d.ts +6 -0
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js +192 -0
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/lsn.d.ts +17 -0
- package/out/zero-cache/src/services/change-streamer/pg/lsn.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/lsn.js +17 -0
- package/out/zero-cache/src/services/change-streamer/pg/lsn.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.d.ts +6 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.js +29 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts +79 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js +237 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts +5 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.js +111 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts +26 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.js +185 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.d.ts +11 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.js +86 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/shard-config.d.ts +19 -0
- package/out/zero-cache/src/services/change-streamer/pg/shard-config.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/shard-config.js +2 -0
- package/out/zero-cache/src/services/change-streamer/pg/shard-config.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.d.ts +4 -0
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.js +12 -0
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts +31 -0
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/change.js +2 -0
- package/out/zero-cache/src/services/change-streamer/schema/change.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts +4 -0
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/init.js +10 -0
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +22 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +49 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +22 -0
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/storer.js +157 -0
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +27 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.js +70 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -0
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts +20 -0
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts.map +1 -0
- package/out/zero-cache/src/services/dispatcher/connect-params.js +36 -0
- package/out/zero-cache/src/services/dispatcher/connect-params.js.map +1 -0
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts +19 -0
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts.map +1 -0
- package/out/zero-cache/src/services/dispatcher/dispatcher.js +55 -0
- package/out/zero-cache/src/services/dispatcher/dispatcher.js.map +1 -0
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.d.ts +11 -0
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.d.ts.map +1 -0
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.js +33 -0
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.js.map +1 -0
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts +57 -0
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts.map +1 -0
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +130 -0
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +24 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -0
- package/out/zero-cache/src/services/mutagen/mutagen.js +247 -0
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -0
- package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts +20 -0
- package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts.map +1 -0
- package/out/zero-cache/src/services/mutagen/write-authorizer.js +187 -0
- package/out/zero-cache/src/services/mutagen/write-authorizer.js.map +1 -0
- package/out/zero-cache/src/services/replicator/checkpointer.d.ts +79 -0
- package/out/zero-cache/src/services/replicator/checkpointer.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/checkpointer.js +124 -0
- package/out/zero-cache/src/services/replicator/checkpointer.js.map +1 -0
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +39 -0
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/incremental-sync.js +342 -0
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -0
- package/out/zero-cache/src/services/replicator/notifier.d.ts +30 -0
- package/out/zero-cache/src/services/replicator/notifier.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/notifier.js +54 -0
- package/out/zero-cache/src/services/replicator/notifier.js.map +1 -0
- package/out/zero-cache/src/services/replicator/replicator.d.ts +65 -0
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/replicator.js +27 -0
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +35 -0
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/change-log.js +78 -0
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +25 -0
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +90 -0
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -0
- package/out/zero-cache/src/services/runner.d.ts +21 -0
- package/out/zero-cache/src/services/runner.d.ts.map +1 -0
- package/out/zero-cache/src/services/runner.js +63 -0
- package/out/zero-cache/src/services/runner.js.map +1 -0
- package/out/zero-cache/src/services/running-state.d.ts +56 -0
- package/out/zero-cache/src/services/running-state.d.ts.map +1 -0
- package/out/zero-cache/src/services/running-state.js +106 -0
- package/out/zero-cache/src/services/running-state.js.map +1 -0
- package/out/zero-cache/src/services/service.d.ts +29 -0
- package/out/zero-cache/src/services/service.d.ts.map +1 -0
- package/out/zero-cache/src/services/service.js +2 -0
- package/out/zero-cache/src/services/service.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +53 -0
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/client-handler.js +184 -0
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +44 -0
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +386 -0
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +146 -0
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/cvr.js +446 -0
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/database-storage.d.ts +22 -0
- package/out/zero-cache/src/services/view-syncer/database-storage.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/database-storage.js +129 -0
- package/out/zero-cache/src/services/view-syncer/database-storage.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +103 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +290 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +54 -0
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +181 -0
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.d.ts +4 -0
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.js +12 -0
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +783 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.js +213 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +166 -0
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +374 -0
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +37 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +522 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -0
- package/out/zero-cache/src/types/bigint-json.d.ts +26 -0
- package/out/zero-cache/src/types/bigint-json.d.ts.map +1 -0
- package/out/zero-cache/src/types/bigint-json.js +49 -0
- package/out/zero-cache/src/types/bigint-json.js.map +1 -0
- package/out/zero-cache/src/types/error-for-client.d.ts +7 -0
- package/out/zero-cache/src/types/error-for-client.d.ts.map +1 -0
- package/out/zero-cache/src/types/error-for-client.js +17 -0
- package/out/zero-cache/src/types/error-for-client.js.map +1 -0
- package/out/zero-cache/src/types/lexi-version.d.ts +29 -0
- package/out/zero-cache/src/types/lexi-version.d.ts.map +1 -0
- package/out/zero-cache/src/types/lexi-version.js +36 -0
- package/out/zero-cache/src/types/lexi-version.js.map +1 -0
- package/out/zero-cache/src/types/lite.d.ts +11 -0
- package/out/zero-cache/src/types/lite.d.ts.map +1 -0
- package/out/zero-cache/src/types/lite.js +26 -0
- package/out/zero-cache/src/types/lite.js.map +1 -0
- package/out/zero-cache/src/types/names.d.ts +5 -0
- package/out/zero-cache/src/types/names.d.ts.map +1 -0
- package/out/zero-cache/src/types/names.js +4 -0
- package/out/zero-cache/src/types/names.js.map +1 -0
- package/out/zero-cache/src/types/pg.d.ts +31 -0
- package/out/zero-cache/src/types/pg.d.ts.map +1 -0
- package/out/zero-cache/src/types/pg.js +60 -0
- package/out/zero-cache/src/types/pg.js.map +1 -0
- package/out/zero-cache/src/types/processes.d.ts +57 -0
- package/out/zero-cache/src/types/processes.d.ts.map +1 -0
- package/out/zero-cache/src/types/processes.js +121 -0
- package/out/zero-cache/src/types/processes.js.map +1 -0
- package/out/zero-cache/src/types/row-key.d.ts +37 -0
- package/out/zero-cache/src/types/row-key.d.ts.map +1 -0
- package/out/zero-cache/src/types/row-key.js +64 -0
- package/out/zero-cache/src/types/row-key.js.map +1 -0
- package/out/zero-cache/src/types/satisfies.d.ts +14 -0
- package/out/zero-cache/src/types/satisfies.d.ts.map +1 -0
- package/out/zero-cache/src/types/satisfies.js +2 -0
- package/out/zero-cache/src/types/satisfies.js.map +1 -0
- package/out/zero-cache/src/types/specs.d.ts +29 -0
- package/out/zero-cache/src/types/specs.d.ts.map +1 -0
- package/out/zero-cache/src/types/specs.js +2 -0
- package/out/zero-cache/src/types/specs.js.map +1 -0
- package/out/zero-cache/src/types/sql.d.ts +11 -0
- package/out/zero-cache/src/types/sql.d.ts.map +1 -0
- package/out/zero-cache/src/types/sql.js +15 -0
- package/out/zero-cache/src/types/sql.js.map +1 -0
- package/out/zero-cache/src/types/streams.d.ts +33 -0
- package/out/zero-cache/src/types/streams.d.ts.map +1 -0
- package/out/zero-cache/src/types/streams.js +141 -0
- package/out/zero-cache/src/types/streams.js.map +1 -0
- package/out/zero-cache/src/types/subscription.d.ts +158 -0
- package/out/zero-cache/src/types/subscription.d.ts.map +1 -0
- package/out/zero-cache/src/types/subscription.js +233 -0
- package/out/zero-cache/src/types/subscription.js.map +1 -0
- package/out/zero-cache/src/types/timeout.d.ts +11 -0
- package/out/zero-cache/src/types/timeout.d.ts.map +1 -0
- package/out/zero-cache/src/types/timeout.js +23 -0
- package/out/zero-cache/src/types/timeout.js.map +1 -0
- package/out/zero-cache/src/types/url-params.d.ts +10 -0
- package/out/zero-cache/src/types/url-params.d.ts.map +1 -0
- package/out/zero-cache/src/types/url-params.js +35 -0
- package/out/zero-cache/src/types/url-params.js.map +1 -0
- package/out/zero-cache/src/workers/connection.d.ts +25 -0
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -0
- package/out/zero-cache/src/workers/connection.js +189 -0
- package/out/zero-cache/src/workers/connection.js.map +1 -0
- package/out/zero-cache/src/workers/replicator.d.ts +17 -0
- package/out/zero-cache/src/workers/replicator.d.ts.map +1 -0
- package/out/zero-cache/src/workers/replicator.js +105 -0
- package/out/zero-cache/src/workers/replicator.js.map +1 -0
- package/out/zero-cache/src/workers/syncer.d.ts +28 -0
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -0
- package/out/zero-cache/src/workers/syncer.js +72 -0
- package/out/zero-cache/src/workers/syncer.js.map +1 -0
- package/out/zero-client/src/client/context.d.ts +23 -0
- package/out/zero-client/src/client/context.d.ts.map +1 -0
- package/out/zero-client/src/client/crud.d.ts +52 -0
- package/out/zero-client/src/client/crud.d.ts.map +1 -0
- package/out/zero-client/src/client/enable-analytics.d.ts +3 -0
- package/out/zero-client/src/client/enable-analytics.d.ts.map +1 -0
- package/out/zero-client/src/client/http-string.d.ts +7 -0
- package/out/zero-client/src/client/http-string.d.ts.map +1 -0
- package/out/zero-client/src/client/keys.d.ts +11 -0
- package/out/zero-client/src/client/keys.d.ts.map +1 -0
- package/out/zero-client/src/client/log-options.d.ts +12 -0
- package/out/zero-client/src/client/log-options.d.ts.map +1 -0
- package/out/zero-client/src/client/metrics.d.ts +115 -0
- package/out/zero-client/src/client/metrics.d.ts.map +1 -0
- package/out/zero-client/src/client/options.d.ts +94 -0
- package/out/zero-client/src/client/options.d.ts.map +1 -0
- package/out/zero-client/src/client/query-manager.d.ts +16 -0
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -0
- package/out/zero-client/src/client/reload-error-handler.d.ts +5 -0
- package/out/zero-client/src/client/reload-error-handler.d.ts.map +1 -0
- package/out/zero-client/src/client/replicache-types.d.ts +48 -0
- package/out/zero-client/src/client/replicache-types.d.ts.map +1 -0
- package/out/zero-client/src/client/server-error.d.ts +12 -0
- package/out/zero-client/src/client/server-error.d.ts.map +1 -0
- package/out/zero-client/src/client/server-option.d.ts +3 -0
- package/out/zero-client/src/client/server-option.d.ts.map +1 -0
- package/out/zero-client/src/client/version.d.ts +5 -0
- package/out/zero-client/src/client/version.d.ts.map +1 -0
- package/out/zero-client/src/client/zero-poke-handler.d.ts +28 -0
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -0
- package/out/zero-client/src/client/zero.d.ts +183 -0
- package/out/zero-client/src/client/zero.d.ts.map +1 -0
- package/out/zero-client/src/mod.d.ts +9 -0
- package/out/zero-client/src/mod.d.ts.map +1 -0
- package/out/zero-client/src/util/nanoid.d.ts +2 -0
- package/out/zero-client/src/util/nanoid.d.ts.map +1 -0
- package/out/zero-client/src/util/socket.d.ts +3 -0
- package/out/zero-client/src/util/socket.d.ts.map +1 -0
- package/out/zero-protocol/src/ast.d.ts +69 -0
- package/out/zero-protocol/src/ast.d.ts.map +1 -0
- package/out/zero-protocol/src/ast.js +64 -0
- package/out/zero-protocol/src/ast.js.map +1 -0
- package/out/zero-protocol/src/change-desired-queries.d.ts +71 -0
- package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -0
- package/out/zero-protocol/src/change-desired-queries.js +10 -0
- package/out/zero-protocol/src/change-desired-queries.js.map +1 -0
- package/out/zero-protocol/src/clients-patch.d.ts +37 -0
- package/out/zero-protocol/src/clients-patch.d.ts.map +1 -0
- package/out/zero-protocol/src/clients-patch.js +15 -0
- package/out/zero-protocol/src/clients-patch.js.map +1 -0
- package/out/zero-protocol/src/connect.d.ts +88 -0
- package/out/zero-protocol/src/connect.d.ts.map +1 -0
- package/out/zero-protocol/src/connect.js +25 -0
- package/out/zero-protocol/src/connect.js.map +1 -0
- package/out/zero-protocol/src/delete-clients.d.ts +11 -0
- package/out/zero-protocol/src/delete-clients.d.ts.map +1 -0
- package/out/zero-protocol/src/delete-clients.js +9 -0
- package/out/zero-protocol/src/delete-clients.js.map +1 -0
- package/out/zero-protocol/src/down.d.ts +110 -0
- package/out/zero-protocol/src/down.d.ts.map +1 -0
- package/out/zero-protocol/src/down.js +8 -0
- package/out/zero-protocol/src/down.js.map +1 -0
- package/out/zero-protocol/src/entities-patch.d.ts +66 -0
- package/out/zero-protocol/src/entities-patch.d.ts.map +1 -0
- package/out/zero-protocol/src/entities-patch.js +27 -0
- package/out/zero-protocol/src/entities-patch.js.map +1 -0
- package/out/zero-protocol/src/entity.d.ts +9 -0
- package/out/zero-protocol/src/entity.d.ts.map +1 -0
- package/out/zero-protocol/src/entity.js +8 -0
- package/out/zero-protocol/src/entity.js.map +1 -0
- package/out/zero-protocol/src/error.d.ts +19 -0
- package/out/zero-protocol/src/error.d.ts.map +1 -0
- package/out/zero-protocol/src/error.js +26 -0
- package/out/zero-protocol/src/error.js.map +1 -0
- package/out/zero-protocol/src/mod.d.ts +16 -0
- package/out/zero-protocol/src/mod.d.ts.map +1 -0
- package/out/zero-protocol/src/mod.js +16 -0
- package/out/zero-protocol/src/mod.js.map +1 -0
- package/out/zero-protocol/src/ping.d.ts +6 -0
- package/out/zero-protocol/src/ping.d.ts.map +1 -0
- package/out/zero-protocol/src/ping.js +4 -0
- package/out/zero-protocol/src/ping.js.map +1 -0
- package/out/zero-protocol/src/poke.d.ts +236 -0
- package/out/zero-protocol/src/poke.d.ts.map +1 -0
- package/out/zero-protocol/src/poke.js +69 -0
- package/out/zero-protocol/src/poke.js.map +1 -0
- package/out/zero-protocol/src/pong.d.ts +6 -0
- package/out/zero-protocol/src/pong.d.ts.map +1 -0
- package/out/zero-protocol/src/pong.js +4 -0
- package/out/zero-protocol/src/pong.js.map +1 -0
- package/out/zero-protocol/src/pull.d.ts +26 -0
- package/out/zero-protocol/src/pull.d.ts.map +1 -0
- package/out/zero-protocol/src/pull.js +24 -0
- package/out/zero-protocol/src/pull.js.map +1 -0
- package/out/zero-protocol/src/push.d.ts +257 -0
- package/out/zero-protocol/src/push.d.ts.map +1 -0
- package/out/zero-protocol/src/push.js +77 -0
- package/out/zero-protocol/src/push.js.map +1 -0
- package/out/zero-protocol/src/queries-patch.d.ts +103 -0
- package/out/zero-protocol/src/queries-patch.d.ts.map +1 -0
- package/out/zero-protocol/src/queries-patch.js +17 -0
- package/out/zero-protocol/src/queries-patch.js.map +1 -0
- package/out/zero-protocol/src/up.d.ts +116 -0
- package/out/zero-protocol/src/up.d.ts.map +1 -0
- package/out/zero-protocol/src/up.js +9 -0
- package/out/zero-protocol/src/up.js.map +1 -0
- package/out/zero-protocol/src/version.d.ts +6 -0
- package/out/zero-protocol/src/version.d.ts.map +1 -0
- package/out/zero-protocol/src/version.js +4 -0
- package/out/zero-protocol/src/version.js.map +1 -0
- package/out/zero-react/src/mod.d.ts +3 -0
- package/out/zero-react/src/mod.d.ts.map +1 -0
- package/out/zero-react/src/use-query.d.ts +3 -0
- package/out/zero-react/src/use-query.d.ts.map +1 -0
- package/out/zero-react/src/use-zero.d.ts +8 -0
- package/out/zero-react/src/use-zero.d.ts.map +1 -0
- package/out/zero.js +7000 -0
- package/out/zero.js.map +7 -0
- package/out/zql/src/zql/ast/ast.d.ts +84 -0
- package/out/zql/src/zql/ast/ast.d.ts.map +1 -0
- package/out/zql/src/zql/ast/ast.js +54 -0
- package/out/zql/src/zql/ast/ast.js.map +1 -0
- package/out/zql/src/zql/builder/builder.d.ts +56 -0
- package/out/zql/src/zql/builder/builder.d.ts.map +1 -0
- package/out/zql/src/zql/builder/builder.js +112 -0
- package/out/zql/src/zql/builder/builder.js.map +1 -0
- package/out/zql/src/zql/builder/error.d.ts +3 -0
- package/out/zql/src/zql/builder/error.d.ts.map +1 -0
- package/out/zql/src/zql/builder/error.js +3 -0
- package/out/zql/src/zql/builder/error.js.map +1 -0
- package/out/zql/src/zql/builder/filter.d.ts +6 -0
- package/out/zql/src/zql/builder/filter.d.ts.map +1 -0
- package/out/zql/src/zql/builder/filter.js +53 -0
- package/out/zql/src/zql/builder/filter.js.map +1 -0
- package/out/zql/src/zql/builder/like.d.ts +3 -0
- package/out/zql/src/zql/builder/like.d.ts.map +1 -0
- package/out/zql/src/zql/builder/like.js +60 -0
- package/out/zql/src/zql/builder/like.js.map +1 -0
- package/out/zql/src/zql/ivm/array-view.d.ts +42 -0
- package/out/zql/src/zql/ivm/array-view.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/change.d.ts +44 -0
- package/out/zql/src/zql/ivm/change.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/change.js +2 -0
- package/out/zql/src/zql/ivm/change.js.map +1 -0
- package/out/zql/src/zql/ivm/data.d.ts +72 -0
- package/out/zql/src/zql/ivm/data.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/data.js +84 -0
- package/out/zql/src/zql/ivm/data.js.map +1 -0
- package/out/zql/src/zql/ivm/filter.d.ts +27 -0
- package/out/zql/src/zql/ivm/filter.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/filter.js +60 -0
- package/out/zql/src/zql/ivm/filter.js.map +1 -0
- package/out/zql/src/zql/ivm/join.d.ts +37 -0
- package/out/zql/src/zql/ivm/join.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/join.js +228 -0
- package/out/zql/src/zql/ivm/join.js.map +1 -0
- package/out/zql/src/zql/ivm/lookahead-iterator.d.ts +13 -0
- package/out/zql/src/zql/ivm/lookahead-iterator.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/lookahead-iterator.js +45 -0
- package/out/zql/src/zql/ivm/lookahead-iterator.js.map +1 -0
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.d.ts +10 -0
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.js +34 -0
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.js.map +1 -0
- package/out/zql/src/zql/ivm/memory-source.d.ts +65 -0
- package/out/zql/src/zql/ivm/memory-source.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/memory-source.js +508 -0
- package/out/zql/src/zql/ivm/memory-source.js.map +1 -0
- package/out/zql/src/zql/ivm/memory-storage.d.ts +18 -0
- package/out/zql/src/zql/ivm/memory-storage.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/operator.d.ts +89 -0
- package/out/zql/src/zql/ivm/operator.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/operator.js +2 -0
- package/out/zql/src/zql/ivm/operator.js.map +1 -0
- package/out/zql/src/zql/ivm/schema.d.ts +29 -0
- package/out/zql/src/zql/ivm/schema.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/schema.js +3 -0
- package/out/zql/src/zql/ivm/schema.js.map +1 -0
- package/out/zql/src/zql/ivm/skip.d.ts +24 -0
- package/out/zql/src/zql/ivm/skip.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/skip.js +113 -0
- package/out/zql/src/zql/ivm/skip.js.map +1 -0
- package/out/zql/src/zql/ivm/source.d.ts +57 -0
- package/out/zql/src/zql/ivm/source.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/source.js +2 -0
- package/out/zql/src/zql/ivm/source.js.map +1 -0
- package/out/zql/src/zql/ivm/stream.d.ts +11 -0
- package/out/zql/src/zql/ivm/stream.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/stream.js +19 -0
- package/out/zql/src/zql/ivm/stream.js.map +1 -0
- package/out/zql/src/zql/ivm/take.d.ts +24 -0
- package/out/zql/src/zql/ivm/take.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/take.js +453 -0
- package/out/zql/src/zql/ivm/take.js.map +1 -0
- package/out/zql/src/zql/query/query-impl.d.ts +45 -0
- package/out/zql/src/zql/query/query-impl.d.ts.map +1 -0
- package/out/zql/src/zql/query/query.d.ts +130 -0
- package/out/zql/src/zql/query/query.d.ts.map +1 -0
- package/out/zql/src/zql/query/schema.d.ts +53 -0
- package/out/zql/src/zql/query/schema.d.ts.map +1 -0
- package/out/zql/src/zql/query/typed-view.d.ts +10 -0
- package/out/zql/src/zql/query/typed-view.d.ts.map +1 -0
- package/out/zqlite/src/db.d.ts +23 -0
- package/out/zqlite/src/db.d.ts.map +1 -0
- package/out/zqlite/src/db.js +117 -0
- package/out/zqlite/src/db.js.map +1 -0
- package/out/zqlite/src/internal/sql.d.ts +9 -0
- package/out/zqlite/src/internal/sql.d.ts.map +1 -0
- package/out/zqlite/src/internal/sql.js +14 -0
- package/out/zqlite/src/internal/sql.js.map +1 -0
- package/out/zqlite/src/internal/statement-cache.d.ts +67 -0
- package/out/zqlite/src/internal/statement-cache.d.ts.map +1 -0
- package/out/zqlite/src/internal/statement-cache.js +119 -0
- package/out/zqlite/src/internal/statement-cache.js.map +1 -0
- package/out/zqlite/src/table-source.d.ts +43 -0
- package/out/zqlite/src/table-source.d.ts.map +1 -0
- package/out/zqlite/src/table-source.js +393 -0
- package/out/zqlite/src/table-source.js.map +1 -0
- package/package.json +79 -0
- package/tool/install-sqlite3.js +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicator.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/replicator.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAQ/B,wBAA8B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,iBA+BxE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { pid } from 'node:process';
|
|
2
|
+
import { assert } from '../../../shared/src/asserts.js';
|
|
3
|
+
import { must } from '../../../shared/src/must.js';
|
|
4
|
+
import { getZeroConfig } from '../config/zero-config.js';
|
|
5
|
+
import { ChangeStreamerHttpClient } from '../services/change-streamer/change-streamer-http.js';
|
|
6
|
+
import { NULL_CHECKPOINTER } from '../services/replicator/checkpointer.js';
|
|
7
|
+
import { ReplicatorService } from '../services/replicator/replicator.js';
|
|
8
|
+
import { runOrExit } from '../services/runner.js';
|
|
9
|
+
import { parentWorker, singleProcessMode, } from '../types/processes.js';
|
|
10
|
+
import { setUpMessageHandlers, setupReplica, } from '../workers/replicator.js';
|
|
11
|
+
import { createLogContext } from './logging.js';
|
|
12
|
+
export default async function runWorker(parent, ...args) {
|
|
13
|
+
const config = await getZeroConfig();
|
|
14
|
+
assert(args.length > 0, `replicator mode not specified`);
|
|
15
|
+
const mode = args[0];
|
|
16
|
+
const workerName = `${mode === 'backup' ? 'backup' : 'serving'}-replicator`;
|
|
17
|
+
const lc = createLogContext(config.log, { worker: workerName });
|
|
18
|
+
const replica = setupReplica(lc, mode, config.replicaDbFile);
|
|
19
|
+
const changeStreamer = config.changeStreamerUri
|
|
20
|
+
? new ChangeStreamerHttpClient(lc, config.changeStreamerUri)
|
|
21
|
+
: new ChangeStreamerHttpClient(lc);
|
|
22
|
+
const replicator = new ReplicatorService(lc, `${workerName}-${pid}`, changeStreamer, replica, NULL_CHECKPOINTER);
|
|
23
|
+
setUpMessageHandlers(lc, replicator, parent);
|
|
24
|
+
void runOrExit(lc, replicator);
|
|
25
|
+
// Signal readiness once the first ReplicaVersionReady notification is received.
|
|
26
|
+
for await (const _ of replicator.subscribe()) {
|
|
27
|
+
parent.send(['ready', { ready: true }]);
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// fork()
|
|
32
|
+
if (!singleProcessMode()) {
|
|
33
|
+
void runWorker(must(parentWorker), ...process.argv.slice(2));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=replicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicator.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/replicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,cAAc,CAAC;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAC,wBAAwB,EAAC,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAC,iBAAiB,EAAC,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,oBAAoB,EACpB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,GAAG,IAAc;IACvE,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAmB,CAAC;IACvC,MAAM,UAAU,GAAG,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC;IAC5E,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE7D,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB;QAC7C,CAAC,CAAC,IAAI,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAC5D,CAAC,CAAC,IAAI,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACtC,EAAE,EACF,GAAG,UAAU,IAAI,GAAG,EAAE,EACtB,cAAc,EACd,OAAO,EACP,iBAAiB,CAClB,CAAC;IAEF,oBAAoB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAE7C,KAAK,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAE/B,gFAAgF;IAChF,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACtC,MAAM;IACR,CAAC;AACH,CAAC;AAED,SAAS;AACT,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzB,KAAK,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../../../../zero-cache/src/server/syncer.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAK/B,wBAA8B,SAAS,CAAC,MAAM,EAAE,MAAM,iBAoDrD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { tmpdir } from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { pid } from 'node:process';
|
|
4
|
+
import { must } from '../../../shared/src/must.js';
|
|
5
|
+
import { randInt } from '../../../shared/src/rand.js';
|
|
6
|
+
import { getZeroConfig } from '../config/zero-config.js';
|
|
7
|
+
import { MutagenService } from '../services/mutagen/mutagen.js';
|
|
8
|
+
import { DatabaseStorage } from '../services/view-syncer/database-storage.js';
|
|
9
|
+
import { PipelineDriver } from '../services/view-syncer/pipeline-driver.js';
|
|
10
|
+
import { Snapshotter } from '../services/view-syncer/snapshotter.js';
|
|
11
|
+
import { ViewSyncerService } from '../services/view-syncer/view-syncer.js';
|
|
12
|
+
import { pgClient } from '../types/pg.js';
|
|
13
|
+
import { parentWorker, singleProcessMode, } from '../types/processes.js';
|
|
14
|
+
import { Subscription } from '../types/subscription.js';
|
|
15
|
+
import { Syncer } from '../workers/syncer.js';
|
|
16
|
+
import { createLogContext } from './logging.js';
|
|
17
|
+
export default async function runWorker(parent) {
|
|
18
|
+
const config = await getZeroConfig();
|
|
19
|
+
// Consider parameterizing these (in main) based on total number of workers.
|
|
20
|
+
const MAX_CVR_CONNECTIONS = 5;
|
|
21
|
+
const MAX_MUTAGEN_CONNECTIONS = 5;
|
|
22
|
+
const lc = createLogContext(config.log, { worker: 'syncer' });
|
|
23
|
+
const cvrDB = pgClient(lc, config.cvrDbUri, {
|
|
24
|
+
max: MAX_CVR_CONNECTIONS,
|
|
25
|
+
});
|
|
26
|
+
const upstreamDB = pgClient(lc, config.upstreamUri, {
|
|
27
|
+
max: MAX_MUTAGEN_CONNECTIONS,
|
|
28
|
+
});
|
|
29
|
+
const dbWarmup = Promise.allSettled([
|
|
30
|
+
...Array.from({ length: MAX_CVR_CONNECTIONS }, () => cvrDB `SELECT 1`.simple().execute()),
|
|
31
|
+
...Array.from({ length: MAX_MUTAGEN_CONNECTIONS }, () => upstreamDB `SELECT 1`.simple().execute()),
|
|
32
|
+
]);
|
|
33
|
+
const tmpDir = config.storageDbTmpDir ?? tmpdir();
|
|
34
|
+
const operatorStorage = DatabaseStorage.create(lc, path.join(tmpDir, `sync-worker-${pid}-${randInt(1000000, 9999999)}`));
|
|
35
|
+
const viewSyncerFactory = (id, sub) => new ViewSyncerService(lc, id, cvrDB, new PipelineDriver(lc, new Snapshotter(lc, config.replicaDbFile), operatorStorage.createClientGroupStorage(id)), sub);
|
|
36
|
+
const mutagenFactory = (id) => new MutagenService(lc, config.shard.id, id, upstreamDB, config);
|
|
37
|
+
new Syncer(lc, config, viewSyncerFactory, mutagenFactory, parent).run();
|
|
38
|
+
await dbWarmup;
|
|
39
|
+
parent.send(['ready', { ready: true }]);
|
|
40
|
+
}
|
|
41
|
+
// fork()
|
|
42
|
+
if (!singleProcessMode()) {
|
|
43
|
+
void runWorker(must(parentWorker));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=syncer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncer.js","sourceRoot":"","sources":["../../../../../zero-cache/src/server/syncer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import { type Source } from '../../../../zero-cache/src/types/streams.js';
|
|
3
|
+
import type { Service } from '../service.js';
|
|
4
|
+
import type { ChangeStreamer, Downstream, SubscriberContext } from './change-streamer.js';
|
|
5
|
+
export declare const CHANGES_URL_PATTERN = "/api/replication/:version/changes";
|
|
6
|
+
export declare const DEFAULT_PORT = 2999;
|
|
7
|
+
export type Options = {
|
|
8
|
+
port: number;
|
|
9
|
+
};
|
|
10
|
+
export declare class ChangeStreamerHttpServer implements Service {
|
|
11
|
+
#private;
|
|
12
|
+
readonly id = "change-streamer-http-server";
|
|
13
|
+
constructor(lc: LogContext, delegate: ChangeStreamer, opts?: Partial<Options>);
|
|
14
|
+
start(): Promise<void>;
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
stop(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export declare class ChangeStreamerHttpClient implements ChangeStreamer {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(lc: LogContext, uriOrPort?: string | number);
|
|
21
|
+
subscribe(ctx: SubscriberContext): Source<Downstream>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=change-streamer-http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-streamer-http.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/change-streamer-http.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAS5C,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,mBAAmB,sCAAsC,CAAC;AAEvE,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,wBAAyB,YAAW,OAAO;;IACtD,QAAQ,CAAC,EAAE,iCAAiC;gBAQ1C,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE,OAAO,CAAC,OAAO,CAAM;IAavB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B;AAED,qBAAa,wBAAyB,YAAW,cAAc;;gBAIjD,EAAE,EAAE,UAAU,EAAE,SAAS,GAAE,MAAM,GAAG,MAAqB;IASrE,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC;CAMtD"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import websocket from '@fastify/websocket';
|
|
2
|
+
import { LogContext } from '@rocicorp/logger';
|
|
3
|
+
import Fastify, {} from 'fastify';
|
|
4
|
+
import * as v from '../../../../shared/src/valita.js';
|
|
5
|
+
import WebSocket from 'ws';
|
|
6
|
+
import { jsonValueSchema } from '../../../../zero-cache/src/types/bigint-json.js';
|
|
7
|
+
import { streamIn, streamOut, } from '../../../../zero-cache/src/types/streams.js';
|
|
8
|
+
import { URLParams } from '../../../../zero-cache/src/types/url-params.js';
|
|
9
|
+
import { RunningState } from '../running-state.js';
|
|
10
|
+
export const CHANGES_URL_PATTERN = '/api/replication/:version/changes';
|
|
11
|
+
export const DEFAULT_PORT = 2999;
|
|
12
|
+
export class ChangeStreamerHttpServer {
|
|
13
|
+
id = 'change-streamer-http-server';
|
|
14
|
+
#lc;
|
|
15
|
+
#delegate;
|
|
16
|
+
#fastify;
|
|
17
|
+
#port;
|
|
18
|
+
#state = new RunningState(this.id);
|
|
19
|
+
constructor(lc, delegate, opts = {}) {
|
|
20
|
+
const { port = DEFAULT_PORT } = opts;
|
|
21
|
+
this.#lc = lc.withContext('component', this.id);
|
|
22
|
+
this.#delegate = delegate;
|
|
23
|
+
this.#fastify = Fastify();
|
|
24
|
+
this.#port = port;
|
|
25
|
+
}
|
|
26
|
+
// start() is used in unit tests.
|
|
27
|
+
// run() is the lifecycle method called by the ServiceRunner.
|
|
28
|
+
async start() {
|
|
29
|
+
await this.#fastify.register(websocket);
|
|
30
|
+
this.#fastify.get('/', (_req, res) => res.send('OK'));
|
|
31
|
+
this.#fastify.addHook('preValidation', this.#checkParams);
|
|
32
|
+
this.#fastify.get(CHANGES_URL_PATTERN, { websocket: true }, this.#subscribe);
|
|
33
|
+
const address = await this.#fastify.listen({ port: this.#port });
|
|
34
|
+
this.#lc.info?.(`Server listening at ${address}`);
|
|
35
|
+
}
|
|
36
|
+
async run() {
|
|
37
|
+
await this.start();
|
|
38
|
+
await this.#state.stopped();
|
|
39
|
+
}
|
|
40
|
+
// Avoid upgrading to a websocket if the params are bad.
|
|
41
|
+
#checkParams = async (req, reply) => {
|
|
42
|
+
if (req.url === '/' || req.url.startsWith('/?')) {
|
|
43
|
+
return; // Health check
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
getSubscriberContext(req);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
this.#lc.error?.('bad request', String(e));
|
|
50
|
+
await reply.code(400).send(e instanceof Error ? e.message : String(e));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
#subscribe = async (ws, req) => {
|
|
54
|
+
const ctx = getSubscriberContext(req); // #checkSubscribe guarantees this.
|
|
55
|
+
const downstream = this.#delegate.subscribe(ctx);
|
|
56
|
+
await streamOut(this.#lc, downstream, ws);
|
|
57
|
+
};
|
|
58
|
+
async stop() {
|
|
59
|
+
await this.#fastify.close();
|
|
60
|
+
this.#state.stop(this.#lc);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export class ChangeStreamerHttpClient {
|
|
64
|
+
#lc;
|
|
65
|
+
#uri;
|
|
66
|
+
constructor(lc, uriOrPort = DEFAULT_PORT) {
|
|
67
|
+
this.#lc = lc;
|
|
68
|
+
this.#uri =
|
|
69
|
+
typeof uriOrPort === 'string'
|
|
70
|
+
? uriOrPort
|
|
71
|
+
: `ws://localhost:${uriOrPort}` +
|
|
72
|
+
CHANGES_URL_PATTERN.replace(':version', 'v0');
|
|
73
|
+
}
|
|
74
|
+
subscribe(ctx) {
|
|
75
|
+
const params = getParams(ctx);
|
|
76
|
+
const ws = new WebSocket(this.#uri + `?${params.toString()}`);
|
|
77
|
+
return streamIn(this.#lc, ws, downstreamSchema);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// TODO: Define this more precisely.
|
|
81
|
+
const downstreamSchema = v.array(jsonValueSchema);
|
|
82
|
+
function getSubscriberContext(req) {
|
|
83
|
+
const url = new URL(req.url, req.headers.origin ?? 'http://localhost');
|
|
84
|
+
const params = new URLParams(url);
|
|
85
|
+
return {
|
|
86
|
+
id: params.get('id', true),
|
|
87
|
+
replicaVersion: params.get('replicaVersion', true),
|
|
88
|
+
watermark: params.get('watermark', true),
|
|
89
|
+
initial: params.getBoolean('initial'),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function getParams(ctx) {
|
|
93
|
+
return new URLSearchParams({
|
|
94
|
+
...ctx,
|
|
95
|
+
initial: ctx.initial ? 'true' : 'false',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=change-streamer-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-streamer-http.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/change-streamer-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import type { PostgresDB } from '../../../../zero-cache/src/types/pg.js';
|
|
3
|
+
import type { Sink, Source } from '../../../../zero-cache/src/types/streams.js';
|
|
4
|
+
import { type ChangeStreamerService, type Commit, type DownstreamChange } from './change-streamer.js';
|
|
5
|
+
import { type ReplicationConfig } from './schema/tables.js';
|
|
6
|
+
/**
|
|
7
|
+
* Performs initialization and schema migrations to initialize a ChangeStreamerImpl.
|
|
8
|
+
*/
|
|
9
|
+
export declare function initializeStreamer(lc: LogContext, changeDB: PostgresDB, changeSource: ChangeSource, replicationConfig: ReplicationConfig): Promise<ChangeStreamerService>;
|
|
10
|
+
/**
|
|
11
|
+
* Internally all Downstream messages (not just commits) are given a watermark.
|
|
12
|
+
* These are used for internal ordering for:
|
|
13
|
+
* 1. Replaying new changes in the Storer
|
|
14
|
+
* 2. Filtering old changes in the Subscriber
|
|
15
|
+
*
|
|
16
|
+
* However, only the watermark for `Commit` messages are exposed to
|
|
17
|
+
* subscribers, as that is the only semantically correct watermark to
|
|
18
|
+
* use for tracking a position in a replication stream.
|
|
19
|
+
*/
|
|
20
|
+
export type WatermarkedChange = [watermark: string, DownstreamChange];
|
|
21
|
+
export type ChangeStream = {
|
|
22
|
+
/** The watermark at which the ChangeStream begins (i.e. inclusive). */
|
|
23
|
+
initialWatermark: string;
|
|
24
|
+
changes: Source<DownstreamChange>;
|
|
25
|
+
/**
|
|
26
|
+
* A Sink to push the {@link Commit} messages that have been successfully
|
|
27
|
+
* stored by the {@link Storer}.
|
|
28
|
+
*/
|
|
29
|
+
acks: Sink<Commit>;
|
|
30
|
+
};
|
|
31
|
+
/** Encapsulates an upstream-specific implementation of a stream of Changes. */
|
|
32
|
+
export interface ChangeSource {
|
|
33
|
+
/**
|
|
34
|
+
* Starts a stream of changes starting after the specific watermark,
|
|
35
|
+
* with a corresponding sink for upstream acknowledgements.
|
|
36
|
+
*/
|
|
37
|
+
startStream(afterWatermark: string): Promise<ChangeStream>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=change-streamer-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-streamer-service.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/change-streamer-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,MAAM,EAEX,KAAK,gBAAgB,EAGtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAI5B;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,UAAU,EACpB,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAOhC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG;IACzB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IAEzB,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAElC;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CACpB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5D"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import { oneAfter } from '../../../../zero-cache/src/types/lexi-version.js';
|
|
3
|
+
import { Subscription } from '../../../../zero-cache/src/types/subscription.js';
|
|
4
|
+
import { RunningState } from '../running-state.js';
|
|
5
|
+
import { ErrorType, } from './change-streamer.js';
|
|
6
|
+
import { Forwarder } from './forwarder.js';
|
|
7
|
+
import { initChangeStreamerSchema } from './schema/init.js';
|
|
8
|
+
import { ensureReplicationConfig, } from './schema/tables.js';
|
|
9
|
+
import { Storer } from './storer.js';
|
|
10
|
+
import { Subscriber } from './subscriber.js';
|
|
11
|
+
/**
|
|
12
|
+
* Performs initialization and schema migrations to initialize a ChangeStreamerImpl.
|
|
13
|
+
*/
|
|
14
|
+
export async function initializeStreamer(lc, changeDB, changeSource, replicationConfig) {
|
|
15
|
+
// Make sure the ChangeLog DB is set up.
|
|
16
|
+
await initChangeStreamerSchema(lc, changeDB);
|
|
17
|
+
await ensureReplicationConfig(lc, changeDB, replicationConfig);
|
|
18
|
+
const { replicaVersion } = replicationConfig;
|
|
19
|
+
return new ChangeStreamerImpl(lc, changeDB, replicaVersion, changeSource);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Upstream-agnostic dispatch of messages in a {@link ChangeStream} to a
|
|
23
|
+
* {@link Forwarder} and {@link Storer} to execute the forward-store-ack
|
|
24
|
+
* procedure described in {@link ChangeStreamer}.
|
|
25
|
+
*
|
|
26
|
+
* ### Subscriber Catchup
|
|
27
|
+
*
|
|
28
|
+
* Connecting clients first need to be "caught up" to the current watermark
|
|
29
|
+
* (from stored change log entries) before new entries are forwarded to
|
|
30
|
+
* them. This is non-trivial because the replication stream may be in the
|
|
31
|
+
* middle of a pending streamed Transaction for which some entries have
|
|
32
|
+
* already been forwarded but are not yet committed to the store.
|
|
33
|
+
*
|
|
34
|
+
*
|
|
35
|
+
* ```
|
|
36
|
+
* ------------------------------- - - - - - - - - - - - - - - - - - - -
|
|
37
|
+
* | Historic changes in storage | Pending (streamed) tx | Next tx
|
|
38
|
+
* ------------------------------- - - - - - - - - - - - - - - - - - - -
|
|
39
|
+
* Replication stream
|
|
40
|
+
* > > > > > > > > >
|
|
41
|
+
* ^ ---> required catchup ---> ^
|
|
42
|
+
* Subscriber watermark Subscription begins
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* Preemptively buffering the changes of every pending transaction
|
|
46
|
+
* would be wasteful and consume too much memory for large transactions.
|
|
47
|
+
*
|
|
48
|
+
* Instead, the streamer synchronously dispatches changes and subscriptions
|
|
49
|
+
* to the {@link Forwarder} and the {@link Storer} such that the two
|
|
50
|
+
* components are aligned as to where in the stream the subscription started.
|
|
51
|
+
* The two components then coordinate catchup and handoff via the
|
|
52
|
+
* {@link Subscriber} object with the following algorithm:
|
|
53
|
+
*
|
|
54
|
+
* * If the streamer is in the middle of a pending Transaction, the
|
|
55
|
+
* Subscriber is "queued" on both the Forwarder and the Storer. In this
|
|
56
|
+
* state, new changes are *not* forwarded to the Subscriber, and catchup
|
|
57
|
+
* is not yet executed.
|
|
58
|
+
* * Once the commit message for the pending Transaction is processed
|
|
59
|
+
* by the Storer, it begins catchup on the Subscriber (with a READONLY
|
|
60
|
+
* snapshot so that it does not block subsequent storage operations).
|
|
61
|
+
* This catchup is thus guaranteed to load the change log entries of
|
|
62
|
+
* that last Transaction.
|
|
63
|
+
* * When the Forwarder processes that same commit message, it moves the
|
|
64
|
+
* Subscriber from the "queued" to the "active" set of clients such that
|
|
65
|
+
* the Subscriber begins receiving new changes, starting from the next
|
|
66
|
+
* Transaction.
|
|
67
|
+
* * The Subscriber does not forward those changes, however, if its catchup
|
|
68
|
+
* is not complete. Until then, it buffers the changes in memory.
|
|
69
|
+
* * Once catchup is complete, the buffered changes are immediately sent
|
|
70
|
+
* and the Subscriber henceforth forwards changes as they are received.
|
|
71
|
+
*
|
|
72
|
+
* In the (common) case where the streamer is not in the middle of a pending
|
|
73
|
+
* transaction when a subscription begins, the Storer begins catchup
|
|
74
|
+
* immediately and the Forwarder directly adds the Subscriber to its active
|
|
75
|
+
* set. However, the Subscriber still buffers any forwarded messages until
|
|
76
|
+
* its catchup is complete.
|
|
77
|
+
*
|
|
78
|
+
* ### Watermarks and ordering
|
|
79
|
+
*
|
|
80
|
+
* The ChangeStreamerService depends on its {@link ChangeSource} to send
|
|
81
|
+
* changes in contiguous [`begin`, `data` ..., `data`, `commit`] sequences
|
|
82
|
+
* in commit order. This follows Postgres's Logical Replication Protocol
|
|
83
|
+
* Message Flow:
|
|
84
|
+
*
|
|
85
|
+
* https://www.postgresql.org/docs/16/protocol-logical-replication.html#PROTOCOL-LOGICAL-MESSAGES-FLOW
|
|
86
|
+
*
|
|
87
|
+
* > The logical replication protocol sends individual transactions one by one.
|
|
88
|
+
* > This means that all messages between a pair of Begin and Commit messages belong to the same transaction.
|
|
89
|
+
*
|
|
90
|
+
* In order to correctly replay (new) and filter (old) messages to subscribers
|
|
91
|
+
* at different points in the replication stream, these changes must be assigned
|
|
92
|
+
* watermarks such that they preserve the order in which they were received
|
|
93
|
+
* from the ChangeSource.
|
|
94
|
+
*
|
|
95
|
+
* A previous implementation incorrectly derived these watermarks from the Postgres
|
|
96
|
+
* Log Sequence Numbers (LSN) of each message. However, LSNs from concurrent,
|
|
97
|
+
* non-conflicting transactions can overlap, which can result in a `begin` message
|
|
98
|
+
* with an earlier LSN arriving after a `commit` message. For example, the
|
|
99
|
+
* changes for these transactions:
|
|
100
|
+
*
|
|
101
|
+
* ```
|
|
102
|
+
* LSN: 1 2 3 4 5 6 7 8 9 10
|
|
103
|
+
* tx1: begin data data data commit
|
|
104
|
+
* tx2: begin data data data commit
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* will arrive as:
|
|
108
|
+
*
|
|
109
|
+
* ```
|
|
110
|
+
* begin1, data2, data4, data6, commit8, begin3, data5, data7, data9, commit10
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* Thus, LSN of non-commit messages are not suitable for tracking the sorting
|
|
114
|
+
* order of the replication stream.
|
|
115
|
+
*
|
|
116
|
+
* Instead, the ChangeStreamer uses the following algorithm for deterministic
|
|
117
|
+
* catchup and filtering of changes:
|
|
118
|
+
*
|
|
119
|
+
* * A `commit` message is assigned to a watermark corresponding to its LSN.
|
|
120
|
+
* These are guaranteed to be in commit order by definition.
|
|
121
|
+
*
|
|
122
|
+
* * `begin` and `data` messages are assigned to the watermark of the
|
|
123
|
+
* preceding `commit` (the previous transaction, or the replication
|
|
124
|
+
* slot's starting LSN) plus 1. This guarantees that they will be sorted
|
|
125
|
+
* after the previously commit transaction even if their LSNs came before it.
|
|
126
|
+
* This is referred to as the `preCommitWatermark`.
|
|
127
|
+
*
|
|
128
|
+
* * In the ChangeLog DB, messages have a secondary sort column `pos`, which is
|
|
129
|
+
* the position of the message within its transaction, with the `begin` message
|
|
130
|
+
* starting at `0`. This guarantees that `begin` and `data` messages will be
|
|
131
|
+
* fetched in the original ChangeSource order during catchup.
|
|
132
|
+
*
|
|
133
|
+
* `begin` and `data` messages share the same watermark, but this is sufficient for
|
|
134
|
+
* Subscriber filtering because subscribers only know about the `commit` watermarks
|
|
135
|
+
* exposed in the `Downstream` `Commit` message. The Subscriber object thus compares
|
|
136
|
+
* the internal watermarks of the incoming messages against the commit watermark of
|
|
137
|
+
* the caller, updating the watermark at every `Commit` message that is forwarded.
|
|
138
|
+
*/
|
|
139
|
+
class ChangeStreamerImpl {
|
|
140
|
+
id;
|
|
141
|
+
#lc;
|
|
142
|
+
#replicaVersion;
|
|
143
|
+
#source;
|
|
144
|
+
#storer;
|
|
145
|
+
#forwarder;
|
|
146
|
+
#state = new RunningState('ChangeStreamer');
|
|
147
|
+
#stream;
|
|
148
|
+
constructor(lc, changeDB, replicaVersion, source) {
|
|
149
|
+
this.id = `change-streamer`;
|
|
150
|
+
this.#lc = lc.withContext('component', 'change-streamer');
|
|
151
|
+
this.#replicaVersion = replicaVersion;
|
|
152
|
+
this.#source = source;
|
|
153
|
+
this.#storer = new Storer(lc, changeDB, commit => this.#stream?.acks.push(commit));
|
|
154
|
+
this.#forwarder = new Forwarder();
|
|
155
|
+
}
|
|
156
|
+
async run() {
|
|
157
|
+
this.#storer.run().catch(e => this.stop(e));
|
|
158
|
+
while (this.#state.shouldRun()) {
|
|
159
|
+
let err;
|
|
160
|
+
try {
|
|
161
|
+
const startAfter = await this.#storer.getLastStoredWatermark();
|
|
162
|
+
const stream = await this.#source.startStream(startAfter ?? this.#replicaVersion);
|
|
163
|
+
this.#stream = stream;
|
|
164
|
+
let preCommitWatermark = stream.initialWatermark;
|
|
165
|
+
for await (const change of stream.changes) {
|
|
166
|
+
this.#state.resetBackoff();
|
|
167
|
+
let watermark;
|
|
168
|
+
if (change[0] !== 'commit') {
|
|
169
|
+
watermark = preCommitWatermark;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
watermark = change[2].watermark;
|
|
173
|
+
preCommitWatermark = oneAfter(watermark); // For the next transaction.
|
|
174
|
+
}
|
|
175
|
+
this.#storer.store([watermark, change]);
|
|
176
|
+
this.#forwarder.forward([watermark, change]);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
err = e;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
this.#stream?.changes.cancel();
|
|
184
|
+
this.#stream = undefined;
|
|
185
|
+
}
|
|
186
|
+
await this.#state.backoff(this.#lc, err);
|
|
187
|
+
}
|
|
188
|
+
this.#lc.info?.('ChangeStreamer stopped');
|
|
189
|
+
}
|
|
190
|
+
subscribe(ctx) {
|
|
191
|
+
const { id, watermark } = ctx;
|
|
192
|
+
const downstream = Subscription.create({
|
|
193
|
+
cleanup: () => this.#forwarder.remove(subscriber),
|
|
194
|
+
});
|
|
195
|
+
const subscriber = new Subscriber(id, watermark, downstream);
|
|
196
|
+
if (ctx.replicaVersion !== this.#replicaVersion) {
|
|
197
|
+
subscriber.close(ErrorType.WrongReplicaVersion);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.#lc.debug?.(`adding subscriber ${subscriber.id}`);
|
|
201
|
+
this.#forwarder.add(subscriber);
|
|
202
|
+
this.#storer.catchup(subscriber);
|
|
203
|
+
}
|
|
204
|
+
return downstream;
|
|
205
|
+
}
|
|
206
|
+
async stop(err) {
|
|
207
|
+
this.#state.stop(this.#lc, err);
|
|
208
|
+
this.#stream?.changes.cancel();
|
|
209
|
+
await this.#storer.stop();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=change-streamer-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-streamer-service.js","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/change-streamer-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Source } from '../../../../zero-cache/src/types/streams.js';
|
|
2
|
+
import type { Service } from '../service.js';
|
|
3
|
+
import type { Change, DataChange, MessageBegin, MessageCommit } from './schema/change.js';
|
|
4
|
+
/**
|
|
5
|
+
* The ChangeStreamer is the component between replicators ("subscribers")
|
|
6
|
+
* and a canonical upstream source of changes (e.g. a Postgres logical
|
|
7
|
+
* replication slot). It facilitates multiple subscribers without incurring
|
|
8
|
+
* the associated upstream expense (e.g. PG replication slots are resource
|
|
9
|
+
* intensive) with a "forward-store-ack" procedure.
|
|
10
|
+
*
|
|
11
|
+
* * Changes from the upstream source are immediately **forwarded** to
|
|
12
|
+
* connected subscribers to minimize latency.
|
|
13
|
+
*
|
|
14
|
+
* * They are then **stored** in a separate DB to facilitate catchup
|
|
15
|
+
* of connecting subscribers that are behind.
|
|
16
|
+
*
|
|
17
|
+
* * **Acknowledgements** are sent upstream after they are successfully
|
|
18
|
+
* stored.
|
|
19
|
+
*
|
|
20
|
+
* **Cleanup** (Not yet implemented)
|
|
21
|
+
*
|
|
22
|
+
* Unlike Postgres replication slots, in which the progress of a static
|
|
23
|
+
* subscriber is tracked in the replication slot, the ChangeStreamer
|
|
24
|
+
* supports a dynamic set of subscribers (i.e.. zero-caches) that can
|
|
25
|
+
* can continually change.
|
|
26
|
+
*
|
|
27
|
+
* However, it is not the case that the ChangeStreamer needs to support
|
|
28
|
+
* arbitrarily old subscribers. Because the replica is continually
|
|
29
|
+
* backed up to a global location and used to initialize new subscriber
|
|
30
|
+
* tasks, an initial subscription request from a subscriber constitutes
|
|
31
|
+
* a signal for how "behind" a new subscriber task can be. This is
|
|
32
|
+
* reflected in the {@link SubscriberContext}, which indicates whether
|
|
33
|
+
* the watermark corresponds to an "initial" watermark derived from the
|
|
34
|
+
* replica at task startup.
|
|
35
|
+
*
|
|
36
|
+
* The ChangeStreamer uses a combination of this signal with ACK
|
|
37
|
+
* responses from connected subscribers to determine the watermark up
|
|
38
|
+
* to which it is safe to purge old change log entries.
|
|
39
|
+
*/
|
|
40
|
+
export interface ChangeStreamer {
|
|
41
|
+
/**
|
|
42
|
+
* Subscribes to changes based on the supplied subscriber `ctx`,
|
|
43
|
+
* which indicates the watermark at which the subscriber is up to
|
|
44
|
+
* date.
|
|
45
|
+
*/
|
|
46
|
+
subscribe(ctx: SubscriberContext): Source<Downstream>;
|
|
47
|
+
}
|
|
48
|
+
export type SubscriberContext = {
|
|
49
|
+
/**
|
|
50
|
+
* Subscriber id. This is only used for debugging.
|
|
51
|
+
*/
|
|
52
|
+
id: string;
|
|
53
|
+
/**
|
|
54
|
+
* The ChangeStreamer will return an Error if the subscriber is
|
|
55
|
+
* on a different replica version (i.e. the initial snapshot associated
|
|
56
|
+
* with the replication slot).
|
|
57
|
+
*/
|
|
58
|
+
replicaVersion: string;
|
|
59
|
+
/**
|
|
60
|
+
* The watermark up to which the subscriber is up to date.
|
|
61
|
+
* Only changes after the watermark will be streamed.
|
|
62
|
+
*/
|
|
63
|
+
watermark: string;
|
|
64
|
+
/**
|
|
65
|
+
* Whether this is the first subscription request made by the task,
|
|
66
|
+
* i.e. indicating that the watermark comes from a restored replica
|
|
67
|
+
* backup. The ChangeStreamer uses this to determine which changes
|
|
68
|
+
* are safe to purge from the Storer.
|
|
69
|
+
*/
|
|
70
|
+
initial: boolean;
|
|
71
|
+
};
|
|
72
|
+
export type ChangeEntry = {
|
|
73
|
+
change: Change;
|
|
74
|
+
/**
|
|
75
|
+
* Note that it is technically possible for multiple changes to have
|
|
76
|
+
* the same watermark, but that of a commit is guaranteed to be final,
|
|
77
|
+
* so subscribers should only store the watermark of commit changes.
|
|
78
|
+
*/
|
|
79
|
+
watermark: string;
|
|
80
|
+
};
|
|
81
|
+
export declare const enum ErrorType {
|
|
82
|
+
Unknown = 0,
|
|
83
|
+
WrongReplicaVersion = 1,
|
|
84
|
+
WatermarkTooOld = 2
|
|
85
|
+
}
|
|
86
|
+
export type SubscriptionError = {
|
|
87
|
+
type: ErrorType;
|
|
88
|
+
message?: string | undefined;
|
|
89
|
+
};
|
|
90
|
+
export type Begin = ['begin', MessageBegin];
|
|
91
|
+
export type Data = ['data', DataChange];
|
|
92
|
+
export type Commit = ['commit', MessageCommit, {
|
|
93
|
+
watermark: string;
|
|
94
|
+
}];
|
|
95
|
+
export type Error = ['error', SubscriptionError];
|
|
96
|
+
export type DownstreamChange = Begin | Data | Commit;
|
|
97
|
+
/**
|
|
98
|
+
* A stream of transactions, each starting with a {@link MessageBegin},
|
|
99
|
+
* containing one or more {@link DataChange}s, and ending with a
|
|
100
|
+
* {@link MessageCommit}. The 'commit' tuple includes a `watermark` that
|
|
101
|
+
* should be stored with the committed data and used for resuming
|
|
102
|
+
* a subscription (e.g. in the {@link SubscriberContext}).
|
|
103
|
+
*
|
|
104
|
+
* A {@link SubscriptionError} indicates an unrecoverable error that requires
|
|
105
|
+
* manual intervention (e.g. configuration / operational error).
|
|
106
|
+
*/
|
|
107
|
+
export type Downstream = DownstreamChange | Error;
|
|
108
|
+
export interface ChangeStreamerService extends ChangeStreamer, Service {
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=change-streamer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-streamer.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/change-streamer/change-streamer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IAEH,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,0BAAkB,SAAS;IACzB,OAAO,IAAA;IACP,mBAAmB,IAAA;IACnB,eAAe,IAAA;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC5C,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACxC,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AACpE,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,KAAK,CAAC;AAElD,MAAM,WAAW,qBAAsB,SAAQ,cAAc,EAAE,OAAO;CAAG"}
|