@rocicorp/zero 1.6.0-canary.0 → 1.6.0-canary.10
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/README.md +28 -3
- package/out/_virtual/_@oxc-project_runtime@0.130.0/helpers/usingCtx.js +57 -0
- package/out/_virtual/__vite-optional-peer-dep_pg-native_pg.js +13 -0
- package/out/_virtual/__vite-optional-peer-dep_pg-native_pg.js.map +1 -0
- package/out/_virtual/_rolldown/runtime.js +12 -1
- package/out/node_modules/.pnpm/@opentelemetry_semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js +12 -0
- package/out/node_modules/.pnpm/@opentelemetry_semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js.map +1 -0
- package/out/node_modules/.pnpm/pg-cloudflare@1.3.0/node_modules/pg-cloudflare/dist/empty.js +11 -0
- package/out/node_modules/.pnpm/pg-cloudflare@1.3.0/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
- package/out/node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.js +130 -0
- package/out/node_modules/.pnpm/pg-connection-string@2.12.0/node_modules/pg-connection-string/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg-int8@1.0.1/node_modules/pg-int8/index.js +62 -0
- package/out/node_modules/.pnpm/pg-int8@1.0.1/node_modules/pg-int8/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg-pool@3.13.0_pg@8.20.0/node_modules/pg-pool/index.js +353 -0
- package/out/node_modules/.pnpm/pg-pool@3.13.0_pg@8.20.0/node_modules/pg-pool/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-reader.js +60 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.js +35 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.js +167 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/messages.js.map +1 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.js +288 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/parser.js.map +1 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.js +177 -0
- package/out/node_modules/.pnpm/pg-protocol@1.13.0/node_modules/pg-protocol/dist/serializer.js.map +1 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.js +46 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/arrayParser.js +16 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/arrayParser.js.map +1 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/binaryParsers.js +165 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/binaryParsers.js.map +1 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/builtins.js +81 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/builtins.js.map +1 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/textParsers.js +167 -0
- package/out/node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/lib/textParsers.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/esm/index.js +19 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/esm/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/client.js +508 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/client.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection-parameters.js +104 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection-parameters.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection.js +160 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/connection.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/cert-signatures.js +97 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/cert-signatures.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/sasl.js +131 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/sasl.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-legacy.js +39 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-legacy.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-webcrypto.js +89 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils-webcrypto.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils.js +13 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/crypto/utils.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/defaults.js +46 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/defaults.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/index.js +71 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/client.js +226 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/client.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/index.js +11 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/index.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/query.js +117 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/native/query.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/query.js +151 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/query.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/result.js +76 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/result.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/stream.js +73 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/stream.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/type-overrides.js +35 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/type-overrides.js.map +1 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/utils.js +118 -0
- package/out/node_modules/.pnpm/pg@8.20.0/node_modules/pg/lib/utils.js.map +1 -0
- package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/helper.js +147 -0
- package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/helper.js.map +1 -0
- package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/index.js +21 -0
- package/out/node_modules/.pnpm/pgpass@1.0.5/node_modules/pgpass/lib/index.js.map +1 -0
- package/out/node_modules/.pnpm/postgres-array@2.0.0/node_modules/postgres-array/index.js +84 -0
- package/out/node_modules/.pnpm/postgres-array@2.0.0/node_modules/postgres-array/index.js.map +1 -0
- package/out/node_modules/.pnpm/postgres-bytea@1.0.1/node_modules/postgres-bytea/index.js +28 -0
- package/out/node_modules/.pnpm/postgres-bytea@1.0.1/node_modules/postgres-bytea/index.js.map +1 -0
- package/out/node_modules/.pnpm/postgres-date@1.0.7/node_modules/postgres-date/index.js +65 -0
- package/out/node_modules/.pnpm/postgres-date@1.0.7/node_modules/postgres-date/index.js.map +1 -0
- package/out/node_modules/.pnpm/postgres-interval@1.2.0/node_modules/postgres-interval/index.js +107 -0
- package/out/node_modules/.pnpm/postgres-interval@1.2.0/node_modules/postgres-interval/index.js.map +1 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js +696 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js +44 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.development.js +1585 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.development.js.map +1 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js +329 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js.map +1 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/index.js +13 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/index.js.map +1 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js +13 -0
- package/out/node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js.map +1 -0
- package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/dist/server.js +131 -0
- package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/dist/server.js.map +1 -0
- package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/store/dist/server.js +96 -0
- package/out/node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/store/dist/server.js.map +1 -0
- package/out/node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js +95 -0
- package/out/node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js.map +1 -0
- package/out/node_modules/.pnpm/xtend@4.0.2/node_modules/xtend/mutable.js +18 -0
- package/out/node_modules/.pnpm/xtend@4.0.2/node_modules/xtend/mutable.js.map +1 -0
- package/out/packages/analyze-query/src/analyze-cli.js +288 -0
- package/out/packages/analyze-query/src/analyze-cli.js.map +1 -0
- package/out/packages/analyze-query/src/bin-analyze.js +282 -0
- package/out/packages/analyze-query/src/bin-analyze.js.map +1 -0
- package/out/packages/analyze-query/src/bin-transform.js.map +1 -0
- package/out/packages/ast-to-zql/src/ast-to-zql.js.map +1 -0
- package/out/packages/ast-to-zql/src/bin.js.map +1 -0
- package/out/packages/ast-to-zql/src/format.js.map +1 -0
- package/out/packages/datadog/src/datadog-log-sink.js.map +1 -0
- package/out/packages/otel/src/enabled.js.map +1 -0
- package/out/packages/otel/src/log-options.js.map +1 -0
- package/out/packages/otel/src/maybe-time.js.map +1 -0
- package/out/packages/otel/src/span.js.map +1 -0
- package/out/packages/otel/src/version.js.map +1 -0
- package/out/packages/replicache/src/async-iterable-to-array.js.map +1 -0
- package/out/packages/replicache/src/bg-interval.js.map +1 -0
- package/out/packages/replicache/src/btree/diff.js.map +1 -0
- package/out/packages/replicache/src/btree/node.js.map +1 -0
- package/out/packages/replicache/src/btree/read.js.map +1 -0
- package/out/packages/replicache/src/btree/splice.js.map +1 -0
- package/out/packages/replicache/src/btree/write.js +191 -0
- package/out/packages/replicache/src/btree/write.js.map +1 -0
- package/out/packages/replicache/src/call-default-fetch.js.map +1 -0
- package/out/packages/replicache/src/connection-loop-delegates.js.map +1 -0
- package/out/packages/replicache/src/connection-loop.js.map +1 -0
- package/out/packages/replicache/src/cookies.js.map +1 -0
- package/out/packages/replicache/src/dag/chunk.js.map +1 -0
- package/out/packages/replicache/src/dag/gc.js.map +1 -0
- package/out/packages/replicache/src/dag/key.js.map +1 -0
- package/out/packages/replicache/src/dag/lazy-store.js.map +1 -0
- package/out/packages/replicache/src/dag/store-impl.js +157 -0
- package/out/packages/replicache/src/dag/store-impl.js.map +1 -0
- package/out/packages/replicache/src/dag/store.js.map +1 -0
- package/out/packages/replicache/src/dag/visitor.js.map +1 -0
- package/out/packages/replicache/src/db/commit.js.map +1 -0
- package/out/packages/replicache/src/db/index.js.map +1 -0
- package/out/packages/replicache/src/db/read.js.map +1 -0
- package/out/packages/replicache/src/db/rebase.js.map +1 -0
- package/out/packages/replicache/src/db/write.js.map +1 -0
- package/out/packages/replicache/src/deleted-clients.js.map +1 -0
- package/out/packages/replicache/src/error-responses.js.map +1 -0
- package/out/packages/replicache/src/frozen-json.js.map +1 -0
- package/out/packages/replicache/src/get-default-puller.js.map +1 -0
- package/out/packages/replicache/src/get-default-pusher.js.map +1 -0
- package/out/packages/replicache/src/get-kv-store-provider.js.map +1 -0
- package/out/packages/replicache/src/hash.js.map +1 -0
- package/out/packages/replicache/src/http-request-info.js.map +1 -0
- package/out/packages/replicache/src/index-defs.js.map +1 -0
- package/out/packages/replicache/src/kv/expo-sqlite/store.js +57 -0
- package/out/packages/replicache/src/kv/expo-sqlite/store.js.map +1 -0
- package/out/packages/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -0
- package/out/packages/replicache/src/kv/idb-store.js.map +1 -0
- package/out/packages/replicache/src/kv/mem-store.js.map +1 -0
- package/out/packages/replicache/src/kv/op-sqlite/store.js +63 -0
- package/out/packages/replicache/src/kv/op-sqlite/store.js.map +1 -0
- package/out/packages/replicache/src/kv/op-sqlite/types.js.map +1 -0
- package/out/packages/replicache/src/kv/read-impl.js.map +1 -0
- package/out/packages/replicache/src/kv/sqlite-store.js +301 -0
- package/out/packages/replicache/src/kv/sqlite-store.js.map +1 -0
- package/out/packages/replicache/src/kv/throw-if-closed.js +23 -0
- package/out/packages/replicache/src/kv/throw-if-closed.js.map +1 -0
- package/out/packages/replicache/src/kv/write-impl-base.js.map +1 -0
- package/out/packages/replicache/src/kv/write-impl.js.map +1 -0
- package/out/packages/replicache/src/lazy.js.map +1 -0
- package/out/packages/replicache/src/log-options.js.map +1 -0
- package/out/packages/replicache/src/make-idb-name.js.map +1 -0
- package/out/packages/replicache/src/new-client-channel.js.map +1 -0
- package/out/packages/replicache/src/on-persist-channel.js.map +1 -0
- package/out/packages/replicache/src/patch-operation.js.map +1 -0
- package/out/packages/replicache/src/pending-mutations.js.map +1 -0
- package/out/packages/replicache/src/persist/client-gc.js.map +1 -0
- package/out/packages/replicache/src/persist/client-group-gc.js.map +1 -0
- package/out/packages/replicache/src/persist/client-groups.js +150 -0
- package/out/packages/replicache/src/persist/client-groups.js.map +1 -0
- package/out/packages/replicache/src/persist/clients.js +289 -0
- package/out/packages/replicache/src/persist/clients.js.map +1 -0
- package/out/packages/replicache/src/persist/collect-idb-databases.js.map +1 -0
- package/out/packages/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
- package/out/packages/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
- package/out/packages/replicache/src/persist/heartbeat.js.map +1 -0
- package/out/packages/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
- package/out/packages/replicache/src/persist/idb-databases-store.js.map +1 -0
- package/out/packages/replicache/src/persist/make-client-id.js.map +1 -0
- package/out/packages/replicache/src/persist/persist.js +124 -0
- package/out/packages/replicache/src/persist/persist.js.map +1 -0
- package/out/packages/replicache/src/persist/refresh.js.map +1 -0
- package/out/packages/replicache/src/process-scheduler.js.map +1 -0
- package/out/packages/replicache/src/pusher.js.map +1 -0
- package/out/packages/replicache/src/replicache-impl.js.map +1 -0
- package/out/packages/replicache/src/report-error.js.map +1 -0
- package/out/packages/replicache/src/request-idle.js.map +1 -0
- package/out/packages/replicache/src/scan-iterator.js.map +1 -0
- package/out/packages/replicache/src/scan-options.js.map +1 -0
- package/out/packages/replicache/src/set-interval-with-signal.js.map +1 -0
- package/out/packages/replicache/src/subscriptions.js.map +1 -0
- package/out/packages/replicache/src/sync/diff.js.map +1 -0
- package/out/packages/replicache/src/sync/ids.js.map +1 -0
- package/out/packages/replicache/src/sync/patch.js.map +1 -0
- package/out/packages/replicache/src/sync/pull-error.js.map +1 -0
- package/out/packages/replicache/src/sync/pull.js +169 -0
- package/out/packages/replicache/src/sync/pull.js.map +1 -0
- package/out/packages/replicache/src/sync/push.js.map +1 -0
- package/out/packages/replicache/src/sync/request-id.js.map +1 -0
- package/out/packages/replicache/src/sync/sync-head-name.js.map +1 -0
- package/out/packages/replicache/src/to-error.js.map +1 -0
- package/out/packages/replicache/src/transaction-closed-error.js.map +1 -0
- package/out/packages/replicache/src/transactions.js.map +1 -0
- package/out/packages/replicache/src/version.js.map +1 -0
- package/out/packages/replicache/src/with-transactions.js.map +1 -0
- package/out/packages/shared/src/abort-error.js.map +1 -0
- package/out/packages/shared/src/arrays.js.map +1 -0
- package/out/packages/shared/src/asserts.js.map +1 -0
- package/out/packages/shared/src/bigint-json.js.map +1 -0
- package/out/packages/shared/src/binary-search.js.map +1 -0
- package/out/packages/shared/src/broadcast-channel.js.map +1 -0
- package/out/packages/shared/src/browser-env.js.map +1 -0
- package/out/packages/shared/src/btree-set.js.map +1 -0
- package/out/packages/shared/src/cache.js.map +1 -0
- package/out/packages/shared/src/centroid.js.map +1 -0
- package/out/packages/shared/src/config.js.map +1 -0
- package/out/packages/shared/src/custom-key-map.js.map +1 -0
- package/out/packages/shared/src/custom-key-set.js.map +1 -0
- package/out/packages/shared/src/deep-clone.js.map +1 -0
- package/out/packages/shared/src/deep-merge.js.map +1 -0
- package/out/packages/shared/src/document-visible.js.map +1 -0
- package/out/packages/shared/src/dotenv.js.map +1 -0
- package/out/packages/shared/src/error.js.map +1 -0
- package/out/packages/shared/src/has-own.js.map +1 -0
- package/out/packages/shared/src/hash.js.map +1 -0
- package/out/packages/shared/src/iterables.js.map +1 -0
- package/out/packages/shared/src/json-schema.js.map +1 -0
- package/out/packages/shared/src/json.js.map +1 -0
- package/out/packages/shared/src/logging-test-utils.js.map +1 -0
- package/out/packages/shared/src/logging.js.map +1 -0
- package/out/packages/shared/src/map.js +39 -0
- package/out/packages/shared/src/map.js.map +1 -0
- package/out/packages/shared/src/must.js.map +1 -0
- package/out/packages/shared/src/navigator.js.map +1 -0
- package/out/packages/shared/src/object-traversal.js.map +1 -0
- package/out/packages/shared/src/objects.js.map +1 -0
- package/out/packages/shared/src/options.js.map +1 -0
- package/out/packages/shared/src/parse-big-int.js.map +1 -0
- package/out/packages/shared/src/promise-race.js.map +1 -0
- package/out/packages/shared/src/queue.js +120 -0
- package/out/packages/shared/src/queue.js.map +1 -0
- package/out/packages/shared/src/rand.js.map +1 -0
- package/out/packages/shared/src/random-uint64.js.map +1 -0
- package/out/packages/shared/src/random-values.js.map +1 -0
- package/out/packages/shared/src/record-proxy.js.map +1 -0
- package/out/packages/shared/src/resolved-promises.js.map +1 -0
- package/out/packages/shared/src/ring-buffer.js +109 -0
- package/out/packages/shared/src/ring-buffer.js.map +1 -0
- package/out/packages/shared/src/sentinels.js.map +1 -0
- package/out/packages/shared/src/set-utils.js.map +1 -0
- package/out/packages/shared/src/size-of-value.js.map +1 -0
- package/out/packages/shared/src/sleep.js.map +1 -0
- package/out/packages/shared/src/sorted-entries.js.map +1 -0
- package/out/packages/shared/src/string-compare.js.map +1 -0
- package/out/packages/shared/src/subscribable.js.map +1 -0
- package/out/packages/shared/src/tdigest-schema.js.map +1 -0
- package/out/packages/shared/src/tdigest.js.map +1 -0
- package/out/packages/shared/src/valita.js +172 -0
- package/out/packages/shared/src/valita.js.map +1 -0
- package/out/packages/z2s/src/compiler.js.map +1 -0
- package/out/packages/z2s/src/sql.js.map +1 -0
- package/out/packages/zero/package.js +205 -0
- package/out/packages/zero/package.js.map +1 -0
- package/out/packages/zero-cache/src/auth/auth.js.map +1 -0
- package/out/packages/zero-cache/src/auth/jwt.js.map +1 -0
- package/out/packages/zero-cache/src/auth/load-permissions.js.map +1 -0
- package/out/packages/zero-cache/src/auth/read-authorizer.js.map +1 -0
- package/out/packages/zero-cache/src/auth/write-authorizer.js.map +1 -0
- package/out/packages/zero-cache/src/config/network.js.map +1 -0
- package/out/packages/zero-cache/src/config/normalize.js.map +1 -0
- package/out/packages/zero-cache/src/config/server-context.js.map +1 -0
- package/out/packages/zero-cache/src/config/zero-config.js +921 -0
- package/out/packages/zero-cache/src/config/zero-config.js.map +1 -0
- package/out/packages/zero-cache/src/custom/fetch.js.map +1 -0
- package/out/packages/zero-cache/src/custom-queries/transform-query.js.map +1 -0
- package/out/packages/zero-cache/src/db/create.js.map +1 -0
- package/out/packages/zero-cache/src/db/delete-lite-db.js.map +1 -0
- package/out/packages/zero-cache/src/db/lite-tables.js.map +1 -0
- package/out/packages/zero-cache/src/db/migration-lite.js +166 -0
- package/out/packages/zero-cache/src/db/migration-lite.js.map +1 -0
- package/out/packages/zero-cache/src/db/migration.js +139 -0
- package/out/packages/zero-cache/src/db/migration.js.map +1 -0
- package/out/packages/zero-cache/src/db/mode-enum.js.map +1 -0
- package/out/packages/zero-cache/src/db/pg-copy-binary.js.map +1 -0
- package/out/packages/zero-cache/src/db/pg-copy.js.map +1 -0
- package/out/packages/zero-cache/src/db/pg-to-lite.js.map +1 -0
- package/out/packages/zero-cache/src/db/pg-type-parser.js.map +1 -0
- package/out/packages/zero-cache/src/db/run-transaction.js.map +1 -0
- package/out/packages/zero-cache/src/db/specs.js.map +1 -0
- package/out/packages/zero-cache/src/db/statements.js.map +1 -0
- package/out/packages/zero-cache/src/db/transaction-pool.js.map +1 -0
- package/out/packages/zero-cache/src/db/warmup.js.map +1 -0
- package/out/packages/zero-cache/src/observability/events.js.map +1 -0
- package/out/packages/zero-cache/src/observability/metrics.js.map +1 -0
- package/out/packages/zero-cache/src/scripts/decommission.js.map +1 -0
- package/out/packages/zero-cache/src/scripts/deploy-permissions.js.map +1 -0
- package/out/packages/zero-cache/src/scripts/permissions.js.map +1 -0
- package/out/packages/zero-cache/src/server/anonymous-otel-start.js +306 -0
- package/out/packages/zero-cache/src/server/anonymous-otel-start.js.map +1 -0
- package/out/packages/zero-cache/src/server/inspector-delegate.js.map +1 -0
- package/out/packages/zero-cache/src/server/logging.js.map +1 -0
- package/out/packages/zero-cache/src/server/otel-diag-logger.js.map +1 -0
- package/out/packages/zero-cache/src/server/otel-log-sink.js.map +1 -0
- package/out/packages/zero-cache/src/server/otel-start.js +53 -0
- package/out/packages/zero-cache/src/server/otel-start.js.map +1 -0
- package/out/packages/zero-cache/src/server/priority-op.js.map +1 -0
- package/out/packages/zero-cache/src/server/runner/main.js +11 -0
- package/out/packages/zero-cache/src/server/runner/main.js.map +1 -0
- package/out/packages/zero-cache/src/server/runner/run-worker.js.map +1 -0
- package/out/packages/zero-cache/src/server/runner/runtime.js.map +1 -0
- package/out/packages/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -0
- package/out/packages/zero-cache/src/server/worker-dispatcher.js.map +1 -0
- package/out/packages/zero-cache/src/server/worker-urls.js.map +1 -0
- package/out/packages/zero-cache/src/services/analyze.js +72 -0
- package/out/packages/zero-cache/src/services/analyze.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/custom/change-source.js +176 -0
- package/out/packages/zero-cache/src/services/change-source/custom/change-source.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/backfill-stream.js +197 -0
- package/out/packages/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/change-source.js +929 -0
- package/out/packages/zero-cache/src/services/change-source/pg/change-source.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/decommission.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/initial-sync.js +553 -0
- package/out/packages/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/lsn.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/replication-slots.js +162 -0
- package/out/packages/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/ddl.js +334 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/init.js +155 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/shard.js +330 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/data.js +194 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current.js +56 -0
- package/out/packages/zero-cache/src/services/change-source/protocol/current.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/broadcast.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/change-streamer-http.js +158 -0
- package/out/packages/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/forwarder.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/schema/init.js +70 -0
- package/out/packages/zero-cache/src/services/change-streamer/schema/init.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/schema/tables.js +191 -0
- package/out/packages/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/snapshot.js +42 -0
- package/out/packages/zero-cache/src/services/change-streamer/snapshot.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/storer.js.map +1 -0
- package/out/packages/zero-cache/src/services/change-streamer/subscriber.js.map +1 -0
- package/out/packages/zero-cache/src/services/heapz.js.map +1 -0
- package/out/packages/zero-cache/src/services/http-service.js.map +1 -0
- package/out/packages/zero-cache/src/services/life-cycle.js +200 -0
- package/out/packages/zero-cache/src/services/life-cycle.js.map +1 -0
- package/out/packages/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -0
- package/out/packages/zero-cache/src/services/litestream/commands.js.map +1 -0
- package/out/packages/zero-cache/src/services/mutagen/error.js.map +1 -0
- package/out/packages/zero-cache/src/services/mutagen/mutagen.js.map +1 -0
- package/out/packages/zero-cache/src/services/mutagen/pusher.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/change-processor.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/incremental-sync.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/notifier.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/replication-status.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/replicator.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/schema/change-log.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/schema/constants.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
- package/out/packages/zero-cache/src/services/replicator/write-worker.js.map +1 -0
- package/out/packages/zero-cache/src/services/run-ast.js +88 -0
- package/out/packages/zero-cache/src/services/run-ast.js.map +1 -0
- package/out/packages/zero-cache/src/services/runner.js.map +1 -0
- package/out/packages/zero-cache/src/services/running-state.js +139 -0
- package/out/packages/zero-cache/src/services/running-state.js.map +1 -0
- package/out/packages/zero-cache/src/services/shadow-sync/shadow-sync-service.js +57 -0
- package/out/packages/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +1 -0
- package/out/packages/zero-cache/src/services/statz.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/client-handler.js +270 -0
- package/out/packages/zero-cache/src/services/view-syncer/client-handler.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/client-schema.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/cvr-purger.js +110 -0
- package/out/packages/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/cvr.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/inspect-handler.js +102 -0
- package/out/packages/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/pipeline-driver.js +628 -0
- package/out/packages/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/row-set-signature.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/schema/init.js +142 -0
- package/out/packages/zero-cache/src/services/view-syncer/schema/init.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/schema/types.js +278 -0
- package/out/packages/zero-cache/src/services/view-syncer/schema/types.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/tracer.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -0
- package/out/packages/zero-cache/src/services/view-syncer/view-syncer.js +1245 -0
- package/out/packages/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -0
- package/out/packages/zero-cache/src/types/configuration-error.js +11 -0
- package/out/packages/zero-cache/src/types/configuration-error.js.map +1 -0
- package/out/packages/zero-cache/src/types/error-with-level.js.map +1 -0
- package/out/packages/zero-cache/src/types/http.js.map +1 -0
- package/out/packages/zero-cache/src/types/lexi-version.js.map +1 -0
- package/out/packages/zero-cache/src/types/lite.js.map +1 -0
- package/out/packages/zero-cache/src/types/names.js.map +1 -0
- package/out/packages/zero-cache/src/types/pg-data-type.js.map +1 -0
- package/out/packages/zero-cache/src/types/pg-types.js.map +1 -0
- package/out/packages/zero-cache/src/types/pg-versions.js.map +1 -0
- package/out/packages/zero-cache/src/types/pg.js +222 -0
- package/out/packages/zero-cache/src/types/pg.js.map +1 -0
- package/out/packages/zero-cache/src/types/processes.js.map +1 -0
- package/out/packages/zero-cache/src/types/profiler.js.map +1 -0
- package/out/packages/zero-cache/src/types/row-key.js.map +1 -0
- package/out/packages/zero-cache/src/types/shards.js.map +1 -0
- package/out/packages/zero-cache/src/types/sql.js.map +1 -0
- package/out/packages/zero-cache/src/types/state-version.js.map +1 -0
- package/out/packages/zero-cache/src/types/streams.js.map +1 -0
- package/out/packages/zero-cache/src/types/strings.js.map +1 -0
- package/out/packages/zero-cache/src/types/subscription.js.map +1 -0
- package/out/packages/zero-cache/src/types/timeout.js.map +1 -0
- package/out/packages/zero-cache/src/types/url-params.js.map +1 -0
- package/out/packages/zero-cache/src/types/websocket-handoff.js.map +1 -0
- package/out/packages/zero-cache/src/types/ws.js.map +1 -0
- package/out/packages/zero-cache/src/workers/connect-params.js.map +1 -0
- package/out/packages/zero-cache/src/workers/connection.js +229 -0
- package/out/packages/zero-cache/src/workers/connection.js.map +1 -0
- package/out/packages/zero-cache/src/workers/mutator.js.map +1 -0
- package/out/packages/zero-cache/src/workers/replicator.js.map +1 -0
- package/out/packages/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -0
- package/out/packages/zero-cache/src/workers/syncer.js.map +1 -0
- package/out/packages/zero-client/src/client/active-clients-manager.js.map +1 -0
- package/out/packages/zero-client/src/client/client-error-kind-enum.js.map +1 -0
- package/out/packages/zero-client/src/client/connection-manager.js +296 -0
- package/out/packages/zero-client/src/client/connection-manager.js.map +1 -0
- package/out/packages/zero-client/src/client/connection-status-enum.js +20 -0
- package/out/packages/zero-client/src/client/connection-status-enum.js.map +1 -0
- package/out/packages/zero-client/src/client/connection.js.map +1 -0
- package/out/packages/zero-client/src/client/context.js.map +1 -0
- package/out/packages/zero-client/src/client/crud-impl.js +61 -0
- package/out/packages/zero-client/src/client/crud-impl.js.map +1 -0
- package/out/packages/zero-client/src/client/crud.js.map +1 -0
- package/out/packages/zero-client/src/client/custom.js +64 -0
- package/out/packages/zero-client/src/client/custom.js.map +1 -0
- package/out/packages/zero-client/src/client/delete-clients-manager.js.map +1 -0
- package/out/packages/zero-client/src/client/enable-analytics.js.map +1 -0
- package/out/packages/zero-client/src/client/error.js.map +1 -0
- package/out/packages/zero-client/src/client/http-string.js.map +1 -0
- package/out/packages/zero-client/src/client/inspector/client-group.js.map +1 -0
- package/out/packages/zero-client/src/client/inspector/client.js.map +1 -0
- package/out/packages/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -0
- package/out/packages/zero-client/src/client/inspector/inspector.js.map +1 -0
- package/out/packages/zero-client/src/client/inspector/lazy-inspector.js.map +1 -0
- package/out/packages/zero-client/src/client/inspector/query.js.map +1 -0
- package/out/packages/zero-client/src/client/ivm-branch.js.map +1 -0
- package/out/packages/zero-client/src/client/keys.js.map +1 -0
- package/out/packages/zero-client/src/client/log-options.js.map +1 -0
- package/out/packages/zero-client/src/client/make-mutate-property.js.map +1 -0
- package/out/packages/zero-client/src/client/make-replicache-mutators.js.map +1 -0
- package/out/packages/zero-client/src/client/metric-name-enum.js.map +1 -0
- package/out/packages/zero-client/src/client/metrics.js.map +1 -0
- package/out/packages/zero-client/src/client/mutation-tracker.js.map +1 -0
- package/out/packages/zero-client/src/client/mutator-proxy.js.map +1 -0
- package/out/packages/zero-client/src/client/options.js.map +1 -0
- package/out/packages/zero-client/src/client/query-manager.js.map +1 -0
- package/out/packages/zero-client/src/client/reload-error-handler.js.map +1 -0
- package/out/packages/zero-client/src/client/server-option.js.map +1 -0
- package/out/packages/zero-client/src/client/update-needed-reason-type-enum.js +27 -0
- package/out/packages/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -0
- package/out/packages/zero-client/src/client/version.js +9 -0
- package/out/packages/zero-client/src/client/version.js.map +1 -0
- package/out/packages/zero-client/src/client/zero-poke-handler.js.map +1 -0
- package/out/packages/zero-client/src/client/zero-rep.js.map +1 -0
- package/out/packages/zero-client/src/client/zero.js +1469 -0
- package/out/packages/zero-client/src/client/zero.js.map +1 -0
- package/out/packages/zero-client/src/util/nanoid.js.map +1 -0
- package/out/packages/zero-protocol/src/analyze-query-result.js +123 -0
- package/out/packages/zero-protocol/src/analyze-query-result.js.map +1 -0
- package/out/packages/zero-protocol/src/application-error.js.map +1 -0
- package/out/packages/zero-protocol/src/ast.js.map +1 -0
- package/out/packages/zero-protocol/src/change-desired-queries.js +13 -0
- package/out/packages/zero-protocol/src/change-desired-queries.js.map +1 -0
- package/out/packages/zero-protocol/src/client-schema.js.map +1 -0
- package/out/packages/zero-protocol/src/close-connection.js.map +1 -0
- package/out/packages/zero-protocol/src/connect.js +54 -0
- package/out/packages/zero-protocol/src/connect.js.map +1 -0
- package/out/packages/zero-protocol/src/custom-queries.js.map +1 -0
- package/out/packages/zero-protocol/src/data.js.map +1 -0
- package/out/packages/zero-protocol/src/delete-clients.js.map +1 -0
- package/out/packages/zero-protocol/src/down.js.map +1 -0
- package/out/packages/zero-protocol/src/error-kind-enum.js.map +1 -0
- package/out/packages/zero-protocol/src/error-origin-enum.js.map +1 -0
- package/out/packages/zero-protocol/src/error-reason-enum.js.map +1 -0
- package/out/packages/zero-protocol/src/error.js +91 -0
- package/out/packages/zero-protocol/src/error.js.map +1 -0
- package/out/packages/zero-protocol/src/inspect-down.js.map +1 -0
- package/out/packages/zero-protocol/src/inspect-up.js +35 -0
- package/out/packages/zero-protocol/src/inspect-up.js.map +1 -0
- package/out/packages/zero-protocol/src/mutate-server.js.map +1 -0
- package/out/packages/zero-protocol/src/mutation-id.js.map +1 -0
- package/out/packages/zero-protocol/src/mutation-type-enum.js.map +1 -0
- package/out/packages/zero-protocol/src/mutation.js.map +1 -0
- package/out/packages/zero-protocol/src/mutations-patch.js.map +1 -0
- package/out/packages/zero-protocol/src/ping.js.map +1 -0
- package/out/packages/zero-protocol/src/poke.js +63 -0
- package/out/packages/zero-protocol/src/poke.js.map +1 -0
- package/out/packages/zero-protocol/src/pong.js.map +1 -0
- package/out/packages/zero-protocol/src/primary-key.js.map +1 -0
- package/out/packages/zero-protocol/src/protocol-version.js.map +1 -0
- package/out/packages/zero-protocol/src/pull.js.map +1 -0
- package/out/packages/zero-protocol/src/push.js +76 -0
- package/out/packages/zero-protocol/src/push.js.map +1 -0
- package/out/packages/zero-protocol/src/queries-patch.js.map +1 -0
- package/out/packages/zero-protocol/src/query-hash.js.map +1 -0
- package/out/packages/zero-protocol/src/query-server.js.map +1 -0
- package/out/packages/zero-protocol/src/row-patch.js.map +1 -0
- package/out/packages/zero-protocol/src/up.js.map +1 -0
- package/out/packages/zero-protocol/src/update-auth.js.map +1 -0
- package/out/packages/zero-protocol/src/version.js.map +1 -0
- package/out/packages/zero-react/src/use-connection-state.js +19 -0
- package/out/packages/zero-react/src/use-connection-state.js.map +1 -0
- package/out/packages/zero-react/src/use-query.js +301 -0
- package/out/packages/zero-react/src/use-query.js.map +1 -0
- package/out/packages/zero-react/src/use-zero-online.js +22 -0
- package/out/packages/zero-react/src/use-zero-online.js.map +1 -0
- package/out/packages/zero-react/src/zero-provider.js +90 -0
- package/out/packages/zero-react/src/zero-provider.js.map +1 -0
- package/out/packages/zero-schema/src/builder/relationship-builder.js.map +1 -0
- package/out/packages/zero-schema/src/builder/schema-builder.js.map +1 -0
- package/out/packages/zero-schema/src/builder/table-builder.js.map +1 -0
- package/out/packages/zero-schema/src/compiled-permissions.js.map +1 -0
- package/out/packages/zero-schema/src/name-mapper.js.map +1 -0
- package/out/packages/zero-schema/src/permissions.js.map +1 -0
- package/out/packages/zero-schema/src/schema-config.js.map +1 -0
- package/out/packages/zero-server/src/adapters/drizzle.js.map +1 -0
- package/out/packages/zero-server/src/adapters/kysely.js.map +1 -0
- package/out/packages/zero-server/src/adapters/pg.js +83 -0
- package/out/packages/zero-server/src/adapters/pg.js.map +1 -0
- package/out/packages/zero-server/src/adapters/postgresjs.js.map +1 -0
- package/out/packages/zero-server/src/adapters/prisma.js.map +1 -0
- package/out/packages/zero-server/src/custom.js +215 -0
- package/out/packages/zero-server/src/custom.js.map +1 -0
- package/out/packages/zero-server/src/logging.js.map +1 -0
- package/out/packages/zero-server/src/pg-query-executor.js.map +1 -0
- package/out/packages/zero-server/src/process-mutations.js.map +1 -0
- package/out/packages/zero-server/src/push-processor.js.map +1 -0
- package/out/packages/zero-server/src/queries/process-queries.js.map +1 -0
- package/out/packages/zero-server/src/schema.js.map +1 -0
- package/out/packages/zero-server/src/zql-database.js.map +1 -0
- package/out/packages/zero-solid/src/solid-view.js +145 -0
- package/out/packages/zero-solid/src/solid-view.js.map +1 -0
- package/out/packages/zero-solid/src/use-connection-state.js +21 -0
- package/out/packages/zero-solid/src/use-connection-state.js.map +1 -0
- package/out/packages/zero-solid/src/use-query.js +64 -0
- package/out/packages/zero-solid/src/use-query.js.map +1 -0
- package/out/packages/zero-solid/src/use-zero-online.js +21 -0
- package/out/packages/zero-solid/src/use-zero-online.js.map +1 -0
- package/out/packages/zero-solid/src/use-zero.js +93 -0
- package/out/packages/zero-solid/src/use-zero.js.map +1 -0
- package/out/packages/zero-types/src/format.js.map +1 -0
- package/out/packages/zero-types/src/name-mapper.js.map +1 -0
- package/out/packages/zql/src/builder/builder.js +381 -0
- package/out/packages/zql/src/builder/builder.js.map +1 -0
- package/out/packages/zql/src/builder/debug-delegate.js +81 -0
- package/out/packages/zql/src/builder/debug-delegate.js.map +1 -0
- package/out/packages/zql/src/builder/filter.js.map +1 -0
- package/out/packages/zql/src/builder/like.js.map +1 -0
- package/out/packages/zql/src/error.js.map +1 -0
- package/out/packages/zql/src/ivm/array-view.js.map +1 -0
- package/out/packages/zql/src/ivm/cap.js.map +1 -0
- package/out/packages/zql/src/ivm/change.js.map +1 -0
- package/out/packages/zql/src/ivm/constraint.js +82 -0
- package/out/packages/zql/src/ivm/constraint.js.map +1 -0
- package/out/packages/zql/src/ivm/data.js.map +1 -0
- package/out/packages/zql/src/ivm/exists.js.map +1 -0
- package/out/packages/zql/src/ivm/fan-in.js.map +1 -0
- package/out/packages/zql/src/ivm/fan-out.js.map +1 -0
- package/out/packages/zql/src/ivm/filter-operators.js.map +1 -0
- package/out/packages/zql/src/ivm/filter-push.js.map +1 -0
- package/out/packages/zql/src/ivm/filter.js.map +1 -0
- package/out/packages/zql/src/ivm/flipped-join.js +307 -0
- package/out/packages/zql/src/ivm/flipped-join.js.map +1 -0
- package/out/packages/zql/src/ivm/join-utils.js.map +1 -0
- package/out/packages/zql/src/ivm/join.js.map +1 -0
- package/out/packages/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -0
- package/out/packages/zql/src/ivm/memory-source.js.map +1 -0
- package/out/packages/zql/src/ivm/memory-storage.js.map +1 -0
- package/out/packages/zql/src/ivm/operator.js.map +1 -0
- package/out/packages/zql/src/ivm/push-accumulated.js.map +1 -0
- package/out/packages/zql/src/ivm/skip-yields.js.map +1 -0
- package/out/packages/zql/src/ivm/skip.js.map +1 -0
- package/out/packages/zql/src/ivm/source.js.map +1 -0
- package/out/packages/zql/src/ivm/stream.js.map +1 -0
- package/out/packages/zql/src/ivm/take.js.map +1 -0
- package/out/packages/zql/src/ivm/union-fan-in.js +165 -0
- package/out/packages/zql/src/ivm/union-fan-in.js.map +1 -0
- package/out/packages/zql/src/ivm/union-fan-out.js.map +1 -0
- package/out/packages/zql/src/ivm/view-apply-change.js.map +1 -0
- package/out/packages/zql/src/mutate/crud.js.map +1 -0
- package/out/packages/zql/src/mutate/custom.js.map +1 -0
- package/out/packages/zql/src/mutate/mutator-registry.js.map +1 -0
- package/out/packages/zql/src/mutate/mutator.js.map +1 -0
- package/out/packages/zql/src/planner/planner-builder.js.map +1 -0
- package/out/packages/zql/src/planner/planner-connection.js.map +1 -0
- package/out/packages/zql/src/planner/planner-constraint.js.map +1 -0
- package/out/packages/zql/src/planner/planner-debug.js.map +1 -0
- package/out/packages/zql/src/planner/planner-fan-in.js.map +1 -0
- package/out/packages/zql/src/planner/planner-fan-out.js.map +1 -0
- package/out/packages/zql/src/planner/planner-graph.js.map +1 -0
- package/out/packages/zql/src/planner/planner-join.js +262 -0
- package/out/packages/zql/src/planner/planner-join.js.map +1 -0
- package/out/packages/zql/src/planner/planner-node.js.map +1 -0
- package/out/packages/zql/src/planner/planner-source.js.map +1 -0
- package/out/packages/zql/src/planner/planner-terminus.js.map +1 -0
- package/out/packages/zql/src/query/complete-ordering.js.map +1 -0
- package/out/packages/zql/src/query/create-builder.js.map +1 -0
- package/out/packages/zql/src/query/error.js.map +1 -0
- package/out/packages/zql/src/query/escape-like.js.map +1 -0
- package/out/packages/zql/src/query/expression.js.map +1 -0
- package/out/packages/zql/src/query/measure-push-operator.js.map +1 -0
- package/out/packages/zql/src/query/metrics-delegate.js.map +1 -0
- package/out/packages/zql/src/query/named.js.map +1 -0
- package/out/packages/zql/src/query/query-delegate-base.js.map +1 -0
- package/out/packages/zql/src/query/query-impl.js +290 -0
- package/out/packages/zql/src/query/query-impl.js.map +1 -0
- package/out/packages/zql/src/query/query-internals.js.map +1 -0
- package/out/packages/zql/src/query/query-registry.js.map +1 -0
- package/out/packages/zql/src/query/runnable-query-impl.js.map +1 -0
- package/out/packages/zql/src/query/static-query.js.map +1 -0
- package/out/packages/zql/src/query/ttl.js.map +1 -0
- package/out/packages/zql/src/query/validate-input.js.map +1 -0
- package/out/packages/zqlite/src/database-storage.js.map +1 -0
- package/out/packages/zqlite/src/db.js.map +1 -0
- package/out/packages/zqlite/src/explain-queries.js.map +1 -0
- package/out/packages/zqlite/src/internal/sql-inline.js.map +1 -0
- package/out/packages/zqlite/src/internal/sql.js.map +1 -0
- package/out/packages/zqlite/src/internal/statement-cache.js.map +1 -0
- package/out/packages/zqlite/src/query-builder.js.map +1 -0
- package/out/packages/zqlite/src/query-delegate.js.map +1 -0
- package/out/packages/zqlite/src/resolve-scalar-subqueries.js.map +1 -0
- package/out/packages/zqlite/src/sqlite-cost-model.js.map +1 -0
- package/out/packages/zqlite/src/sqlite-stat-fanout.js.map +1 -0
- package/out/packages/zqlite/src/table-source.js +313 -0
- package/out/packages/zqlite/src/table-source.js.map +1 -0
- package/out/replicache/src/dag/store-impl.d.ts.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
- package/out/replicache/src/kv/op-sqlite/store.d.ts.map +1 -1
- package/out/replicache/src/kv/sqlite-store.d.ts +6 -6
- package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
- package/out/replicache/src/kv/throw-if-closed.d.ts +1 -0
- package/out/replicache/src/kv/throw-if-closed.d.ts.map +1 -1
- package/out/replicache/src/persist/persist.d.ts.map +1 -1
- package/out/replicache/src/sync/pull.d.ts.map +1 -1
- package/out/shared/src/map.d.ts +6 -0
- package/out/shared/src/map.d.ts.map +1 -0
- package/out/shared/src/queue.d.ts.map +1 -1
- package/out/shared/src/ring-buffer.d.ts +32 -0
- package/out/shared/src/ring-buffer.d.ts.map +1 -0
- package/out/zero/src/adapters/drizzle.js +1 -1
- package/out/zero/src/adapters/kysely.js +1 -1
- package/out/zero/src/adapters/pg.js +1 -1
- package/out/zero/src/adapters/postgresjs.js +1 -1
- package/out/zero/src/adapters/prisma.js +1 -1
- package/out/zero/src/analyze-query.js +1 -1
- package/out/zero/src/analyze.js +1 -1
- package/out/zero/src/ast-to-zql.js +1 -1
- package/out/zero/src/bindings.js +11 -11
- package/out/zero/src/build-schema.js.map +1 -1
- package/out/zero/src/change-protocol/v0.js +2 -2
- package/out/zero/src/cli.js +1 -1
- package/out/zero/src/deploy-permissions.js +1 -1
- package/out/zero/src/expo-sqlite.js +2 -2
- package/out/zero/src/op-sqlite.js +2 -2
- package/out/zero/src/pg.js +9 -9
- package/out/zero/src/react-native.js +2 -2
- package/out/zero/src/react.js +5 -5
- package/out/zero/src/server.js +8 -8
- package/out/zero/src/solid.js +5 -5
- package/out/zero/src/sqlite.js +2 -2
- package/out/zero/src/transform-query.js +1 -1
- package/out/zero/src/zero-cache-dev.js +6 -6
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero/src/zero-out.js +5 -5
- package/out/zero/src/zero-out.js.map +1 -1
- package/out/zero/src/zero.js +22 -22
- package/out/zero/src/zqlite.js +5 -5
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +38 -32
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +15 -13
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/mutator.js +12 -10
- package/out/zero-cache/src/server/mutator.js.map +1 -1
- package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
- package/out/zero-cache/src/server/reaper.js +18 -16
- package/out/zero-cache/src/server/reaper.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +20 -18
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js +16 -13
- package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +36 -34
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/write-worker.js +1 -1
- package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +8 -2
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
- package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/types/configuration-error.d.ts +4 -0
- package/out/zero-cache/src/types/configuration-error.d.ts.map +1 -0
- package/out/zero-cache/src/types/pg.d.ts +2 -0
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/debug-delegate.d.ts +5 -0
- package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
- package/out/zql/src/ivm/flipped-join.d.ts +4 -8
- package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
- package/out/zql/src/ivm/operator.d.ts +1 -1
- package/out/zql/src/ivm/schema.d.ts +0 -8
- package/out/zql/src/ivm/schema.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator.d.ts +12 -3
- package/out/zql/src/mutate/mutator.d.ts.map +1 -1
- package/out/zql/src/planner/planner-join.d.ts.map +1 -1
- package/out/zql/src/query/query-registry.d.ts +10 -3
- package/out/zql/src/query/query-registry.d.ts.map +1 -1
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/package.json +23 -23
- package/out/_virtual/_@oxc-project_runtime@0.122.0/helpers/usingCtx.js +0 -57
- package/out/analyze-query/src/analyze-cli.js +0 -288
- package/out/analyze-query/src/analyze-cli.js.map +0 -1
- package/out/analyze-query/src/bin-analyze.js +0 -277
- package/out/analyze-query/src/bin-analyze.js.map +0 -1
- package/out/analyze-query/src/bin-transform.js.map +0 -1
- package/out/ast-to-zql/src/ast-to-zql.js.map +0 -1
- package/out/ast-to-zql/src/bin.js.map +0 -1
- package/out/ast-to-zql/src/format.js.map +0 -1
- package/out/datadog/src/datadog-log-sink.js.map +0 -1
- package/out/otel/src/enabled.js.map +0 -1
- package/out/otel/src/log-options.js.map +0 -1
- package/out/otel/src/maybe-time.js.map +0 -1
- package/out/otel/src/span.js.map +0 -1
- package/out/otel/src/version.js.map +0 -1
- package/out/replicache/src/async-iterable-to-array.js.map +0 -1
- package/out/replicache/src/bg-interval.js.map +0 -1
- package/out/replicache/src/btree/diff.js.map +0 -1
- package/out/replicache/src/btree/node.js.map +0 -1
- package/out/replicache/src/btree/read.js.map +0 -1
- package/out/replicache/src/btree/splice.js.map +0 -1
- package/out/replicache/src/btree/write.js +0 -188
- package/out/replicache/src/btree/write.js.map +0 -1
- package/out/replicache/src/call-default-fetch.js.map +0 -1
- package/out/replicache/src/connection-loop-delegates.js.map +0 -1
- package/out/replicache/src/connection-loop.js.map +0 -1
- package/out/replicache/src/cookies.js.map +0 -1
- package/out/replicache/src/dag/chunk.js.map +0 -1
- package/out/replicache/src/dag/gc.js.map +0 -1
- package/out/replicache/src/dag/key.js.map +0 -1
- package/out/replicache/src/dag/lazy-store.js.map +0 -1
- package/out/replicache/src/dag/store-impl.js +0 -152
- package/out/replicache/src/dag/store-impl.js.map +0 -1
- package/out/replicache/src/dag/store.js.map +0 -1
- package/out/replicache/src/dag/visitor.js.map +0 -1
- package/out/replicache/src/db/commit.js.map +0 -1
- package/out/replicache/src/db/index.js.map +0 -1
- package/out/replicache/src/db/read.js.map +0 -1
- package/out/replicache/src/db/rebase.js.map +0 -1
- package/out/replicache/src/db/write.js.map +0 -1
- package/out/replicache/src/deleted-clients.js.map +0 -1
- package/out/replicache/src/error-responses.js.map +0 -1
- package/out/replicache/src/frozen-json.js.map +0 -1
- package/out/replicache/src/get-default-puller.js.map +0 -1
- package/out/replicache/src/get-default-pusher.js.map +0 -1
- package/out/replicache/src/get-kv-store-provider.js.map +0 -1
- package/out/replicache/src/hash.js.map +0 -1
- package/out/replicache/src/http-request-info.js.map +0 -1
- package/out/replicache/src/index-defs.js.map +0 -1
- package/out/replicache/src/kv/expo-sqlite/store.js +0 -58
- package/out/replicache/src/kv/expo-sqlite/store.js.map +0 -1
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +0 -1
- package/out/replicache/src/kv/idb-store.js.map +0 -1
- package/out/replicache/src/kv/mem-store.js.map +0 -1
- package/out/replicache/src/kv/op-sqlite/store.js +0 -63
- package/out/replicache/src/kv/op-sqlite/store.js.map +0 -1
- package/out/replicache/src/kv/op-sqlite/types.js.map +0 -1
- package/out/replicache/src/kv/read-impl.js.map +0 -1
- package/out/replicache/src/kv/sqlite-store.js +0 -216
- package/out/replicache/src/kv/sqlite-store.js.map +0 -1
- package/out/replicache/src/kv/throw-if-closed.js +0 -26
- package/out/replicache/src/kv/throw-if-closed.js.map +0 -1
- package/out/replicache/src/kv/write-impl-base.js.map +0 -1
- package/out/replicache/src/kv/write-impl.js.map +0 -1
- package/out/replicache/src/lazy.js.map +0 -1
- package/out/replicache/src/log-options.js.map +0 -1
- package/out/replicache/src/make-idb-name.js.map +0 -1
- package/out/replicache/src/new-client-channel.js.map +0 -1
- package/out/replicache/src/on-persist-channel.js.map +0 -1
- package/out/replicache/src/patch-operation.js.map +0 -1
- package/out/replicache/src/pending-mutations.js.map +0 -1
- package/out/replicache/src/persist/client-gc.js.map +0 -1
- package/out/replicache/src/persist/client-group-gc.js.map +0 -1
- package/out/replicache/src/persist/client-groups.js +0 -110
- package/out/replicache/src/persist/client-groups.js.map +0 -1
- package/out/replicache/src/persist/clients.js +0 -261
- package/out/replicache/src/persist/clients.js.map +0 -1
- package/out/replicache/src/persist/collect-idb-databases.js.map +0 -1
- package/out/replicache/src/persist/gather-mem-only-visitor.js.map +0 -1
- package/out/replicache/src/persist/gather-not-cached-visitor.js.map +0 -1
- package/out/replicache/src/persist/heartbeat.js.map +0 -1
- package/out/replicache/src/persist/idb-databases-store-db-name.js.map +0 -1
- package/out/replicache/src/persist/idb-databases-store.js.map +0 -1
- package/out/replicache/src/persist/make-client-id.js.map +0 -1
- package/out/replicache/src/persist/persist.js +0 -122
- package/out/replicache/src/persist/persist.js.map +0 -1
- package/out/replicache/src/persist/refresh.js.map +0 -1
- package/out/replicache/src/process-scheduler.js.map +0 -1
- package/out/replicache/src/pusher.js.map +0 -1
- package/out/replicache/src/replicache-impl.js.map +0 -1
- package/out/replicache/src/report-error.js.map +0 -1
- package/out/replicache/src/request-idle.js.map +0 -1
- package/out/replicache/src/scan-iterator.js.map +0 -1
- package/out/replicache/src/scan-options.js.map +0 -1
- package/out/replicache/src/set-interval-with-signal.js.map +0 -1
- package/out/replicache/src/subscriptions.js.map +0 -1
- package/out/replicache/src/sync/diff.js.map +0 -1
- package/out/replicache/src/sync/ids.js.map +0 -1
- package/out/replicache/src/sync/patch.js.map +0 -1
- package/out/replicache/src/sync/pull-error.js.map +0 -1
- package/out/replicache/src/sync/pull.js +0 -166
- package/out/replicache/src/sync/pull.js.map +0 -1
- package/out/replicache/src/sync/push.js.map +0 -1
- package/out/replicache/src/sync/request-id.js.map +0 -1
- package/out/replicache/src/sync/sync-head-name.js.map +0 -1
- package/out/replicache/src/to-error.js.map +0 -1
- package/out/replicache/src/transaction-closed-error.js.map +0 -1
- package/out/replicache/src/transactions.js.map +0 -1
- package/out/replicache/src/version.js.map +0 -1
- package/out/replicache/src/with-transactions.js.map +0 -1
- package/out/shared/src/abort-error.js.map +0 -1
- package/out/shared/src/arrays.js.map +0 -1
- package/out/shared/src/asserts.js.map +0 -1
- package/out/shared/src/bigint-json.js.map +0 -1
- package/out/shared/src/binary-search.js.map +0 -1
- package/out/shared/src/broadcast-channel.js.map +0 -1
- package/out/shared/src/browser-env.js.map +0 -1
- package/out/shared/src/btree-set.js.map +0 -1
- package/out/shared/src/cache.js.map +0 -1
- package/out/shared/src/centroid.js.map +0 -1
- package/out/shared/src/config.js.map +0 -1
- package/out/shared/src/custom-key-map.js.map +0 -1
- package/out/shared/src/custom-key-set.js.map +0 -1
- package/out/shared/src/deep-clone.js.map +0 -1
- package/out/shared/src/deep-merge.js.map +0 -1
- package/out/shared/src/document-visible.js.map +0 -1
- package/out/shared/src/dotenv.js.map +0 -1
- package/out/shared/src/error.js.map +0 -1
- package/out/shared/src/has-own.js.map +0 -1
- package/out/shared/src/hash.js.map +0 -1
- package/out/shared/src/iterables.js.map +0 -1
- package/out/shared/src/json-schema.js.map +0 -1
- package/out/shared/src/json.js.map +0 -1
- package/out/shared/src/logging-test-utils.js.map +0 -1
- package/out/shared/src/logging.js.map +0 -1
- package/out/shared/src/must.js.map +0 -1
- package/out/shared/src/navigator.js.map +0 -1
- package/out/shared/src/object-traversal.js.map +0 -1
- package/out/shared/src/objects.js.map +0 -1
- package/out/shared/src/options.js.map +0 -1
- package/out/shared/src/parse-big-int.js.map +0 -1
- package/out/shared/src/promise-race.js.map +0 -1
- package/out/shared/src/queue.js +0 -126
- package/out/shared/src/queue.js.map +0 -1
- package/out/shared/src/rand.js.map +0 -1
- package/out/shared/src/random-uint64.js.map +0 -1
- package/out/shared/src/random-values.js.map +0 -1
- package/out/shared/src/record-proxy.js.map +0 -1
- package/out/shared/src/resolved-promises.js.map +0 -1
- package/out/shared/src/sentinels.js.map +0 -1
- package/out/shared/src/set-utils.js.map +0 -1
- package/out/shared/src/size-of-value.js.map +0 -1
- package/out/shared/src/sleep.js.map +0 -1
- package/out/shared/src/sorted-entries.js.map +0 -1
- package/out/shared/src/string-compare.js.map +0 -1
- package/out/shared/src/subscribable.js.map +0 -1
- package/out/shared/src/tdigest-schema.js.map +0 -1
- package/out/shared/src/tdigest.js.map +0 -1
- package/out/shared/src/valita.js +0 -172
- package/out/shared/src/valita.js.map +0 -1
- package/out/z2s/src/compiler.js.map +0 -1
- package/out/z2s/src/sql.js.map +0 -1
- package/out/zero/package.js +0 -205
- package/out/zero/package.js.map +0 -1
- package/out/zero-cache/src/auth/auth.js.map +0 -1
- package/out/zero-cache/src/auth/jwt.js.map +0 -1
- package/out/zero-cache/src/auth/load-permissions.js.map +0 -1
- package/out/zero-cache/src/auth/read-authorizer.js.map +0 -1
- package/out/zero-cache/src/auth/write-authorizer.js.map +0 -1
- package/out/zero-cache/src/config/network.js.map +0 -1
- package/out/zero-cache/src/config/normalize.js.map +0 -1
- package/out/zero-cache/src/config/server-context.js.map +0 -1
- package/out/zero-cache/src/config/zero-config.js +0 -916
- package/out/zero-cache/src/config/zero-config.js.map +0 -1
- package/out/zero-cache/src/custom/fetch.js.map +0 -1
- package/out/zero-cache/src/custom-queries/transform-query.js.map +0 -1
- package/out/zero-cache/src/db/create.js.map +0 -1
- package/out/zero-cache/src/db/delete-lite-db.js.map +0 -1
- package/out/zero-cache/src/db/lite-tables.js.map +0 -1
- package/out/zero-cache/src/db/migration-lite.js +0 -147
- package/out/zero-cache/src/db/migration-lite.js.map +0 -1
- package/out/zero-cache/src/db/migration.js +0 -120
- package/out/zero-cache/src/db/migration.js.map +0 -1
- package/out/zero-cache/src/db/mode-enum.js.map +0 -1
- package/out/zero-cache/src/db/pg-copy-binary.js.map +0 -1
- package/out/zero-cache/src/db/pg-copy.js.map +0 -1
- package/out/zero-cache/src/db/pg-to-lite.js.map +0 -1
- package/out/zero-cache/src/db/pg-type-parser.js.map +0 -1
- package/out/zero-cache/src/db/run-transaction.js.map +0 -1
- package/out/zero-cache/src/db/specs.js.map +0 -1
- package/out/zero-cache/src/db/statements.js.map +0 -1
- package/out/zero-cache/src/db/transaction-pool.js.map +0 -1
- package/out/zero-cache/src/db/warmup.js.map +0 -1
- package/out/zero-cache/src/observability/events.js.map +0 -1
- package/out/zero-cache/src/observability/metrics.js.map +0 -1
- package/out/zero-cache/src/scripts/decommission.js.map +0 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +0 -1
- package/out/zero-cache/src/scripts/permissions.js.map +0 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +0 -305
- package/out/zero-cache/src/server/anonymous-otel-start.js.map +0 -1
- package/out/zero-cache/src/server/inspector-delegate.js.map +0 -1
- package/out/zero-cache/src/server/logging.js.map +0 -1
- package/out/zero-cache/src/server/otel-diag-logger.js.map +0 -1
- package/out/zero-cache/src/server/otel-log-sink.js.map +0 -1
- package/out/zero-cache/src/server/otel-start.js +0 -53
- package/out/zero-cache/src/server/otel-start.js.map +0 -1
- package/out/zero-cache/src/server/priority-op.js.map +0 -1
- package/out/zero-cache/src/server/runner/main.js +0 -10
- package/out/zero-cache/src/server/runner/main.js.map +0 -1
- package/out/zero-cache/src/server/runner/run-worker.js.map +0 -1
- package/out/zero-cache/src/server/runner/runtime.js.map +0 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +0 -1
- package/out/zero-cache/src/server/worker-dispatcher.js.map +0 -1
- package/out/zero-cache/src/server/worker-urls.js.map +0 -1
- package/out/zero-cache/src/services/analyze.js +0 -69
- package/out/zero-cache/src/services/analyze.js.map +0 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +0 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +0 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +0 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +0 -176
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +0 -197
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +0 -920
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +0 -545
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +0 -162
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +0 -334
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +0 -155
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +0 -330
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js +0 -192
- package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/current.js +0 -56
- package/out/zero-cache/src/services/change-source/protocol/current.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +0 -158
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +0 -74
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +0 -191
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.js +0 -27
- package/out/zero-cache/src/services/change-streamer/snapshot.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/storer.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +0 -1
- package/out/zero-cache/src/services/heapz.js.map +0 -1
- package/out/zero-cache/src/services/http-service.js.map +0 -1
- package/out/zero-cache/src/services/life-cycle.js +0 -195
- package/out/zero-cache/src/services/life-cycle.js.map +0 -1
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +0 -1
- package/out/zero-cache/src/services/litestream/commands.js.map +0 -1
- package/out/zero-cache/src/services/mutagen/error.js.map +0 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +0 -1
- package/out/zero-cache/src/services/mutagen/pusher.js.map +0 -1
- package/out/zero-cache/src/services/replicator/change-processor.js.map +0 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +0 -1
- package/out/zero-cache/src/services/replicator/notifier.js.map +0 -1
- package/out/zero-cache/src/services/replicator/replication-status.js.map +0 -1
- package/out/zero-cache/src/services/replicator/replicator.js.map +0 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +0 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +0 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +0 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +0 -1
- package/out/zero-cache/src/services/replicator/schema/constants.js.map +0 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +0 -1
- package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +0 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js.map +0 -1
- package/out/zero-cache/src/services/replicator/write-worker.js.map +0 -1
- package/out/zero-cache/src/services/run-ast.js +0 -87
- package/out/zero-cache/src/services/run-ast.js.map +0 -1
- package/out/zero-cache/src/services/runner.js.map +0 -1
- package/out/zero-cache/src/services/running-state.js +0 -136
- package/out/zero-cache/src/services/running-state.js.map +0 -1
- package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js +0 -50
- package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +0 -1
- package/out/zero-cache/src/services/statz.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +0 -270
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +0 -109
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +0 -102
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +0 -628
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/row-set-signature.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js +0 -158
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +0 -176
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/tracer.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +0 -1235
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +0 -1
- package/out/zero-cache/src/types/error-with-level.js.map +0 -1
- package/out/zero-cache/src/types/http.js.map +0 -1
- package/out/zero-cache/src/types/lexi-version.js.map +0 -1
- package/out/zero-cache/src/types/lite.js.map +0 -1
- package/out/zero-cache/src/types/names.js.map +0 -1
- package/out/zero-cache/src/types/pg-data-type.js.map +0 -1
- package/out/zero-cache/src/types/pg-types.js.map +0 -1
- package/out/zero-cache/src/types/pg-versions.js.map +0 -1
- package/out/zero-cache/src/types/pg.js +0 -189
- package/out/zero-cache/src/types/pg.js.map +0 -1
- package/out/zero-cache/src/types/processes.js.map +0 -1
- package/out/zero-cache/src/types/profiler.js.map +0 -1
- package/out/zero-cache/src/types/row-key.js.map +0 -1
- package/out/zero-cache/src/types/shards.js.map +0 -1
- package/out/zero-cache/src/types/sql.js.map +0 -1
- package/out/zero-cache/src/types/state-version.js.map +0 -1
- package/out/zero-cache/src/types/streams.js.map +0 -1
- package/out/zero-cache/src/types/strings.js.map +0 -1
- package/out/zero-cache/src/types/subscription.js.map +0 -1
- package/out/zero-cache/src/types/timeout.js.map +0 -1
- package/out/zero-cache/src/types/url-params.js.map +0 -1
- package/out/zero-cache/src/types/websocket-handoff.js.map +0 -1
- package/out/zero-cache/src/types/ws.js.map +0 -1
- package/out/zero-cache/src/workers/connect-params.js.map +0 -1
- package/out/zero-cache/src/workers/connection.js +0 -229
- package/out/zero-cache/src/workers/connection.js.map +0 -1
- package/out/zero-cache/src/workers/mutator.js.map +0 -1
- package/out/zero-cache/src/workers/replicator.js.map +0 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +0 -1
- package/out/zero-cache/src/workers/syncer.js.map +0 -1
- package/out/zero-client/src/client/active-clients-manager.js.map +0 -1
- package/out/zero-client/src/client/client-error-kind-enum.js.map +0 -1
- package/out/zero-client/src/client/connection-manager.js +0 -295
- package/out/zero-client/src/client/connection-manager.js.map +0 -1
- package/out/zero-client/src/client/connection-status-enum.js +0 -20
- package/out/zero-client/src/client/connection-status-enum.js.map +0 -1
- package/out/zero-client/src/client/connection.js.map +0 -1
- package/out/zero-client/src/client/context.js.map +0 -1
- package/out/zero-client/src/client/crud-impl.js +0 -61
- package/out/zero-client/src/client/crud-impl.js.map +0 -1
- package/out/zero-client/src/client/crud.js.map +0 -1
- package/out/zero-client/src/client/custom.js +0 -63
- package/out/zero-client/src/client/custom.js.map +0 -1
- package/out/zero-client/src/client/delete-clients-manager.js.map +0 -1
- package/out/zero-client/src/client/enable-analytics.js.map +0 -1
- package/out/zero-client/src/client/error.js.map +0 -1
- package/out/zero-client/src/client/http-string.js.map +0 -1
- package/out/zero-client/src/client/inspector/client-group.js.map +0 -1
- package/out/zero-client/src/client/inspector/client.js.map +0 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +0 -1
- package/out/zero-client/src/client/inspector/inspector.js.map +0 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.js.map +0 -1
- package/out/zero-client/src/client/inspector/query.js.map +0 -1
- package/out/zero-client/src/client/ivm-branch.js.map +0 -1
- package/out/zero-client/src/client/keys.js.map +0 -1
- package/out/zero-client/src/client/log-options.js.map +0 -1
- package/out/zero-client/src/client/make-mutate-property.js.map +0 -1
- package/out/zero-client/src/client/make-replicache-mutators.js.map +0 -1
- package/out/zero-client/src/client/metric-name-enum.js.map +0 -1
- package/out/zero-client/src/client/metrics.js.map +0 -1
- package/out/zero-client/src/client/mutation-tracker.js.map +0 -1
- package/out/zero-client/src/client/mutator-proxy.js.map +0 -1
- package/out/zero-client/src/client/options.js.map +0 -1
- package/out/zero-client/src/client/query-manager.js.map +0 -1
- package/out/zero-client/src/client/reload-error-handler.js.map +0 -1
- package/out/zero-client/src/client/server-option.js.map +0 -1
- package/out/zero-client/src/client/update-needed-reason-type-enum.js +0 -27
- package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +0 -1
- package/out/zero-client/src/client/version.js +0 -9
- package/out/zero-client/src/client/version.js.map +0 -1
- package/out/zero-client/src/client/zero-poke-handler.js.map +0 -1
- package/out/zero-client/src/client/zero-rep.js.map +0 -1
- package/out/zero-client/src/client/zero.js +0 -1443
- package/out/zero-client/src/client/zero.js.map +0 -1
- package/out/zero-client/src/util/nanoid.js.map +0 -1
- package/out/zero-client/src/util/socket.d.ts +0 -3
- package/out/zero-client/src/util/socket.d.ts.map +0 -1
- package/out/zero-client/src/util/socket.js +0 -8
- package/out/zero-client/src/util/socket.js.map +0 -1
- package/out/zero-protocol/src/analyze-query-result.js +0 -120
- package/out/zero-protocol/src/analyze-query-result.js.map +0 -1
- package/out/zero-protocol/src/application-error.js.map +0 -1
- package/out/zero-protocol/src/ast.js.map +0 -1
- package/out/zero-protocol/src/change-desired-queries.js +0 -12
- package/out/zero-protocol/src/change-desired-queries.js.map +0 -1
- package/out/zero-protocol/src/client-schema.js.map +0 -1
- package/out/zero-protocol/src/close-connection.js.map +0 -1
- package/out/zero-protocol/src/connect.js +0 -47
- package/out/zero-protocol/src/connect.js.map +0 -1
- package/out/zero-protocol/src/custom-queries.js.map +0 -1
- package/out/zero-protocol/src/data.js.map +0 -1
- package/out/zero-protocol/src/delete-clients.js.map +0 -1
- package/out/zero-protocol/src/down.js.map +0 -1
- package/out/zero-protocol/src/error-kind-enum.js.map +0 -1
- package/out/zero-protocol/src/error-origin-enum.js.map +0 -1
- package/out/zero-protocol/src/error-reason-enum.js.map +0 -1
- package/out/zero-protocol/src/error.js +0 -84
- package/out/zero-protocol/src/error.js.map +0 -1
- package/out/zero-protocol/src/inspect-down.js.map +0 -1
- package/out/zero-protocol/src/inspect-up.js +0 -34
- package/out/zero-protocol/src/inspect-up.js.map +0 -1
- package/out/zero-protocol/src/mutate-server.js.map +0 -1
- package/out/zero-protocol/src/mutation-id.js.map +0 -1
- package/out/zero-protocol/src/mutation-type-enum.js.map +0 -1
- package/out/zero-protocol/src/mutation.js.map +0 -1
- package/out/zero-protocol/src/mutations-patch.js.map +0 -1
- package/out/zero-protocol/src/ping.js.map +0 -1
- package/out/zero-protocol/src/poke.js +0 -59
- package/out/zero-protocol/src/poke.js.map +0 -1
- package/out/zero-protocol/src/pong.js.map +0 -1
- package/out/zero-protocol/src/primary-key.js.map +0 -1
- package/out/zero-protocol/src/protocol-version.js.map +0 -1
- package/out/zero-protocol/src/pull.js.map +0 -1
- package/out/zero-protocol/src/push.js +0 -60
- package/out/zero-protocol/src/push.js.map +0 -1
- package/out/zero-protocol/src/queries-patch.js.map +0 -1
- package/out/zero-protocol/src/query-hash.js.map +0 -1
- package/out/zero-protocol/src/query-server.js.map +0 -1
- package/out/zero-protocol/src/row-patch.js.map +0 -1
- package/out/zero-protocol/src/up.js.map +0 -1
- package/out/zero-protocol/src/update-auth.js.map +0 -1
- package/out/zero-protocol/src/version.js.map +0 -1
- package/out/zero-react/src/use-connection-state.js +0 -17
- package/out/zero-react/src/use-connection-state.js.map +0 -1
- package/out/zero-react/src/use-query.js +0 -299
- package/out/zero-react/src/use-query.js.map +0 -1
- package/out/zero-react/src/use-zero-online.js +0 -20
- package/out/zero-react/src/use-zero-online.js.map +0 -1
- package/out/zero-react/src/zero-provider.js +0 -87
- package/out/zero-react/src/zero-provider.js.map +0 -1
- package/out/zero-schema/src/builder/relationship-builder.js.map +0 -1
- package/out/zero-schema/src/builder/schema-builder.js.map +0 -1
- package/out/zero-schema/src/builder/table-builder.js.map +0 -1
- package/out/zero-schema/src/compiled-permissions.js.map +0 -1
- package/out/zero-schema/src/name-mapper.js.map +0 -1
- package/out/zero-schema/src/permissions.js.map +0 -1
- package/out/zero-schema/src/schema-config.js.map +0 -1
- package/out/zero-server/src/adapters/drizzle.js.map +0 -1
- package/out/zero-server/src/adapters/kysely.js.map +0 -1
- package/out/zero-server/src/adapters/pg.js +0 -83
- package/out/zero-server/src/adapters/pg.js.map +0 -1
- package/out/zero-server/src/adapters/postgresjs.js.map +0 -1
- package/out/zero-server/src/adapters/prisma.js.map +0 -1
- package/out/zero-server/src/custom.js +0 -214
- package/out/zero-server/src/custom.js.map +0 -1
- package/out/zero-server/src/logging.js.map +0 -1
- package/out/zero-server/src/pg-query-executor.js.map +0 -1
- package/out/zero-server/src/process-mutations.js.map +0 -1
- package/out/zero-server/src/push-processor.js.map +0 -1
- package/out/zero-server/src/queries/process-queries.js.map +0 -1
- package/out/zero-server/src/schema.js.map +0 -1
- package/out/zero-server/src/zql-database.js.map +0 -1
- package/out/zero-solid/src/solid-view.js +0 -145
- package/out/zero-solid/src/solid-view.js.map +0 -1
- package/out/zero-solid/src/use-connection-state.js +0 -21
- package/out/zero-solid/src/use-connection-state.js.map +0 -1
- package/out/zero-solid/src/use-query.js +0 -64
- package/out/zero-solid/src/use-query.js.map +0 -1
- package/out/zero-solid/src/use-zero-online.js +0 -21
- package/out/zero-solid/src/use-zero-online.js.map +0 -1
- package/out/zero-solid/src/use-zero.js +0 -93
- package/out/zero-solid/src/use-zero.js.map +0 -1
- package/out/zero-types/src/format.js.map +0 -1
- package/out/zero-types/src/name-mapper.js.map +0 -1
- package/out/zql/src/builder/builder.js +0 -380
- package/out/zql/src/builder/builder.js.map +0 -1
- package/out/zql/src/builder/debug-delegate.js +0 -72
- package/out/zql/src/builder/debug-delegate.js.map +0 -1
- package/out/zql/src/builder/filter.js.map +0 -1
- package/out/zql/src/builder/like.js.map +0 -1
- package/out/zql/src/error.js.map +0 -1
- package/out/zql/src/ivm/array-view.js.map +0 -1
- package/out/zql/src/ivm/cap.js.map +0 -1
- package/out/zql/src/ivm/change.js.map +0 -1
- package/out/zql/src/ivm/constraint.js +0 -82
- package/out/zql/src/ivm/constraint.js.map +0 -1
- package/out/zql/src/ivm/data.js.map +0 -1
- package/out/zql/src/ivm/exists.js.map +0 -1
- package/out/zql/src/ivm/fan-in.js.map +0 -1
- package/out/zql/src/ivm/fan-out.js.map +0 -1
- package/out/zql/src/ivm/filter-operators.js.map +0 -1
- package/out/zql/src/ivm/filter-push.js.map +0 -1
- package/out/zql/src/ivm/filter.js.map +0 -1
- package/out/zql/src/ivm/flipped-join.js +0 -311
- package/out/zql/src/ivm/flipped-join.js.map +0 -1
- package/out/zql/src/ivm/join-utils.js.map +0 -1
- package/out/zql/src/ivm/join.js.map +0 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +0 -1
- package/out/zql/src/ivm/memory-source.js.map +0 -1
- package/out/zql/src/ivm/memory-storage.js.map +0 -1
- package/out/zql/src/ivm/operator.js.map +0 -1
- package/out/zql/src/ivm/push-accumulated.js.map +0 -1
- package/out/zql/src/ivm/skip-yields.js.map +0 -1
- package/out/zql/src/ivm/skip.js.map +0 -1
- package/out/zql/src/ivm/source.js.map +0 -1
- package/out/zql/src/ivm/stream.js.map +0 -1
- package/out/zql/src/ivm/take.js.map +0 -1
- package/out/zql/src/ivm/union-fan-in.js +0 -163
- package/out/zql/src/ivm/union-fan-in.js.map +0 -1
- package/out/zql/src/ivm/union-fan-out.js.map +0 -1
- package/out/zql/src/ivm/view-apply-change.js.map +0 -1
- package/out/zql/src/mutate/crud.js.map +0 -1
- package/out/zql/src/mutate/custom.js.map +0 -1
- package/out/zql/src/mutate/mutator-registry.js.map +0 -1
- package/out/zql/src/mutate/mutator.js.map +0 -1
- package/out/zql/src/planner/planner-builder.js.map +0 -1
- package/out/zql/src/planner/planner-connection.js.map +0 -1
- package/out/zql/src/planner/planner-constraint.js.map +0 -1
- package/out/zql/src/planner/planner-debug.js.map +0 -1
- package/out/zql/src/planner/planner-fan-in.js.map +0 -1
- package/out/zql/src/planner/planner-fan-out.js.map +0 -1
- package/out/zql/src/planner/planner-graph.js.map +0 -1
- package/out/zql/src/planner/planner-join.js +0 -261
- package/out/zql/src/planner/planner-join.js.map +0 -1
- package/out/zql/src/planner/planner-node.js.map +0 -1
- package/out/zql/src/planner/planner-source.js.map +0 -1
- package/out/zql/src/planner/planner-terminus.js.map +0 -1
- package/out/zql/src/query/complete-ordering.js.map +0 -1
- package/out/zql/src/query/create-builder.js.map +0 -1
- package/out/zql/src/query/error.js.map +0 -1
- package/out/zql/src/query/escape-like.js.map +0 -1
- package/out/zql/src/query/expression.js.map +0 -1
- package/out/zql/src/query/measure-push-operator.js.map +0 -1
- package/out/zql/src/query/metrics-delegate.js.map +0 -1
- package/out/zql/src/query/named.js.map +0 -1
- package/out/zql/src/query/query-delegate-base.js.map +0 -1
- package/out/zql/src/query/query-impl.js +0 -290
- package/out/zql/src/query/query-impl.js.map +0 -1
- package/out/zql/src/query/query-internals.js.map +0 -1
- package/out/zql/src/query/query-registry.js.map +0 -1
- package/out/zql/src/query/runnable-query-impl.js.map +0 -1
- package/out/zql/src/query/static-query.js.map +0 -1
- package/out/zql/src/query/ttl.js.map +0 -1
- package/out/zql/src/query/validate-input.js.map +0 -1
- package/out/zqlite/src/database-storage.js.map +0 -1
- package/out/zqlite/src/db.js.map +0 -1
- package/out/zqlite/src/explain-queries.js.map +0 -1
- package/out/zqlite/src/internal/sql-inline.js.map +0 -1
- package/out/zqlite/src/internal/sql.js.map +0 -1
- package/out/zqlite/src/internal/statement-cache.js.map +0 -1
- package/out/zqlite/src/query-builder.js.map +0 -1
- package/out/zqlite/src/query-delegate.js.map +0 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +0 -1
- package/out/zqlite/src/sqlite-cost-model.js.map +0 -1
- package/out/zqlite/src/sqlite-stat-fanout.js.map +0 -1
- package/out/zqlite/src/table-source.js +0 -313
- package/out/zqlite/src/table-source.js.map +0 -1
- /package/out/{analyze-query → packages/analyze-query}/src/bin-transform.js +0 -0
- /package/out/{ast-to-zql → packages/ast-to-zql}/src/ast-to-zql.js +0 -0
- /package/out/{ast-to-zql → packages/ast-to-zql}/src/bin.js +0 -0
- /package/out/{ast-to-zql → packages/ast-to-zql}/src/format.js +0 -0
- /package/out/{datadog → packages/datadog}/src/datadog-log-sink.js +0 -0
- /package/out/{otel → packages/otel}/src/enabled.js +0 -0
- /package/out/{otel → packages/otel}/src/log-options.js +0 -0
- /package/out/{otel → packages/otel}/src/maybe-time.js +0 -0
- /package/out/{otel → packages/otel}/src/span.js +0 -0
- /package/out/{otel → packages/otel}/src/version.js +0 -0
- /package/out/{replicache → packages/replicache}/src/async-iterable-to-array.js +0 -0
- /package/out/{replicache → packages/replicache}/src/bg-interval.js +0 -0
- /package/out/{replicache → packages/replicache}/src/btree/diff.js +0 -0
- /package/out/{replicache → packages/replicache}/src/btree/node.js +0 -0
- /package/out/{replicache → packages/replicache}/src/btree/read.js +0 -0
- /package/out/{replicache → packages/replicache}/src/btree/splice.js +0 -0
- /package/out/{replicache → packages/replicache}/src/call-default-fetch.js +0 -0
- /package/out/{replicache → packages/replicache}/src/config.js +0 -0
- /package/out/{replicache → packages/replicache}/src/connection-loop-delegates.js +0 -0
- /package/out/{replicache → packages/replicache}/src/connection-loop.js +0 -0
- /package/out/{replicache → packages/replicache}/src/cookies.js +0 -0
- /package/out/{replicache → packages/replicache}/src/dag/chunk.js +0 -0
- /package/out/{replicache → packages/replicache}/src/dag/gc.js +0 -0
- /package/out/{replicache → packages/replicache}/src/dag/key.js +0 -0
- /package/out/{replicache → packages/replicache}/src/dag/lazy-store.js +0 -0
- /package/out/{replicache → packages/replicache}/src/dag/store.js +0 -0
- /package/out/{replicache → packages/replicache}/src/dag/visitor.js +0 -0
- /package/out/{replicache → packages/replicache}/src/db/commit.js +0 -0
- /package/out/{replicache → packages/replicache}/src/db/index.js +0 -0
- /package/out/{replicache → packages/replicache}/src/db/read.js +0 -0
- /package/out/{replicache → packages/replicache}/src/db/rebase.js +0 -0
- /package/out/{replicache → packages/replicache}/src/db/write.js +0 -0
- /package/out/{replicache → packages/replicache}/src/deleted-clients.js +0 -0
- /package/out/{replicache → packages/replicache}/src/error-responses.js +0 -0
- /package/out/{replicache → packages/replicache}/src/expo-sqlite.js +0 -0
- /package/out/{replicache → packages/replicache}/src/frozen-json.js +0 -0
- /package/out/{replicache → packages/replicache}/src/get-default-puller.js +0 -0
- /package/out/{replicache → packages/replicache}/src/get-default-pusher.js +0 -0
- /package/out/{replicache → packages/replicache}/src/get-kv-store-provider.js +0 -0
- /package/out/{replicache → packages/replicache}/src/hash.js +0 -0
- /package/out/{replicache → packages/replicache}/src/http-request-info.js +0 -0
- /package/out/{replicache → packages/replicache}/src/impl.js +0 -0
- /package/out/{replicache → packages/replicache}/src/index-defs.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/idb-store-with-mem-fallback.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/idb-store.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/mem-store.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/op-sqlite/types.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/read-impl.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/write-impl-base.js +0 -0
- /package/out/{replicache → packages/replicache}/src/kv/write-impl.js +0 -0
- /package/out/{replicache → packages/replicache}/src/lazy.js +0 -0
- /package/out/{replicache → packages/replicache}/src/log-options.js +0 -0
- /package/out/{replicache → packages/replicache}/src/make-idb-name.js +0 -0
- /package/out/{replicache → packages/replicache}/src/mutation-recovery.js +0 -0
- /package/out/{replicache → packages/replicache}/src/new-client-channel.js +0 -0
- /package/out/{replicache → packages/replicache}/src/on-persist-channel.js +0 -0
- /package/out/{replicache → packages/replicache}/src/op-sqlite.js +0 -0
- /package/out/{replicache → packages/replicache}/src/patch-operation.js +0 -0
- /package/out/{replicache → packages/replicache}/src/pending-mutations.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/client-gc.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/client-group-gc.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/collect-idb-databases.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/gather-mem-only-visitor.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/gather-not-cached-visitor.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/heartbeat.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/idb-databases-store-db-name.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/idb-databases-store.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/make-client-id.js +0 -0
- /package/out/{replicache → packages/replicache}/src/persist/refresh.js +0 -0
- /package/out/{replicache → packages/replicache}/src/process-scheduler.js +0 -0
- /package/out/{replicache → packages/replicache}/src/pusher.js +0 -0
- /package/out/{replicache → packages/replicache}/src/replicache-impl.js +0 -0
- /package/out/{replicache → packages/replicache}/src/report-error.js +0 -0
- /package/out/{replicache → packages/replicache}/src/request-idle.js +0 -0
- /package/out/{replicache → packages/replicache}/src/scan-iterator.js +0 -0
- /package/out/{replicache → packages/replicache}/src/scan-options.js +0 -0
- /package/out/{replicache → packages/replicache}/src/set-interval-with-signal.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sqlite.js +0 -0
- /package/out/{replicache → packages/replicache}/src/subscriptions.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/diff.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/ids.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/patch.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/pull-error.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/push.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/request-id.js +0 -0
- /package/out/{replicache → packages/replicache}/src/sync/sync-head-name.js +0 -0
- /package/out/{replicache → packages/replicache}/src/to-error.js +0 -0
- /package/out/{replicache → packages/replicache}/src/transaction-closed-error.js +0 -0
- /package/out/{replicache → packages/replicache}/src/transactions.js +0 -0
- /package/out/{replicache → packages/replicache}/src/version.js +0 -0
- /package/out/{replicache → packages/replicache}/src/with-transactions.js +0 -0
- /package/out/{shared → packages/shared}/src/abort-error.js +0 -0
- /package/out/{shared → packages/shared}/src/arrays.js +0 -0
- /package/out/{shared → packages/shared}/src/asserts.js +0 -0
- /package/out/{shared → packages/shared}/src/bigint-json.js +0 -0
- /package/out/{shared → packages/shared}/src/binary-search.js +0 -0
- /package/out/{shared → packages/shared}/src/broadcast-channel.js +0 -0
- /package/out/{shared → packages/shared}/src/browser-env.js +0 -0
- /package/out/{shared → packages/shared}/src/btree-set.js +0 -0
- /package/out/{shared → packages/shared}/src/cache.js +0 -0
- /package/out/{shared → packages/shared}/src/centroid.js +0 -0
- /package/out/{shared → packages/shared}/src/config.js +0 -0
- /package/out/{shared → packages/shared}/src/custom-key-map.js +0 -0
- /package/out/{shared → packages/shared}/src/custom-key-set.js +0 -0
- /package/out/{shared → packages/shared}/src/deep-clone.js +0 -0
- /package/out/{shared → packages/shared}/src/deep-merge.js +0 -0
- /package/out/{shared → packages/shared}/src/document-visible.js +0 -0
- /package/out/{shared → packages/shared}/src/dotenv.js +0 -0
- /package/out/{shared → packages/shared}/src/error.js +0 -0
- /package/out/{shared → packages/shared}/src/has-own.js +0 -0
- /package/out/{shared → packages/shared}/src/hash.js +0 -0
- /package/out/{shared → packages/shared}/src/iterables.js +0 -0
- /package/out/{shared → packages/shared}/src/json-schema.js +0 -0
- /package/out/{shared → packages/shared}/src/json.js +0 -0
- /package/out/{shared → packages/shared}/src/logging-test-utils.js +0 -0
- /package/out/{shared → packages/shared}/src/logging.js +0 -0
- /package/out/{shared → packages/shared}/src/must.js +0 -0
- /package/out/{shared → packages/shared}/src/navigator.js +0 -0
- /package/out/{shared → packages/shared}/src/object-traversal.js +0 -0
- /package/out/{shared → packages/shared}/src/objects.js +0 -0
- /package/out/{shared → packages/shared}/src/options.js +0 -0
- /package/out/{shared → packages/shared}/src/parse-big-int.js +0 -0
- /package/out/{shared → packages/shared}/src/promise-race.js +0 -0
- /package/out/{shared → packages/shared}/src/rand.js +0 -0
- /package/out/{shared → packages/shared}/src/random-uint64.js +0 -0
- /package/out/{shared → packages/shared}/src/random-values.js +0 -0
- /package/out/{shared → packages/shared}/src/record-proxy.js +0 -0
- /package/out/{shared → packages/shared}/src/resolved-promises.js +0 -0
- /package/out/{shared → packages/shared}/src/sentinels.js +0 -0
- /package/out/{shared → packages/shared}/src/set-utils.js +0 -0
- /package/out/{shared → packages/shared}/src/size-of-value.js +0 -0
- /package/out/{shared → packages/shared}/src/sleep.js +0 -0
- /package/out/{shared → packages/shared}/src/sorted-entries.js +0 -0
- /package/out/{shared → packages/shared}/src/string-compare.js +0 -0
- /package/out/{shared → packages/shared}/src/subscribable.js +0 -0
- /package/out/{shared → packages/shared}/src/tdigest-schema.js +0 -0
- /package/out/{shared → packages/shared}/src/tdigest.js +0 -0
- /package/out/{z2s → packages/z2s}/src/compiler.js +0 -0
- /package/out/{z2s → packages/z2s}/src/sql.js +0 -0
- /package/out/{zero → packages/zero}/src/server/runner/main.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/auth/auth.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/auth/jwt.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/auth/load-permissions.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/auth/read-authorizer.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/auth/write-authorizer.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/config/network.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/config/normalize.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/config/server-context.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/custom/fetch.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/custom-queries/transform-query.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/create.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/delete-lite-db.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/lite-tables.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/mode-enum.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/pg-copy-binary.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/pg-copy.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/pg-to-lite.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/pg-type-parser.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/run-transaction.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/specs.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/statements.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/transaction-pool.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/db/warmup.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/observability/events.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/observability/metrics.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/scripts/decommission.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/scripts/deploy-permissions.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/scripts/permissions.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/inspector-delegate.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/logging.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/otel-diag-logger.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/otel-log-sink.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/priority-op.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/runner/run-worker.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/runner/runtime.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/runner/zero-dispatcher.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/worker-dispatcher.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/server/worker-urls.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/common/backfill-manager.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/common/change-stream-multiplexer.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/common/replica-schema.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/backfill-metadata.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/decommission.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/logical-replication/binary-reader.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/logical-replication/pgoutput-parser.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/logical-replication/stream.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/lsn.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/schema/published.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/pg/schema/validation.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/control.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/downstream.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/json.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/path.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/status.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/current/upstream.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-source/protocol/mod.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/backup-monitor.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/broadcast.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/change-streamer-service.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/change-streamer.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/forwarder.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/replica-monitor.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/storer.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/change-streamer/subscriber.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/heapz.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/http-service.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/limiter/sliding-window-limiter.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/litestream/commands.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/mutagen/error.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/mutagen/mutagen.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/mutagen/pusher.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/change-processor.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/incremental-sync.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/notifier.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/replication-status.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/replicator.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/reporter/recorder.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/reporter/report-schema.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/change-log.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/column-metadata.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/constants.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/replication-state.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/schema/table-metadata.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/write-worker-client.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/replicator/write-worker.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/runner.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/statz.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/active-users-gauge.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/client-schema.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/connection-context-manager.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/cvr-store.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/cvr.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/drain-coordinator.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/row-record-cache.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/row-set-signature.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/schema/cvr.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/snapshotter.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/tracer.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/services/view-syncer/ttl-clock.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/error-with-level.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/http.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/lexi-version.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/lite.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/names.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/pg-data-type.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/pg-types.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/pg-versions.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/processes.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/profiler.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/row-key.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/shards.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/sql.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/state-version.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/streams.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/strings.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/subscription.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/timeout.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/url-params.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/websocket-handoff.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/types/ws.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/workers/connect-params.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/workers/mutator.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/workers/replicator.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/workers/syncer-ws-message-handler.js +0 -0
- /package/out/{zero-cache → packages/zero-cache}/src/workers/syncer.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/active-clients-manager.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/bindings.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/client-error-kind-enum.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/connection.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/context.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/crud.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/delete-clients-manager.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/enable-analytics.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/error.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/http-string.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/inspector/client-group.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/inspector/client.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/inspector/html-dialog-prompt.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/inspector/inspector.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/inspector/lazy-inspector.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/inspector/query.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/ivm-branch.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/keys.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/log-options.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/make-mutate-property.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/make-replicache-mutators.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/metric-name-enum.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/metrics.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/mutation-tracker.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/mutator-proxy.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/options.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/query-manager.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/reload-error-handler.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/server-option.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/zero-poke-handler.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/client/zero-rep.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/mod.js +0 -0
- /package/out/{zero-client → packages/zero-client}/src/util/nanoid.js +0 -0
- /package/out/{zero-pg → packages/zero-pg}/src/mod.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/application-error.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/ast.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/client-schema.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/close-connection.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/custom-queries.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/data.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/delete-clients.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/down.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/error-kind-enum.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/error-origin-enum.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/error-reason-enum.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/inspect-down.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/mutate-server.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/mutation-id.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/mutation-type-enum.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/mutation.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/mutations-patch.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/ping.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/pong.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/primary-key.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/protocol-version.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/pull.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/queries-patch.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/query-hash.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/query-server.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/row-patch.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/up.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/update-auth.js +0 -0
- /package/out/{zero-protocol → packages/zero-protocol}/src/version.js +0 -0
- /package/out/{zero-react → packages/zero-react}/src/bindings.js +0 -0
- /package/out/{zero-react → packages/zero-react}/src/mod.js +0 -0
- /package/out/{zero-react → packages/zero-react}/src/zero.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/builder/relationship-builder.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/builder/schema-builder.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/builder/table-builder.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/compiled-permissions.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/name-mapper.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/permissions.js +0 -0
- /package/out/{zero-schema → packages/zero-schema}/src/schema-config.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/adapters/drizzle.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/adapters/kysely.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/adapters/postgresjs.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/adapters/prisma.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/logging.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/mod.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/pg-query-executor.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/process-mutations.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/push-processor.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/queries/process-queries.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/schema.js +0 -0
- /package/out/{zero-server → packages/zero-server}/src/zql-database.js +0 -0
- /package/out/{zero-solid → packages/zero-solid}/src/bindings.js +0 -0
- /package/out/{zero-solid → packages/zero-solid}/src/mod.js +0 -0
- /package/out/{zero-solid → packages/zero-solid}/src/zero.js +0 -0
- /package/out/{zero-types → packages/zero-types}/src/format.js +0 -0
- /package/out/{zero-types → packages/zero-types}/src/name-mapper.js +0 -0
- /package/out/{zql → packages/zql}/src/builder/filter.js +0 -0
- /package/out/{zql → packages/zql}/src/builder/like.js +0 -0
- /package/out/{zql → packages/zql}/src/error.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/array-view.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/cap.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/change.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/data.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/exists.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/fan-in.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/fan-out.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/filter-operators.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/filter-push.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/filter.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/join-utils.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/join.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/maybe-split-and-push-edit-change.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/memory-source.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/memory-storage.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/operator.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/push-accumulated.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/skip-yields.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/skip.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/source.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/stream.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/take.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/union-fan-out.js +0 -0
- /package/out/{zql → packages/zql}/src/ivm/view-apply-change.js +0 -0
- /package/out/{zql → packages/zql}/src/mutate/crud.js +0 -0
- /package/out/{zql → packages/zql}/src/mutate/custom.js +0 -0
- /package/out/{zql → packages/zql}/src/mutate/mutator-registry.js +0 -0
- /package/out/{zql → packages/zql}/src/mutate/mutator.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-builder.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-connection.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-constraint.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-debug.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-fan-in.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-fan-out.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-graph.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-node.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-source.js +0 -0
- /package/out/{zql → packages/zql}/src/planner/planner-terminus.js +0 -0
- /package/out/{zql → packages/zql}/src/query/complete-ordering.js +0 -0
- /package/out/{zql → packages/zql}/src/query/create-builder.js +0 -0
- /package/out/{zql → packages/zql}/src/query/error.js +0 -0
- /package/out/{zql → packages/zql}/src/query/escape-like.js +0 -0
- /package/out/{zql → packages/zql}/src/query/expression.js +0 -0
- /package/out/{zql → packages/zql}/src/query/measure-push-operator.js +0 -0
- /package/out/{zql → packages/zql}/src/query/metrics-delegate.js +0 -0
- /package/out/{zql → packages/zql}/src/query/named.js +0 -0
- /package/out/{zql → packages/zql}/src/query/query-delegate-base.js +0 -0
- /package/out/{zql → packages/zql}/src/query/query-internals.js +0 -0
- /package/out/{zql → packages/zql}/src/query/query-registry.js +0 -0
- /package/out/{zql → packages/zql}/src/query/query.js +0 -0
- /package/out/{zql → packages/zql}/src/query/runnable-query-impl.js +0 -0
- /package/out/{zql → packages/zql}/src/query/static-query.js +0 -0
- /package/out/{zql → packages/zql}/src/query/ttl.js +0 -0
- /package/out/{zql → packages/zql}/src/query/validate-input.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/database-storage.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/db.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/explain-queries.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/internal/sql-inline.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/internal/sql.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/internal/statement-cache.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/mod.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/query-builder.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/query-delegate.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/resolve-scalar-subqueries.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/sqlite-cost-model.js +0 -0
- /package/out/{zqlite → packages/zqlite}/src/sqlite-stat-fanout.js +0 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { assert, unreachable } from "../../../../shared/src/asserts.js";
|
|
2
|
+
import { assertJSONValue } from "../../../../shared/src/json.js";
|
|
3
|
+
import { promiseVoid } from "../../../../shared/src/resolved-promises.js";
|
|
4
|
+
import { parse, valita_exports } from "../../../../shared/src/valita.js";
|
|
5
|
+
import { rowSchema } from "../../../../zero-protocol/src/data.js";
|
|
6
|
+
import { ProtocolError } from "../../../../zero-protocol/src/error.js";
|
|
7
|
+
import { primaryKeyValueRecordSchema } from "../../../../zero-protocol/src/primary-key.js";
|
|
8
|
+
import { mutationResultSchema } from "../../../../zero-protocol/src/mutation.js";
|
|
9
|
+
import { upstreamSchema } from "../../types/shards.js";
|
|
10
|
+
import { getOrCreateCounter, getOrCreateLatencyHistogram } from "../../observability/metrics.js";
|
|
11
|
+
import { cmpVersions, cookieToVersion, versionToCookie, versionToNullableCookie } from "./schema/types.js";
|
|
12
|
+
import { getLogLevel, wrapWithProtocolError } from "../../types/error-with-level.js";
|
|
13
|
+
//#region ../zero-cache/src/services/view-syncer/client-handler.ts
|
|
14
|
+
var NOOP = {
|
|
15
|
+
addPatch: () => promiseVoid,
|
|
16
|
+
cancel: () => promiseVoid,
|
|
17
|
+
end: () => promiseVoid
|
|
18
|
+
};
|
|
19
|
+
/** Wraps PokeHandlers for multiple clients in a single PokeHandler. */
|
|
20
|
+
function startPoke(clients, tentativeVersion) {
|
|
21
|
+
const pokers = clients.map((c) => c.startPoke(tentativeVersion));
|
|
22
|
+
return {
|
|
23
|
+
addPatch: async (patch) => {
|
|
24
|
+
await Promise.allSettled(pokers.map((poker) => poker.addPatch(patch)));
|
|
25
|
+
},
|
|
26
|
+
cancel: async () => {
|
|
27
|
+
await Promise.allSettled(pokers.map((poker) => poker.cancel()));
|
|
28
|
+
},
|
|
29
|
+
end: async (finalVersion) => {
|
|
30
|
+
await Promise.allSettled(pokers.map((poker) => poker.end(finalVersion)));
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var PART_COUNT_FLUSH_THRESHOLD = 100;
|
|
35
|
+
/**
|
|
36
|
+
* Handles a single `ViewSyncer` connection.
|
|
37
|
+
*/
|
|
38
|
+
var ClientHandler = class {
|
|
39
|
+
#clientGroupID;
|
|
40
|
+
clientID;
|
|
41
|
+
wsID;
|
|
42
|
+
#zeroClientsTable;
|
|
43
|
+
#zeroMutationsTable;
|
|
44
|
+
#lc;
|
|
45
|
+
#downstream;
|
|
46
|
+
#baseVersion;
|
|
47
|
+
#pokeTime = getOrCreateLatencyHistogram("sync", "poke.time", "Time elapsed for each poke transaction. Canceled / noop pokes are excluded.");
|
|
48
|
+
#pokeTransactions = getOrCreateCounter("sync", "poke.transactions", "Count of poke transactions.");
|
|
49
|
+
#pokedRows = getOrCreateCounter("sync", "poke.rows", "Count of poked rows.");
|
|
50
|
+
constructor(lc, clientGroupID, clientID, wsID, shard, baseCookie, downstream) {
|
|
51
|
+
lc.debug?.("new client handler");
|
|
52
|
+
this.#clientGroupID = clientGroupID;
|
|
53
|
+
this.clientID = clientID;
|
|
54
|
+
this.wsID = wsID;
|
|
55
|
+
this.#zeroClientsTable = `${upstreamSchema(shard)}.clients`;
|
|
56
|
+
this.#zeroMutationsTable = `${upstreamSchema(shard)}.mutations`;
|
|
57
|
+
this.#lc = lc;
|
|
58
|
+
this.#downstream = downstream;
|
|
59
|
+
this.#baseVersion = cookieToVersion(baseCookie);
|
|
60
|
+
}
|
|
61
|
+
version() {
|
|
62
|
+
return this.#baseVersion;
|
|
63
|
+
}
|
|
64
|
+
async #push(msg) {
|
|
65
|
+
const { result } = this.#downstream.push(msg);
|
|
66
|
+
await result;
|
|
67
|
+
}
|
|
68
|
+
fail(e) {
|
|
69
|
+
this.#lc[getLogLevel(e)]?.(`view-syncer closing connection with error: ${String(e)}`, e);
|
|
70
|
+
this.#downstream.fail(wrapWithProtocolError(e));
|
|
71
|
+
}
|
|
72
|
+
close(reason) {
|
|
73
|
+
this.#lc.debug?.(`view-syncer closing connection: ${reason}`);
|
|
74
|
+
this.#downstream.cancel();
|
|
75
|
+
}
|
|
76
|
+
startPoke(tentativeVersion) {
|
|
77
|
+
const pokeID = versionToCookie(tentativeVersion);
|
|
78
|
+
const lc = this.#lc.withContext("pokeID", pokeID);
|
|
79
|
+
if (cmpVersions(this.#baseVersion, tentativeVersion) >= 0) {
|
|
80
|
+
lc.info?.(`already caught up, not sending poke.`);
|
|
81
|
+
return NOOP;
|
|
82
|
+
}
|
|
83
|
+
const baseCookie = versionToNullableCookie(this.#baseVersion);
|
|
84
|
+
const cookie = versionToCookie(tentativeVersion);
|
|
85
|
+
lc.debug?.(`starting poke from ${baseCookie} to ${cookie}`);
|
|
86
|
+
const start = performance.now();
|
|
87
|
+
const pokeStart = {
|
|
88
|
+
pokeID,
|
|
89
|
+
baseCookie
|
|
90
|
+
};
|
|
91
|
+
let pokeStarted = false;
|
|
92
|
+
let body;
|
|
93
|
+
let partCount = 0;
|
|
94
|
+
const ensureBody = async () => {
|
|
95
|
+
if (!pokeStarted) {
|
|
96
|
+
await this.#push(["pokeStart", pokeStart]);
|
|
97
|
+
pokeStarted = true;
|
|
98
|
+
}
|
|
99
|
+
return body ??= { pokeID };
|
|
100
|
+
};
|
|
101
|
+
const flushBody = async () => {
|
|
102
|
+
if (body) {
|
|
103
|
+
await this.#push(["pokePart", body]);
|
|
104
|
+
body = void 0;
|
|
105
|
+
partCount = 0;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const addPatch = async (patchToVersion) => {
|
|
109
|
+
const { patch, toVersion } = patchToVersion;
|
|
110
|
+
if (cmpVersions(toVersion, this.#baseVersion) <= 0) return;
|
|
111
|
+
const body = await ensureBody();
|
|
112
|
+
const { type, op } = patch;
|
|
113
|
+
switch (type) {
|
|
114
|
+
case "query": {
|
|
115
|
+
const patches = patch.clientID ? (body.desiredQueriesPatches ??= {})[patch.clientID] ??= [] : body.gotQueriesPatch ??= [];
|
|
116
|
+
if (op === "put") patches.push({
|
|
117
|
+
op,
|
|
118
|
+
hash: patch.id
|
|
119
|
+
});
|
|
120
|
+
else patches.push({
|
|
121
|
+
op,
|
|
122
|
+
hash: patch.id
|
|
123
|
+
});
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "row":
|
|
127
|
+
if (patch.id.table === this.#zeroClientsTable) this.#updateLMIDs(body.lastMutationIDChanges ??= {}, patch);
|
|
128
|
+
else if (patch.id.table === this.#zeroMutationsTable) {
|
|
129
|
+
const patches = body.mutationsPatch ??= [];
|
|
130
|
+
if (op === "put") {
|
|
131
|
+
const row = parse(ensureSafeJSON(patch.contents), mutationRowSchema, "passthrough");
|
|
132
|
+
patches.push({
|
|
133
|
+
op: "put",
|
|
134
|
+
mutation: {
|
|
135
|
+
id: {
|
|
136
|
+
clientID: row.clientID,
|
|
137
|
+
id: row.mutationID
|
|
138
|
+
},
|
|
139
|
+
result: row.result
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
} else {
|
|
143
|
+
const { clientID, mutationID } = patch.id.rowKey;
|
|
144
|
+
assert(typeof clientID === "string", "client id must be a string");
|
|
145
|
+
const id = Number(mutationID);
|
|
146
|
+
assert(!Number.isNaN(id) && Number.isFinite(id) && id >= 0, "mutation id must be a finite number");
|
|
147
|
+
patches.push({
|
|
148
|
+
op: "del",
|
|
149
|
+
id: {
|
|
150
|
+
clientID,
|
|
151
|
+
id
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
} else (body.rowsPatch ??= []).push(makeRowPatch(patch));
|
|
156
|
+
break;
|
|
157
|
+
default: unreachable(patch);
|
|
158
|
+
}
|
|
159
|
+
if (++partCount >= PART_COUNT_FLUSH_THRESHOLD) await flushBody();
|
|
160
|
+
};
|
|
161
|
+
return {
|
|
162
|
+
addPatch: async (patchToVersion) => {
|
|
163
|
+
try {
|
|
164
|
+
await addPatch(patchToVersion);
|
|
165
|
+
if (patchToVersion.patch.type === "row") this.#pokedRows.add(1);
|
|
166
|
+
} catch (e) {
|
|
167
|
+
this.#downstream.fail(wrapWithProtocolError(e));
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
cancel: async () => {
|
|
171
|
+
if (pokeStarted) await this.#push(["pokeEnd", {
|
|
172
|
+
pokeID,
|
|
173
|
+
cookie: "",
|
|
174
|
+
cancel: true
|
|
175
|
+
}]);
|
|
176
|
+
},
|
|
177
|
+
end: async (finalVersion) => {
|
|
178
|
+
const cookie = versionToCookie(finalVersion);
|
|
179
|
+
if (!pokeStarted) {
|
|
180
|
+
if (cmpVersions(this.#baseVersion, finalVersion) === 0) return;
|
|
181
|
+
await this.#push(["pokeStart", pokeStart]);
|
|
182
|
+
} else if (cmpVersions(this.#baseVersion, finalVersion) >= 0) throw new Error(`Patches were sent but finalVersion ${finalVersion} is not greater than baseVersion ${this.#baseVersion}`);
|
|
183
|
+
await flushBody();
|
|
184
|
+
await this.#push(["pokeEnd", {
|
|
185
|
+
pokeID,
|
|
186
|
+
cookie
|
|
187
|
+
}]);
|
|
188
|
+
this.#baseVersion = finalVersion;
|
|
189
|
+
const elapsed = performance.now() - start;
|
|
190
|
+
this.#pokeTransactions.add(1);
|
|
191
|
+
this.#pokeTime.recordMs(elapsed);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
async sendDeleteClients(lc, deletedClientIDs, deletedClientGroupIDs) {
|
|
196
|
+
const deleteClientsBody = {};
|
|
197
|
+
if (deletedClientIDs.length > 0) deleteClientsBody.clientIDs = deletedClientIDs;
|
|
198
|
+
if (deletedClientGroupIDs.length > 0) deleteClientsBody.clientGroupIDs = deletedClientGroupIDs;
|
|
199
|
+
lc.debug?.("sending deleteClients", deleteClientsBody);
|
|
200
|
+
await this.#push(["deleteClients", deleteClientsBody]);
|
|
201
|
+
}
|
|
202
|
+
sendQueryTransformApplicationErrors(errors) {
|
|
203
|
+
this.#push(["transformError", errors]);
|
|
204
|
+
}
|
|
205
|
+
sendQueryTransformFailedError(error) {
|
|
206
|
+
this.fail(new ProtocolError(error));
|
|
207
|
+
}
|
|
208
|
+
sendInspectResponse(lc, response) {
|
|
209
|
+
lc.debug?.("sending inspect response", response);
|
|
210
|
+
this.#downstream.push(["inspect", response]);
|
|
211
|
+
}
|
|
212
|
+
#updateLMIDs(lmids, patch) {
|
|
213
|
+
if (patch.op === "put") {
|
|
214
|
+
const { clientGroupID, clientID, lastMutationID } = parse(ensureSafeJSON(patch.contents), lmidRowSchema, "passthrough");
|
|
215
|
+
if (clientGroupID !== this.#clientGroupID) this.#lc.error?.(`Received clients row for wrong clientGroupID. Ignoring.`, clientGroupID);
|
|
216
|
+
else lmids[clientID] = lastMutationID;
|
|
217
|
+
} else patch.op;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
var lmidRowSchema = valita_exports.object({
|
|
221
|
+
clientGroupID: valita_exports.string(),
|
|
222
|
+
clientID: valita_exports.string(),
|
|
223
|
+
lastMutationID: valita_exports.number()
|
|
224
|
+
});
|
|
225
|
+
var mutationRowSchema = valita_exports.object({
|
|
226
|
+
clientGroupID: valita_exports.string(),
|
|
227
|
+
clientID: valita_exports.string(),
|
|
228
|
+
mutationID: valita_exports.number(),
|
|
229
|
+
result: mutationResultSchema
|
|
230
|
+
});
|
|
231
|
+
function makeRowPatch(patch) {
|
|
232
|
+
const { op, id: { table: tableName, rowKey: id } } = patch;
|
|
233
|
+
switch (op) {
|
|
234
|
+
case "put": return {
|
|
235
|
+
op: "put",
|
|
236
|
+
tableName,
|
|
237
|
+
value: parse(ensureSafeJSON(patch.contents), rowSchema)
|
|
238
|
+
};
|
|
239
|
+
case "del": return {
|
|
240
|
+
op,
|
|
241
|
+
tableName,
|
|
242
|
+
id: parse(id, primaryKeyValueRecordSchema)
|
|
243
|
+
};
|
|
244
|
+
default: unreachable(op);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Column values of type INT8 are returned as the `bigint` from the
|
|
249
|
+
* Postgres library. These are converted to `number` if they are within
|
|
250
|
+
* the safe Number range, allowing the protocol to support numbers larger
|
|
251
|
+
* than 32-bits. Values outside of the safe number range (e.g. > 2^53) will
|
|
252
|
+
* result in an Error.
|
|
253
|
+
*/
|
|
254
|
+
function ensureSafeJSON(row) {
|
|
255
|
+
const modified = Object.entries(row).filter(([k, v]) => {
|
|
256
|
+
if (typeof v === "bigint") {
|
|
257
|
+
if (v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER) return true;
|
|
258
|
+
throw new Error(`Value of "${k}" exceeds safe Number range (${v})`);
|
|
259
|
+
} else if (typeof v === "object") assertJSONValue(v);
|
|
260
|
+
return false;
|
|
261
|
+
}).map(([k, v]) => [k, Number(v)]);
|
|
262
|
+
return modified.length ? {
|
|
263
|
+
...row,
|
|
264
|
+
...Object.fromEntries(modified)
|
|
265
|
+
} : row;
|
|
266
|
+
}
|
|
267
|
+
//#endregion
|
|
268
|
+
export { ClientHandler, startPoke };
|
|
269
|
+
|
|
270
|
+
//# sourceMappingURL=client-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-handler.js","names":["#clientGroupID","#zeroClientsTable","#zeroMutationsTable","#lc","#downstream","#pokeTime","#pokeTransactions","#pokedRows","#baseVersion","#push","#updateLMIDs"],"sources":["../../../../../../../zero-cache/src/services/view-syncer/client-handler.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert, unreachable} from '../../../../shared/src/asserts.ts';\nimport type {JSONObject} from '../../../../shared/src/bigint-json.ts';\nimport {\n assertJSONValue,\n type JSONObject as SafeJSONObject,\n} from '../../../../shared/src/json.ts';\nimport {promiseVoid} from '../../../../shared/src/resolved-promises.ts';\nimport * as v from '../../../../shared/src/valita.ts';\nimport type {Writable} from '../../../../shared/src/writable.ts';\nimport type {ErroredQuery} from '../../../../zero-protocol/src/custom-queries.ts';\nimport {rowSchema} from '../../../../zero-protocol/src/data.ts';\nimport type {DeleteClientsBody} from '../../../../zero-protocol/src/delete-clients.ts';\nimport type {Downstream} from '../../../../zero-protocol/src/down.ts';\nimport {\n ProtocolError,\n type TransformFailedBody,\n} from '../../../../zero-protocol/src/error.ts';\nimport type {InspectDownBody} from '../../../../zero-protocol/src/inspect-down.ts';\nimport {mutationResultSchema} from '../../../../zero-protocol/src/mutation.ts';\nimport type {\n PokePartBody,\n PokeStartBody,\n} from '../../../../zero-protocol/src/poke.ts';\nimport {primaryKeyValueRecordSchema} from '../../../../zero-protocol/src/primary-key.ts';\nimport type {RowPatchOp} from '../../../../zero-protocol/src/row-patch.ts';\nimport {\n getOrCreateCounter,\n getOrCreateLatencyHistogram,\n} from '../../observability/metrics.ts';\nimport {\n getLogLevel,\n wrapWithProtocolError,\n} from '../../types/error-with-level.ts';\nimport {upstreamSchema, type ShardID} from '../../types/shards.ts';\nimport type {Subscription} from '../../types/subscription.ts';\nimport {\n cmpVersions,\n cookieToVersion,\n versionToCookie,\n versionToNullableCookie,\n type CVRVersion,\n type DelQueryPatch,\n type NullableCVRVersion,\n type PutQueryPatch,\n type RowID,\n} from './schema/types.ts';\n\nexport type PutRowPatch = {\n type: 'row';\n op: 'put';\n id: RowID;\n contents: JSONObject;\n};\n\nexport type DeleteRowPatch = {\n type: 'row';\n op: 'del';\n id: RowID;\n};\n\nexport type RowPatch = PutRowPatch | DeleteRowPatch;\nexport type ConfigPatch = DelQueryPatch | PutQueryPatch;\n\nexport type Patch = ConfigPatch | RowPatch;\n\nexport type PatchToVersion = {\n patch: Patch;\n toVersion: CVRVersion;\n};\n\nexport interface PokeHandler {\n addPatch(patch: PatchToVersion): Promise<void>;\n cancel(): Promise<void>;\n end(finalVersion: CVRVersion): Promise<void>;\n}\n\nconst NOOP: PokeHandler = {\n addPatch: () => promiseVoid,\n cancel: () => promiseVoid,\n end: () => promiseVoid,\n};\n\n/** Wraps PokeHandlers for multiple clients in a single PokeHandler. */\nexport function startPoke(\n clients: ClientHandler[],\n tentativeVersion: CVRVersion,\n): PokeHandler {\n const pokers = clients.map(c => c.startPoke(tentativeVersion));\n\n // Promise.allSettled() ensures that a failed (e.g. disconnected) client\n // does not prevent other clients from receiving the pokes. However, the\n // rate (per client group) will be limited by the slowest connection.\n return {\n addPatch: async patch => {\n await Promise.allSettled(pokers.map(poker => poker.addPatch(patch)));\n },\n cancel: async () => {\n await Promise.allSettled(pokers.map(poker => poker.cancel()));\n },\n end: async finalVersion => {\n await Promise.allSettled(pokers.map(poker => poker.end(finalVersion)));\n },\n };\n}\n\n// Semi-arbitrary threshold at which poke body parts are flushed.\n// When row size is being computed, that should be used as a threshold instead.\nconst PART_COUNT_FLUSH_THRESHOLD = 100;\n\n/**\n * Handles a single `ViewSyncer` connection.\n */\nexport class ClientHandler {\n readonly #clientGroupID: string;\n readonly clientID: string;\n readonly wsID: string;\n readonly #zeroClientsTable: string;\n readonly #zeroMutationsTable: string;\n readonly #lc: LogContext;\n readonly #downstream: Subscription<Downstream>;\n #baseVersion: NullableCVRVersion;\n\n readonly #pokeTime = getOrCreateLatencyHistogram(\n 'sync',\n 'poke.time',\n 'Time elapsed for each poke transaction. Canceled / noop pokes are excluded.',\n );\n\n readonly #pokeTransactions = getOrCreateCounter(\n 'sync',\n 'poke.transactions',\n 'Count of poke transactions.',\n );\n\n readonly #pokedRows = getOrCreateCounter(\n 'sync',\n 'poke.rows',\n 'Count of poked rows.',\n );\n\n constructor(\n lc: LogContext,\n clientGroupID: string,\n clientID: string,\n wsID: string,\n shard: ShardID,\n baseCookie: string | null,\n downstream: Subscription<Downstream>,\n ) {\n lc.debug?.('new client handler');\n this.#clientGroupID = clientGroupID;\n this.clientID = clientID;\n this.wsID = wsID;\n this.#zeroClientsTable = `${upstreamSchema(shard)}.clients`;\n this.#zeroMutationsTable = `${upstreamSchema(shard)}.mutations`;\n this.#lc = lc;\n this.#downstream = downstream;\n this.#baseVersion = cookieToVersion(baseCookie);\n }\n\n version(): NullableCVRVersion {\n return this.#baseVersion;\n }\n\n async #push(msg: Downstream): Promise<void> {\n const {result} = this.#downstream.push(msg);\n await result;\n }\n\n fail(e: unknown) {\n this.#lc[getLogLevel(e)]?.(\n `view-syncer closing connection with error: ${String(e)}`,\n e,\n );\n this.#downstream.fail(wrapWithProtocolError(e));\n }\n\n close(reason: string) {\n this.#lc.debug?.(`view-syncer closing connection: ${reason}`);\n this.#downstream.cancel();\n }\n\n startPoke(tentativeVersion: CVRVersion): PokeHandler {\n const pokeID = versionToCookie(tentativeVersion);\n const lc = this.#lc.withContext('pokeID', pokeID);\n\n if (cmpVersions(this.#baseVersion, tentativeVersion) >= 0) {\n lc.info?.(`already caught up, not sending poke.`);\n return NOOP;\n }\n\n const baseCookie = versionToNullableCookie(this.#baseVersion);\n const cookie = versionToCookie(tentativeVersion);\n lc.debug?.(`starting poke from ${baseCookie} to ${cookie}`);\n\n const start = performance.now();\n\n const pokeStart: PokeStartBody = {pokeID, baseCookie};\n\n let pokeStarted = false;\n let body: PokePartBody | undefined;\n let partCount = 0;\n const ensureBody = async () => {\n if (!pokeStarted) {\n await this.#push(['pokeStart', pokeStart]);\n pokeStarted = true;\n }\n return (body ??= {pokeID});\n };\n const flushBody = async () => {\n if (body) {\n await this.#push(['pokePart', body]);\n body = undefined;\n partCount = 0;\n }\n };\n\n const addPatch = async (patchToVersion: PatchToVersion) => {\n const {patch, toVersion} = patchToVersion;\n if (cmpVersions(toVersion, this.#baseVersion) <= 0) {\n return;\n }\n const body = await ensureBody();\n\n const {type, op} = patch;\n switch (type) {\n case 'query': {\n const patches = patch.clientID\n ? ((body.desiredQueriesPatches ??= {})[patch.clientID] ??= [])\n : (body.gotQueriesPatch ??= []);\n if (op === 'put') {\n patches.push({op, hash: patch.id});\n } else {\n patches.push({op, hash: patch.id});\n }\n break;\n }\n case 'row':\n if (patch.id.table === this.#zeroClientsTable) {\n this.#updateLMIDs((body.lastMutationIDChanges ??= {}), patch);\n } else if (patch.id.table === this.#zeroMutationsTable) {\n const patches = (body.mutationsPatch ??= []);\n if (op === 'put') {\n const row = v.parse(\n ensureSafeJSON(patch.contents),\n mutationRowSchema,\n 'passthrough',\n );\n patches.push({\n op: 'put',\n mutation: {\n id: {\n clientID: row.clientID,\n id: row.mutationID,\n },\n result: row.result,\n },\n });\n } else {\n const {clientID, mutationID} = patch.id.rowKey;\n assert(\n typeof clientID === 'string',\n 'client id must be a string',\n );\n const id = Number(mutationID);\n assert(\n !Number.isNaN(id) && Number.isFinite(id) && id >= 0,\n 'mutation id must be a finite number',\n );\n patches.push({\n op: 'del',\n id: {\n clientID,\n id,\n },\n });\n }\n } else {\n (body.rowsPatch ??= []).push(makeRowPatch(patch));\n }\n break;\n default:\n unreachable(patch);\n }\n\n if (++partCount >= PART_COUNT_FLUSH_THRESHOLD) {\n await flushBody();\n }\n };\n\n return {\n addPatch: async (patchToVersion: PatchToVersion) => {\n try {\n await addPatch(patchToVersion);\n if (patchToVersion.patch.type === 'row') {\n this.#pokedRows.add(1);\n }\n } catch (e) {\n this.#downstream.fail(wrapWithProtocolError(e));\n }\n },\n\n cancel: async () => {\n if (pokeStarted) {\n await this.#push(['pokeEnd', {pokeID, cookie: '', cancel: true}]);\n }\n },\n\n end: async (finalVersion: CVRVersion) => {\n const cookie = versionToCookie(finalVersion);\n if (!pokeStarted) {\n if (cmpVersions(this.#baseVersion, finalVersion) === 0) {\n return; // Nothing changed and nothing was sent.\n }\n await this.#push(['pokeStart', pokeStart]);\n } else if (cmpVersions(this.#baseVersion, finalVersion) >= 0) {\n // Sanity check: If the poke was started, the finalVersion\n // must be > #baseVersion.\n throw new Error(\n `Patches were sent but finalVersion ${finalVersion} is ` +\n `not greater than baseVersion ${this.#baseVersion}`,\n );\n }\n await flushBody();\n await this.#push(['pokeEnd', {pokeID, cookie}]);\n this.#baseVersion = finalVersion;\n\n const elapsed = performance.now() - start;\n this.#pokeTransactions.add(1);\n this.#pokeTime.recordMs(elapsed);\n },\n };\n }\n\n async sendDeleteClients(\n lc: LogContext,\n deletedClientIDs: string[],\n deletedClientGroupIDs: string[],\n ) {\n const deleteClientsBody: Writable<DeleteClientsBody> = {};\n if (deletedClientIDs.length > 0) {\n deleteClientsBody.clientIDs = deletedClientIDs;\n }\n if (deletedClientGroupIDs.length > 0) {\n deleteClientsBody.clientGroupIDs = deletedClientGroupIDs;\n }\n lc.debug?.('sending deleteClients', deleteClientsBody);\n await this.#push(['deleteClients', deleteClientsBody]);\n }\n\n sendQueryTransformApplicationErrors(errors: ErroredQuery[]) {\n void this.#push(['transformError', errors]);\n }\n\n sendQueryTransformFailedError(error: TransformFailedBody) {\n this.fail(new ProtocolError(error));\n }\n\n sendInspectResponse(lc: LogContext, response: InspectDownBody): void {\n lc.debug?.('sending inspect response', response);\n this.#downstream.push(['inspect', response]);\n }\n\n #updateLMIDs(lmids: Record<string, number>, patch: RowPatch) {\n if (patch.op === 'put') {\n const row = ensureSafeJSON(patch.contents);\n const {clientGroupID, clientID, lastMutationID} = v.parse(\n row,\n lmidRowSchema,\n 'passthrough',\n );\n if (clientGroupID !== this.#clientGroupID) {\n this.#lc.error?.(\n `Received clients row for wrong clientGroupID. Ignoring.`,\n clientGroupID,\n );\n } else {\n lmids[clientID] = lastMutationID;\n }\n } else {\n // The 'constrain' and 'del' ops for clients can be ignored.\n patch.op satisfies 'constrain' | 'del';\n }\n }\n}\n\n// Note: The {APP_ID}_{SHARD_ID}.clients table is set up in replicator/initial-sync.ts.\nconst lmidRowSchema = v.object({\n clientGroupID: v.string(),\n clientID: v.string(),\n lastMutationID: v.number(), // Actually returned as a bigint, but converted by ensureSafeJSON().\n});\n\nconst mutationRowSchema = v.object({\n clientGroupID: v.string(),\n clientID: v.string(),\n mutationID: v.number(),\n result: mutationResultSchema,\n});\n\nfunction makeRowPatch(patch: RowPatch): RowPatchOp {\n const {\n op,\n id: {table: tableName, rowKey: id},\n } = patch;\n\n switch (op) {\n case 'put':\n return {\n op: 'put',\n tableName,\n value: v.parse(ensureSafeJSON(patch.contents), rowSchema),\n };\n\n case 'del':\n return {\n op,\n tableName,\n id: v.parse(id, primaryKeyValueRecordSchema),\n };\n\n default:\n unreachable(op);\n }\n}\n\n/**\n * Column values of type INT8 are returned as the `bigint` from the\n * Postgres library. These are converted to `number` if they are within\n * the safe Number range, allowing the protocol to support numbers larger\n * than 32-bits. Values outside of the safe number range (e.g. > 2^53) will\n * result in an Error.\n */\nexport function ensureSafeJSON(row: JSONObject): SafeJSONObject {\n const modified = Object.entries(row)\n .filter(([k, v]) => {\n if (typeof v === 'bigint') {\n if (v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER) {\n return true; // send this entry onto the next map() step.\n }\n throw new Error(`Value of \"${k}\" exceeds safe Number range (${v})`);\n } else if (typeof v === 'object') {\n assertJSONValue(v);\n }\n return false;\n })\n .map(([k, v]) => [k, Number(v)]);\n\n return modified.length\n ? {...row, ...Object.fromEntries(modified)}\n : (row as SafeJSONObject);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-schema.js","names":[],"sources":["../../../../../../../zero-cache/src/services/view-syncer/client-schema.ts"],"sourcesContent":["import {toSorted} from '../../../../shared/src/iterables.ts';\nimport {must} from '../../../../shared/src/must.ts';\nimport {\n difference,\n equals,\n intersection,\n} from '../../../../shared/src/set-utils.ts';\nimport type {ClientSchema} from '../../../../zero-protocol/src/client-schema.ts';\nimport {ErrorOrigin} from '../../../../zero-protocol/src/error-origin.ts';\nimport {ProtocolError} from '../../../../zero-protocol/src/error.ts';\nimport type {LiteAndZqlSpec, LiteTableSpec} from '../../db/specs.ts';\nimport {appSchema, upstreamSchema, type ShardID} from '../../types/shards.ts';\nimport {ZERO_VERSION_COLUMN_NAME} from '../replicator/schema/constants.ts';\n\nexport function checkClientSchema(\n shardID: ShardID,\n clientSchema: ClientSchema,\n tableSpecs: Map<string, LiteAndZqlSpec>,\n fullTables: Map<string, LiteTableSpec>,\n) {\n if (fullTables.size === 0) {\n throw new ProtocolError({\n kind: 'Internal',\n message:\n `No tables have been synced from upstream. ` +\n `Please check that the ZERO_UPSTREAM_DB has been properly set.`,\n origin: ErrorOrigin.ZeroCache,\n });\n }\n const errors: string[] = [];\n const clientTables = new Set(Object.keys(clientSchema.tables));\n const missingTables = difference(clientTables, tableSpecs);\n for (const missing of toSorted(missingTables)) {\n if (fullTables.has(missing)) {\n errors.push(\n `The \"${missing}\" table is missing a primary key or non-null ` +\n `unique index and thus cannot be synced to the client`,\n );\n } else {\n const app = appSchema(shardID) + '.';\n const shard = upstreamSchema(shardID) + '.';\n const syncedTables = [...tableSpecs.keys()]\n .filter(t => !t.startsWith(app) && !t.startsWith(shard))\n .sort()\n .map(t => `\"${t}\"`)\n .join(',');\n const schemaTip =\n missing.includes('.') && !syncedTables.includes('.')\n ? ` Note that zero does not sync tables from non-public schemas ` +\n `by default. Make sure you have defined a custom ` +\n `ZERO_APP_PUBLICATION to sync tables from non-public schemas.`\n : '';\n errors.push(\n `The \"${missing}\" table does not exist or is not ` +\n `one of the replicated tables: ${syncedTables}.${schemaTip}`,\n );\n }\n }\n const tables = intersection(tableSpecs, clientTables);\n for (const table of toSorted(tables)) {\n const clientSpec = clientSchema.tables[table];\n const serverSpec = must(tableSpecs.get(table)); // guaranteed by intersection\n const fullSpec = must(fullTables.get(table));\n\n const clientColumns = new Set(Object.keys(clientSpec.columns));\n const syncedColumns = new Set(Object.keys(serverSpec.zqlSpec));\n const missingColumns = difference(clientColumns, syncedColumns);\n for (const missing of toSorted(missingColumns)) {\n if (fullSpec.columns[missing]) {\n errors.push(\n `The \"${table}\".\"${missing}\" column cannot be synced because it ` +\n `is of an unsupported data type \"${fullSpec.columns[missing].dataType}\"`,\n );\n } else {\n const columns = [...syncedColumns]\n .filter(c => c !== ZERO_VERSION_COLUMN_NAME)\n .sort()\n .map(c => `\"${c}\"`)\n .join(',');\n\n errors.push(\n `The \"${table}\".\"${missing}\" column does not exist ` +\n `or is not one of the replicated columns: ${columns}.`,\n );\n }\n }\n const columns = intersection(clientColumns, syncedColumns);\n for (const column of columns) {\n const clientType = clientSpec.columns[column].type;\n const serverType = serverSpec.zqlSpec[column].type;\n if (clientSpec.columns[column].type !== serverSpec.zqlSpec[column].type) {\n errors.push(\n `The \"${table}\".\"${column}\" column's upstream type \"${serverType}\" ` +\n `does not match the client type \"${clientType}\"`,\n );\n }\n }\n if (!clientSpec.primaryKey) {\n errors.push(\n `The \"${table}\" table's client schema does not specify a primary key.`,\n );\n } else {\n const clientPrimaryKey = new Set(clientSpec.primaryKey);\n if (\n !serverSpec.tableSpec.allPotentialPrimaryKeys.some(key =>\n equals(clientPrimaryKey, new Set(key)),\n )\n ) {\n errors.push(\n `The \"${table}\" table's primaryKey <${clientSpec.primaryKey.join(',')}> ` +\n `is not associated with a non-null unique index.`,\n );\n }\n }\n }\n if (errors.length) {\n throw new ProtocolError({\n kind: 'SchemaVersionNotSupported',\n message: errors.join('\\n'),\n origin: ErrorOrigin.ZeroCache,\n });\n }\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,kBACd,SACA,cACA,YACA,YACA;CACA,IAAI,WAAW,SAAS,GACtB,MAAM,IAAI,cAAc;EACtB,MAAM;EACN,SACE;EAEF,QAAQ;CACV,CAAC;CAEH,MAAM,SAAmB,CAAC;CAC1B,MAAM,eAAe,IAAI,IAAI,OAAO,KAAK,aAAa,MAAM,CAAC;CAC7D,MAAM,gBAAgB,WAAW,cAAc,UAAU;CACzD,KAAK,MAAM,WAAW,SAAS,aAAa,GAC1C,IAAI,WAAW,IAAI,OAAO,GACxB,OAAO,KACL,QAAQ,QAAQ,kGAElB;MACK;EACL,MAAM,MAAM,UAAU,OAAO,IAAI;EACjC,MAAM,QAAQ,eAAe,OAAO,IAAI;EACxC,MAAM,eAAe,CAAC,GAAG,WAAW,KAAK,CAAC,EACvC,QAAO,MAAK,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,EAAE,WAAW,KAAK,CAAC,EACtD,KAAK,EACL,KAAI,MAAK,IAAI,EAAE,EAAE,EACjB,KAAK,GAAG;EACX,MAAM,YACJ,QAAQ,SAAS,GAAG,KAAK,CAAC,aAAa,SAAS,GAAG,IAC/C,8KAGA;EACN,OAAO,KACL,QAAQ,QAAQ,iEACmB,aAAa,GAAG,WACrD;CACF;CAEF,MAAM,SAAS,aAAa,YAAY,YAAY;CACpD,KAAK,MAAM,SAAS,SAAS,MAAM,GAAG;EACpC,MAAM,aAAa,aAAa,OAAO;EACvC,MAAM,aAAa,KAAK,WAAW,IAAI,KAAK,CAAC;EAC7C,MAAM,WAAW,KAAK,WAAW,IAAI,KAAK,CAAC;EAE3C,MAAM,gBAAgB,IAAI,IAAI,OAAO,KAAK,WAAW,OAAO,CAAC;EAC7D,MAAM,gBAAgB,IAAI,IAAI,OAAO,KAAK,WAAW,OAAO,CAAC;EAC7D,MAAM,iBAAiB,WAAW,eAAe,aAAa;EAC9D,KAAK,MAAM,WAAW,SAAS,cAAc,GAC3C,IAAI,SAAS,QAAQ,UACnB,OAAO,KACL,QAAQ,MAAM,KAAK,QAAQ,uEACU,SAAS,QAAQ,SAAS,SAAS,EAC1E;OACK;GACL,MAAM,UAAU,CAAC,GAAG,aAAa,EAC9B,QAAO,MAAK,MAAM,wBAAwB,EAC1C,KAAK,EACL,KAAI,MAAK,IAAI,EAAE,EAAE,EACjB,KAAK,GAAG;GAEX,OAAO,KACL,QAAQ,MAAM,KAAK,QAAQ,mEACmB,QAAQ,EACxD;EACF;EAEF,MAAM,UAAU,aAAa,eAAe,aAAa;EACzD,KAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,aAAa,WAAW,QAAQ,QAAQ;GAC9C,MAAM,aAAa,WAAW,QAAQ,QAAQ;GAC9C,IAAI,WAAW,QAAQ,QAAQ,SAAS,WAAW,QAAQ,QAAQ,MACjE,OAAO,KACL,QAAQ,MAAM,KAAK,OAAO,4BAA4B,WAAW,oCAC5B,WAAW,EAClD;EAEJ;EACA,IAAI,CAAC,WAAW,YACd,OAAO,KACL,QAAQ,MAAM,wDAChB;OACK;GACL,MAAM,mBAAmB,IAAI,IAAI,WAAW,UAAU;GACtD,IACE,CAAC,WAAW,UAAU,wBAAwB,MAAK,QACjD,OAAO,kBAAkB,IAAI,IAAI,GAAG,CAAC,CACvC,GAEA,OAAO,KACL,QAAQ,MAAM,wBAAwB,WAAW,WAAW,KAAK,GAAG,EAAE,kDAExE;EAEJ;CACF;CACA,IAAI,OAAO,QACT,MAAM,IAAI,cAAc;EACtB,MAAM;EACN,SAAS,OAAO,KAAK,IAAI;EACzB,QAAQ;CACV,CAAC;AAEL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-context-manager.js","names":["#lc","#connections","#validateLegacyJWT","#now","#revalidateIntervalMs","#retransformIntervalMs","#queryConfig","#pushConfig","#removeConnection","#nextInsertionOrder","#storeConnection","#refreshBackgroundConnectionContext","#updateBackgroundRetransformDeadline","#mustGetConnectionContext","#demoteConnection","#getConnectionContext","#group","#setGroup","#nextRevalidateAt","#getBackgroundConnectionContext","#sharedRetransformReady","#setBackgroundConnection"],"sources":["../../../../../../../zero-cache/src/services/view-syncer/connection-context-manager.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {InitConnectionBody} from '../../../../zero-protocol/src/connect.ts';\nimport {ErrorKind} from '../../../../zero-protocol/src/error-kind.ts';\nimport {ErrorOrigin} from '../../../../zero-protocol/src/error-origin.ts';\nimport type {UpdateAuthBody} from '../../../../zero-protocol/src/update-auth.ts';\nimport {\n authEquals,\n resolveAuth,\n type Auth,\n type ValidateLegacyJWT,\n} from '../../auth/auth.ts';\nimport type {ZeroConfig} from '../../config/zero-config.ts';\nimport {compileUrlPattern} from '../../custom/fetch.ts';\nimport {ProtocolErrorWithLevel} from '../../types/error-with-level.ts';\nimport type {ConnectParams} from '../../workers/connect-params.ts';\n\nexport type ConnectionState = 'provisional' | 'validated';\n\n/**\n * Normalized user identity shared by live connection state and group auth state.\n * `id: null` means logged out.\n */\nexport type UserState = {readonly id: string | null};\n\n/**\n * Delineates the two paths for validating a connection: either server can validate\n * the user's identity and return a definitive userID to trust, or we fall back to\n * trusting the one provided by the client in the incoming query params.\n */\nexport type ConnectionValidation =\n | {kind: 'client-fallback'}\n | {kind: 'server-validated'; validatedUserID: string | null};\n\n/**\n * Identifies one live websocket for a client slot.\n */\nexport type ConnectionSelector = {\n readonly clientID: string;\n readonly wsID: string;\n};\n\ntype FetchConfig = ZeroConfig['query'];\n\nexport type HeaderOptions = {\n readonly apiKey?: string | undefined;\n readonly customHeaders?: Readonly<Record<string, string>> | undefined;\n readonly allowedClientHeaders?: readonly string[] | undefined;\n readonly cookie?: string | undefined;\n readonly origin?: string | undefined;\n};\n\nexport type ConnectionFetchContext = {\n readonly url: string | undefined;\n readonly allowedUrlPatterns: readonly URLPattern[] | undefined;\n readonly headerOptions: HeaderOptions;\n};\n\n/**\n * A snapshot of one live connection tracked by the manager.\n *\n * `revalidateAt` is only populated while the connection is `validated`.\n */\nexport type ConnectionContext = {\n readonly state: ConnectionState;\n\n readonly clientID: string;\n readonly wsID: string;\n readonly user: UserState;\n\n readonly auth: Auth | undefined;\n\n readonly profileID: string | null;\n readonly baseCookie: string | null;\n readonly protocolVersion: number;\n\n readonly revision: number;\n\n readonly revalidateAt: number | undefined;\n\n readonly insertionOrder: number;\n\n readonly queryContext: ConnectionFetchContext;\n readonly mutateContext: ConnectionFetchContext;\n};\n\n/**\n * Group-scoped auth state shared across the live connections.\n *\n * The background connection is the validated connection currently used for\n * shared background work. Retransform happens on a group level, and uses\n * the background connection's credential to refetch the latest queries.\n */\nexport type GroupAuthState = {\n readonly pinnedUser: UserState | undefined;\n\n readonly backgroundConnection: ConnectionSelector | undefined;\n readonly retransformAt: number | undefined;\n // Defer all maintenance in case a transient failure occurs.\n readonly maintenanceNotBeforeAt: number | undefined;\n};\n\nexport type ConnectionContextManager = {\n registerConnection(\n selector: ConnectionSelector,\n connectParams: ConnectParams,\n auth?: Auth,\n ): Readonly<ConnectionContext>;\n\n initConnection(\n selector: ConnectionSelector,\n body: InitConnectionBody,\n ): Readonly<ConnectionContext>;\n\n updateAuth(\n selector: ConnectionSelector,\n body: UpdateAuthBody,\n ): Promise<Readonly<ConnectionContext>>;\n\n validateConnection(\n selector: ConnectionSelector,\n revision: number,\n validation: ConnectionValidation,\n ):\n | Readonly<{\n connection: ConnectionContext;\n group: GroupAuthState;\n }>\n | undefined;\n\n failConnection(\n selector: ConnectionSelector,\n revision: number,\n ): Readonly<ConnectionContext> | undefined;\n closeConnection(\n selector: ConnectionSelector,\n ): Readonly<ConnectionContext> | undefined;\n\n markBackgroundRetransformSuccess(\n selector: ConnectionSelector,\n revision: number,\n ): void;\n\n setSharedRetransformReady(ready: boolean): void;\n\n deferMaintenance(kind: 'revalidate' | 'retransform'): void;\n\n getConnectionContext(\n selector: ConnectionSelector,\n ): Readonly<ConnectionContext> | undefined;\n mustGetConnectionContext(\n selector: ConnectionSelector,\n ): Readonly<ConnectionContext>;\n\n getBackgroundConnectionContext(): Readonly<ConnectionContext> | undefined;\n mustGetBackgroundConnectionContext(): Readonly<ConnectionContext>;\n\n getGroupState(): Readonly<GroupAuthState>;\n\n planMaintenance(): {\n dueRevalidations: Readonly<ConnectionContext>[];\n dueRetransform: boolean;\n earliestDeadlineAt: number | undefined;\n };\n};\n\n/**\n * State machine for the auth state of a single `ViewSyncerService`.\n *\n * Connections are registered as `provisional`, optionally backfilled with\n * `initConnection` metadata, and then promoted to `validated` once their\n * effective `userID` is confirmed as valid. The manager also tracks which\n * validated connection currently serves as the group's background connection.\n */\nexport class ConnectionContextManagerImpl implements ConnectionContextManager {\n readonly #lc: LogContext;\n\n // The live connection records, keyed by clientID\n readonly #connections = new Map<string, ConnectionContext>();\n #group: GroupAuthState = {\n pinnedUser: undefined,\n backgroundConnection: undefined,\n retransformAt: undefined,\n maintenanceNotBeforeAt: undefined,\n };\n\n readonly #validateLegacyJWT: ValidateLegacyJWT | undefined;\n\n readonly #now: () => number;\n readonly #revalidateIntervalMs: number | undefined;\n readonly #retransformIntervalMs: number | undefined;\n readonly #queryConfig: FetchConfig | undefined;\n readonly #pushConfig: FetchConfig | undefined;\n #sharedRetransformReady = false;\n #nextInsertionOrder = 0;\n\n constructor(\n lc: LogContext,\n revalidateIntervalSeconds?: number,\n retransformIntervalSeconds?: number,\n queryConfig?: FetchConfig,\n pushConfig?: FetchConfig,\n validateLegacyJWT?: ValidateLegacyJWT,\n now?: () => number,\n ) {\n this.#lc = lc;\n this.#now = now ?? Date.now;\n this.#revalidateIntervalMs =\n revalidateIntervalSeconds === undefined\n ? undefined\n : revalidateIntervalSeconds * 1000;\n this.#retransformIntervalMs =\n retransformIntervalSeconds === undefined\n ? undefined\n : retransformIntervalSeconds * 1000;\n this.#queryConfig = queryConfig;\n this.#pushConfig = pushConfig;\n this.#validateLegacyJWT = validateLegacyJWT;\n }\n\n /**\n * Creates or replaces the live record for a websocket connection.\n *\n * Re-registering the same `clientID` drops the old socket record and starts\n * the replacement back in `provisional` state.\n */\n registerConnection(\n selector: ConnectionSelector,\n connectParams: ConnectParams,\n auth?: Auth,\n ): Readonly<ConnectionContext> {\n this.#removeConnection(selector);\n\n const getContext = (type: 'query' | 'mutate'): ConnectionFetchContext => {\n const config = type === 'query' ? this.#queryConfig : this.#pushConfig;\n\n return {\n url: config?.url?.[0],\n allowedUrlPatterns: config?.url?.map(compileUrlPattern),\n headerOptions: {\n customHeaders: undefined,\n origin: connectParams.origin,\n apiKey: config?.apiKey,\n allowedClientHeaders: cloneAllowedClientHeaders(\n config?.allowedClientHeaders,\n ),\n cookie: config?.forwardCookies ? connectParams.httpCookie : undefined,\n },\n };\n };\n\n const connection: ConnectionContext = {\n state: 'provisional',\n\n clientID: connectParams.clientID,\n wsID: connectParams.wsID,\n revision: 0,\n user: {id: connectParams.userID ?? null},\n auth,\n\n profileID: connectParams.profileID,\n baseCookie: connectParams.baseCookie,\n protocolVersion: connectParams.protocolVersion,\n\n revalidateAt: undefined,\n\n queryContext: getContext('query'),\n mutateContext: getContext('mutate'),\n\n insertionOrder: ++this.#nextInsertionOrder,\n };\n this.#storeConnection(connection);\n this.#refreshBackgroundConnectionContext();\n this.#updateBackgroundRetransformDeadline(false);\n return connection;\n }\n\n /**\n * Backfills `initConnection` data for sockets that were registered before the\n * client could send its full init payload.\n *\n * This updates metadata only; it does not validate the connection.\n */\n initConnection(\n selector: ConnectionSelector,\n body: InitConnectionBody,\n ): Readonly<ConnectionContext> {\n const connection = this.#mustGetConnectionContext(selector);\n\n let queryContext = connection.queryContext;\n let mutateContext = connection.mutateContext;\n\n if (body.userQueryURL) {\n queryContext = {\n ...queryContext,\n url: body.userQueryURL,\n };\n }\n if (body.userQueryHeaders) {\n queryContext = {\n ...queryContext,\n headerOptions: {\n ...queryContext.headerOptions,\n customHeaders: cloneCustomHeaders(body.userQueryHeaders),\n },\n };\n }\n if (body.userPushURL) {\n mutateContext = {\n ...mutateContext,\n url: body.userPushURL,\n };\n }\n if (body.userPushHeaders) {\n mutateContext = {\n ...mutateContext,\n headerOptions: {\n ...mutateContext.headerOptions,\n customHeaders: cloneCustomHeaders(body.userPushHeaders),\n },\n };\n }\n\n return this.#demoteConnection({\n ...connection,\n revision: connection.revision + 1,\n queryContext,\n mutateContext,\n });\n }\n\n /**\n * A material auth change demotes the connection back to provisional until it\n * is validated again.\n */\n async updateAuth(\n selector: ConnectionSelector,\n body: UpdateAuthBody,\n ): Promise<Readonly<ConnectionContext>> {\n const connection = this.#mustGetConnectionContext(selector);\n\n const nextAuth = await resolveAuth(\n this.#lc,\n connection.auth,\n connection.user.id,\n body.auth,\n this.#validateLegacyJWT,\n );\n\n const authChanged = !authEquals(connection.auth, nextAuth);\n if (authChanged) {\n return this.#demoteConnection({\n ...connection,\n auth: nextAuth,\n revision: connection.revision + 1,\n });\n }\n\n if (nextAuth === connection.auth) {\n return connection;\n }\n\n return this.#storeConnection({\n ...connection,\n auth: nextAuth,\n });\n }\n\n /**\n * Validates one connection against the group's pinned `userID`.\n *\n * The first successful validation binds the group `userID`. Later\n * validations must match it. Validation also refreshes the connection's\n * revalidation deadline and may pick the connection as the group\n * background connection if none is currently available. If the websocket is\n * gone by the time async validation finishes, this becomes a no-op.\n */\n validateConnection(\n selector: ConnectionSelector,\n revision: number,\n validation: ConnectionValidation,\n ):\n | Readonly<{\n connection: ConnectionContext;\n group: GroupAuthState;\n }>\n | undefined {\n const connection = this.#getConnectionContext(selector);\n if (!connection) {\n return undefined;\n }\n\n if (connection.revision !== revision) {\n this.#lc.debug?.('Skipping validateConnection for stale revision', {\n clientID: selector.clientID,\n attemptedRevision: revision,\n currentRevision: connection.revision,\n });\n return undefined;\n }\n\n let validatedUserState: UserState | undefined;\n\n // If the API server has validated the user's identity, we ensure that\n // the connection's claimed userID matches it.\n if (validation.kind === 'server-validated') {\n validatedUserState = {id: validation.validatedUserID};\n\n // Check that the ws connection userID provided by the client\n // matches the validated userID from the API server.\n if (connection.user.id !== validatedUserState.id) {\n throw new ProtocolErrorWithLevel(\n {\n kind: ErrorKind.Unauthorized,\n message:\n 'Connection userID does not match validated server userID.',\n origin: ErrorOrigin.ZeroCache,\n },\n 'warn',\n );\n }\n }\n\n // The incoming user state is either the validated user state from the server\n // or the WS client's claimed user state if no server validation occurred.\n const incomingUserState = validatedUserState ?? connection.user;\n\n // Once a client group is validated, every later validated connection must\n // agree with that pinned identity.\n if (\n this.#group.pinnedUser !== undefined &&\n this.#group.pinnedUser.id !== incomingUserState.id\n ) {\n throw new ProtocolErrorWithLevel(\n {\n kind: ErrorKind.Unauthorized,\n message:\n 'Client groups are pinned to a single userID. Connection userID does not match existing client group userID.',\n origin: ErrorOrigin.ZeroCache,\n },\n 'warn',\n );\n }\n\n if (this.#group.pinnedUser === undefined) {\n this.#setGroup({\n ...this.#group,\n pinnedUser: incomingUserState,\n });\n }\n\n const validatedConnection = this.#storeConnection({\n ...connection,\n state: 'validated',\n revalidateAt: this.#nextRevalidateAt(),\n });\n this.#refreshBackgroundConnectionContext(validatedConnection);\n this.#updateBackgroundRetransformDeadline(false);\n\n return {\n connection: validatedConnection,\n group: this.getGroupState(),\n };\n }\n\n /** Removes one connection due to failed auth and updates all derived background/deadline state. */\n failConnection(\n selector: ConnectionSelector,\n revision: number,\n ): ConnectionContext | undefined {\n return this.#removeConnection(selector, revision);\n }\n\n /** Removes one disconnected connection and updates all derived background/deadline state. */\n closeConnection(selector: ConnectionSelector): ConnectionContext | undefined {\n return this.#removeConnection(selector);\n }\n\n /**\n * Records a successful background retransform. This starts a fresh interval\n * from the manager clock when shared retransform is schedulable, or\n * clears the deadline if it is not.\n */\n markBackgroundRetransformSuccess(\n selector: ConnectionSelector,\n revision: number,\n ): void {\n const backgroundConnection = this.#getBackgroundConnectionContext();\n if (!backgroundConnection) {\n return;\n }\n if (\n backgroundConnection.clientID !== selector.clientID ||\n backgroundConnection.wsID !== selector.wsID ||\n backgroundConnection.revision !== revision\n ) {\n return;\n }\n this.#updateBackgroundRetransformDeadline(true);\n }\n\n setSharedRetransformReady(ready: boolean): void {\n if (this.#sharedRetransformReady === ready) {\n return;\n }\n this.#sharedRetransformReady = ready;\n this.#updateBackgroundRetransformDeadline(true);\n }\n\n deferMaintenance(kind: 'revalidate' | 'retransform'): void {\n const intervalMs =\n kind === 'revalidate'\n ? this.#revalidateIntervalMs\n : this.#retransformIntervalMs;\n if (intervalMs === undefined) {\n return;\n }\n this.#setGroup({\n ...this.#group,\n maintenanceNotBeforeAt: Math.max(\n this.#group.maintenanceNotBeforeAt ?? 0,\n this.#now() + intervalMs,\n ),\n });\n }\n\n /** Returns the current live record for a client slot, if any. */\n getConnectionContext(\n selector: ConnectionSelector,\n ): Readonly<ConnectionContext> | undefined {\n return this.#getConnectionContext(selector);\n }\n\n /** Returns the live record for one websocket or throws if it is unavailable. */\n mustGetConnectionContext(\n selector: ConnectionSelector,\n ): Readonly<ConnectionContext> {\n return this.#mustGetConnectionContext(selector);\n }\n\n /** Returns the current background connection, if one exists. */\n getBackgroundConnectionContext(): Readonly<ConnectionContext> | undefined {\n return this.#getBackgroundConnectionContext();\n }\n\n mustGetBackgroundConnectionContext(): Readonly<ConnectionContext> {\n const backgroundConnection = this.#getBackgroundConnectionContext();\n if (!backgroundConnection) {\n throw new ProtocolErrorWithLevel(\n {\n kind: ErrorKind.InvalidConnectionRequest,\n message:\n 'No validated connection is available for shared query work.',\n origin: ErrorOrigin.ZeroCache,\n },\n 'warn',\n );\n }\n return backgroundConnection;\n }\n\n /** Returns the shared group auth state. */\n getGroupState(): Readonly<GroupAuthState> {\n return this.#group;\n }\n\n /**\n * Reports which maintenance work is currently due.\n *\n * The result is a pure snapshot: callers decide which actions to run and\n * when to wake up next. `earliestDeadlineAt` is the earliest outstanding\n * maintenance deadline, including overdue work, unless a transient failure\n * has deferred all scheduled maintenance until `maintenanceNotBeforeAt`.\n */\n planMaintenance(): {\n dueRevalidations: Readonly<ConnectionContext>[];\n dueRetransform: boolean;\n earliestDeadlineAt: number | undefined;\n } {\n const dueRevalidations: Readonly<ConnectionContext>[] = [];\n const now = this.#now();\n let earliestDeadlineAt = this.#group.retransformAt;\n\n for (const connection of this.#connections.values()) {\n if (\n connection.state !== 'validated' ||\n connection.revalidateAt === undefined\n ) {\n continue;\n }\n if (connection.revalidateAt <= now) {\n dueRevalidations.push(connection);\n }\n earliestDeadlineAt = minDefined(\n earliestDeadlineAt,\n connection.revalidateAt,\n );\n }\n\n const dueRetransform =\n this.#group.retransformAt !== undefined &&\n this.#group.retransformAt <= now;\n const maintenanceNotBeforeAt = this.#group.maintenanceNotBeforeAt;\n\n if (\n maintenanceNotBeforeAt !== undefined &&\n maintenanceNotBeforeAt > now &&\n earliestDeadlineAt !== undefined\n ) {\n return {\n dueRevalidations: [],\n dueRetransform: false,\n earliestDeadlineAt: Math.max(\n earliestDeadlineAt,\n maintenanceNotBeforeAt,\n ),\n };\n }\n\n return {\n dueRevalidations: dueRevalidations.sort(compareByInsertionOrder),\n dueRetransform,\n earliestDeadlineAt,\n };\n }\n\n #removeConnection(\n selector: ConnectionSelector,\n revision?: number,\n ): Readonly<ConnectionContext> | undefined {\n const connection = this.#getConnectionContext(selector);\n\n if (!connection) {\n return undefined;\n }\n\n // If the revision has changed, we should not remove the connection\n if (revision !== undefined && connection.revision !== revision) {\n this.#lc.debug?.('Ignoring failConnection for stale revision', {\n clientID: selector.clientID,\n wsID: selector.wsID,\n attemptedRevision: revision,\n currentRevision: connection.revision,\n });\n return undefined;\n }\n\n this.#connections.delete(connection.clientID);\n this.#refreshBackgroundConnectionContext();\n this.#updateBackgroundRetransformDeadline(false);\n\n return connection;\n }\n\n #demoteConnection(connection: ConnectionContext): ConnectionContext {\n const demotedConnection = this.#storeConnection({\n ...connection,\n state: 'provisional',\n revalidateAt: undefined,\n });\n this.#refreshBackgroundConnectionContext();\n this.#updateBackgroundRetransformDeadline(false);\n return demotedConnection;\n }\n\n /**\n * Keeps the background connection sticky while it remains validated.\n *\n * When a newly validated `preferred` connection is provided, it is promoted\n * only if there is no current validated background connection. Otherwise the\n * existing background connection stays in place until it disappears or is\n * demoted, at which point the newest validated connection is selected.\n */\n #refreshBackgroundConnectionContext(preferred?: ConnectionContext): void {\n if (preferred?.state === 'validated') {\n const currentBackgroundConnection =\n this.#getBackgroundConnectionContext();\n if (\n currentBackgroundConnection?.clientID === preferred.clientID &&\n currentBackgroundConnection.wsID === preferred.wsID\n ) {\n return;\n }\n if (currentBackgroundConnection !== undefined) {\n return;\n }\n this.#setBackgroundConnection({\n clientID: preferred.clientID,\n wsID: preferred.wsID,\n });\n this.#lc.debug?.('Selected background connection for shared auth work', {\n clientID: preferred.clientID,\n wsID: preferred.wsID,\n revision: preferred.revision,\n reason: 'preferred-validated',\n });\n return;\n }\n\n const currentBackgroundConnection = this.#getBackgroundConnectionContext();\n if (currentBackgroundConnection?.state === 'validated') {\n return;\n }\n\n const nextBackgroundConnection = [...this.#connections.values()]\n .filter(connection => connection.state === 'validated')\n .sort(comparePreferredValidatedConnection)\n .at(0);\n this.#setBackgroundConnection(\n nextBackgroundConnection\n ? {\n clientID: nextBackgroundConnection.clientID,\n wsID: nextBackgroundConnection.wsID,\n }\n : undefined,\n );\n if (nextBackgroundConnection) {\n this.#lc.debug?.('Selected background connection for shared auth work', {\n clientID: nextBackgroundConnection.clientID,\n wsID: nextBackgroundConnection.wsID,\n revision: nextBackgroundConnection.revision,\n reason: 'fallback-validated',\n });\n }\n }\n\n #getBackgroundConnectionContext(): ConnectionContext | undefined {\n const backgroundConnection = this.#group.backgroundConnection;\n if (!backgroundConnection) {\n return undefined;\n }\n return this.#getConnectionContext(backgroundConnection);\n }\n\n #getConnectionContext(\n selector: ConnectionSelector,\n ): ConnectionContext | undefined {\n const connection = this.#connections.get(selector.clientID);\n if (!connection) {\n return undefined;\n }\n if (connection.wsID !== selector.wsID) {\n return undefined;\n }\n return connection;\n }\n\n #mustGetConnectionContext(selector: ConnectionSelector): ConnectionContext {\n const connection = this.#getConnectionContext(selector);\n\n if (!connection) {\n throw new ProtocolErrorWithLevel(\n {\n kind: ErrorKind.InvalidConnectionRequest,\n message:\n 'Connection auth state was not available for this websocket.',\n origin: ErrorOrigin.ZeroCache,\n },\n 'warn',\n );\n }\n\n return connection;\n }\n\n #storeConnection(connection: ConnectionContext): ConnectionContext {\n this.#connections.set(connection.clientID, connection);\n return connection;\n }\n\n #setGroup(group: GroupAuthState): GroupAuthState {\n this.#group = group;\n return group;\n }\n\n #setBackgroundConnection(\n backgroundConnection: ConnectionSelector | undefined,\n ) {\n if (\n sameConnectionSelector(\n this.#group.backgroundConnection,\n backgroundConnection,\n )\n ) {\n return;\n }\n this.#setGroup({\n ...this.#group,\n backgroundConnection: backgroundConnection\n ? {...backgroundConnection}\n : undefined,\n });\n }\n\n /**\n * Keeps the group background retransform deadline coherent with current\n * schedulability.\n *\n * When `reset` is false, this seeds a deadline only when shared retransform\n * is now possible and no deadline exists yet, preserving any existing\n * cadence. When `reset` is true, it starts a fresh interval from `#now()` if\n * retransform is schedulable for the current ready ViewSyncer instance, or\n * clears the deadline if it is not.\n */\n #updateBackgroundRetransformDeadline(reset: boolean) {\n const backgroundConnection = this.#getBackgroundConnectionContext();\n if (\n !backgroundConnection ||\n this.#retransformIntervalMs === undefined ||\n !this.#sharedRetransformReady\n ) {\n if (this.#group.retransformAt !== undefined) {\n this.#setGroup({\n ...this.#group,\n retransformAt: undefined,\n });\n }\n return;\n }\n\n if (reset || this.#group.retransformAt === undefined) {\n this.#setGroup({\n ...this.#group,\n retransformAt: this.#now() + this.#retransformIntervalMs,\n });\n }\n }\n\n #nextRevalidateAt() {\n return this.#revalidateIntervalMs === undefined\n ? undefined\n : this.#now() + this.#revalidateIntervalMs;\n }\n}\n\nfunction compareByInsertionOrder(\n a: Pick<ConnectionContext, 'insertionOrder' | 'wsID'>,\n b: Pick<ConnectionContext, 'insertionOrder' | 'wsID'>,\n) {\n return a.insertionOrder - b.insertionOrder || a.wsID.localeCompare(b.wsID);\n}\n\nfunction comparePreferredValidatedConnection(\n a: Pick<ConnectionContext, 'insertionOrder' | 'wsID'>,\n b: Pick<ConnectionContext, 'insertionOrder' | 'wsID'>,\n) {\n return b.insertionOrder - a.insertionOrder || b.wsID.localeCompare(a.wsID);\n}\n\nfunction minDefined(a: number | undefined, b: number | undefined) {\n if (a === undefined) {\n return b;\n }\n if (b === undefined) {\n return a;\n }\n return Math.min(a, b);\n}\n\nfunction sameConnectionSelector(\n a: ConnectionSelector | undefined,\n b: ConnectionSelector | undefined,\n) {\n return a?.clientID === b?.clientID && a?.wsID === b?.wsID;\n}\n\nfunction cloneCustomHeaders(\n headers: Readonly<Record<string, string>> | undefined,\n) {\n return headers ? {...headers} : undefined;\n}\n\nfunction cloneAllowedClientHeaders(headers: readonly string[] | undefined) {\n return headers ? [...headers] : undefined;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { promiseVoid } from "../../../../shared/src/resolved-promises.js";
|
|
2
|
+
import { cvrSchema } from "../../types/shards.js";
|
|
3
|
+
import "../../types/pg.js";
|
|
4
|
+
import { RunningState } from "../running-state.js";
|
|
5
|
+
import { READ_COMMITTED } from "../../db/mode-enum.js";
|
|
6
|
+
import { runTx } from "../../db/run-transaction.js";
|
|
7
|
+
//#region ../zero-cache/src/services/view-syncer/cvr-purger.ts
|
|
8
|
+
var MAX_PURGE_INTERVAL_MS = 16 * (60 * 1e3);
|
|
9
|
+
var TOMBSTONE_PURGE_THRESHOLD = 744 * 60 * 60 * 1e3;
|
|
10
|
+
var CVRPurger = class {
|
|
11
|
+
id = "reaper";
|
|
12
|
+
#lc;
|
|
13
|
+
#db;
|
|
14
|
+
#schema;
|
|
15
|
+
#inactivityThresholdMs;
|
|
16
|
+
#tombstonePurgeThresholdMs;
|
|
17
|
+
#initialBatchSize;
|
|
18
|
+
#initialIntervalMs;
|
|
19
|
+
#state = new RunningState("reaper");
|
|
20
|
+
constructor(lc, db, shard, { inactivityThresholdMs, initialBatchSize, initialIntervalMs }, tombstonePurgeThreshold = TOMBSTONE_PURGE_THRESHOLD) {
|
|
21
|
+
this.#lc = lc;
|
|
22
|
+
this.#db = db;
|
|
23
|
+
this.#schema = cvrSchema(shard);
|
|
24
|
+
this.#inactivityThresholdMs = inactivityThresholdMs;
|
|
25
|
+
this.#tombstonePurgeThresholdMs = Math.max(tombstonePurgeThreshold, inactivityThresholdMs);
|
|
26
|
+
this.#initialBatchSize = initialBatchSize;
|
|
27
|
+
this.#initialIntervalMs = initialIntervalMs;
|
|
28
|
+
}
|
|
29
|
+
async run() {
|
|
30
|
+
let purgeable;
|
|
31
|
+
let maxCVRsPerPurge = this.#initialBatchSize;
|
|
32
|
+
let purgeInterval = this.#initialIntervalMs;
|
|
33
|
+
if (this.#initialBatchSize === 0) {
|
|
34
|
+
this.#lc.warn?.(`CVR garbage collection is disabled (initialBatchSize = 0)`);
|
|
35
|
+
await this.#state.stopped();
|
|
36
|
+
} else this.#lc.info?.(`running cvr-purger with`, await this.#db`SHOW statement_timeout`);
|
|
37
|
+
while (this.#state.shouldRun()) try {
|
|
38
|
+
const start = performance.now();
|
|
39
|
+
const { purged, remaining } = await this.purgeInactiveCVRs(maxCVRsPerPurge);
|
|
40
|
+
this.#state.resetBackoff();
|
|
41
|
+
if (purgeable !== void 0 && remaining > purgeable) {
|
|
42
|
+
maxCVRsPerPurge += this.#initialBatchSize;
|
|
43
|
+
this.#lc.info?.(`increased CVRs per purge to ${maxCVRsPerPurge}`);
|
|
44
|
+
}
|
|
45
|
+
purgeable = remaining;
|
|
46
|
+
purgeInterval = purgeable > 0 ? this.#initialIntervalMs : Math.min(purgeInterval * 2, MAX_PURGE_INTERVAL_MS);
|
|
47
|
+
const elapsed = performance.now() - start;
|
|
48
|
+
this.#lc.info?.(`purged ${purged} inactive CVRs (${elapsed.toFixed(2)} ms). Next purge in ${purgeInterval} ms`);
|
|
49
|
+
await this.#state.sleep(purgeInterval);
|
|
50
|
+
} catch (e) {
|
|
51
|
+
await this.#state.backoff(this.#lc, e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
purgeInactiveCVRs(maxCVRs) {
|
|
55
|
+
return runTx(this.#db, async (sql) => {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
const threshold = now - this.#inactivityThresholdMs;
|
|
58
|
+
const tombstonePurgeThreshold = now - this.#tombstonePurgeThresholdMs;
|
|
59
|
+
const ids = (await sql`
|
|
60
|
+
SELECT "clientGroupID" FROM ${sql(this.#schema)}.instances
|
|
61
|
+
WHERE NOT "deleted" AND "lastActive" < ${threshold}
|
|
62
|
+
ORDER BY "lastActive" ASC
|
|
63
|
+
LIMIT ${maxCVRs}
|
|
64
|
+
FOR UPDATE SKIP LOCKED
|
|
65
|
+
`.values()).flat();
|
|
66
|
+
if (ids.length > 0) {
|
|
67
|
+
const stmts = [
|
|
68
|
+
"desires",
|
|
69
|
+
"queries",
|
|
70
|
+
"clients",
|
|
71
|
+
"rows",
|
|
72
|
+
"rowsVersion"
|
|
73
|
+
].map((table) => sql`
|
|
74
|
+
DELETE FROM ${sql(this.#schema)}.${sql(table)}
|
|
75
|
+
WHERE "clientGroupID" IN ${sql(ids)}`.execute());
|
|
76
|
+
stmts.push(sql`
|
|
77
|
+
UPDATE ${sql(this.#schema)}.instances
|
|
78
|
+
SET "deleted" = TRUE,
|
|
79
|
+
"version" = '00',
|
|
80
|
+
"ttlClock" = 0,
|
|
81
|
+
"replicaVersion" = NULL,
|
|
82
|
+
"owner" = NULL,
|
|
83
|
+
"grantedAt" = NULL,
|
|
84
|
+
"clientSchema" = NULL
|
|
85
|
+
WHERE "clientGroupID" IN ${sql(ids)}`.execute());
|
|
86
|
+
stmts.push(sql`
|
|
87
|
+
DELETE FROM ${sql(this.#schema)}.instances
|
|
88
|
+
WHERE "deleted" AND "lastActive" < ${tombstonePurgeThreshold}
|
|
89
|
+
`.execute());
|
|
90
|
+
await Promise.all(stmts);
|
|
91
|
+
}
|
|
92
|
+
const [{ remaining }] = await sql`
|
|
93
|
+
SELECT COUNT(*) AS remaining FROM ${sql(this.#schema)}.instances
|
|
94
|
+
WHERE NOT "deleted" AND "lastActive" < ${threshold}
|
|
95
|
+
`;
|
|
96
|
+
return {
|
|
97
|
+
purged: ids.length,
|
|
98
|
+
remaining: Number(remaining)
|
|
99
|
+
};
|
|
100
|
+
}, { mode: READ_COMMITTED });
|
|
101
|
+
}
|
|
102
|
+
stop() {
|
|
103
|
+
this.#state.stop(this.#lc);
|
|
104
|
+
return promiseVoid;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
//#endregion
|
|
108
|
+
export { CVRPurger };
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=cvr-purger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvr-purger.js","names":["#lc","#db","#schema","#inactivityThresholdMs","#tombstonePurgeThresholdMs","#initialBatchSize","#initialIntervalMs","#state"],"sources":["../../../../../../../zero-cache/src/services/view-syncer/cvr-purger.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {promiseVoid} from '../../../../shared/src/resolved-promises.ts';\nimport {READ_COMMITTED} from '../../db/mode-enum.ts';\nimport {runTx} from '../../db/run-transaction.ts';\nimport {type PostgresDB} from '../../types/pg.ts';\nimport {cvrSchema, type ShardID} from '../../types/shards.ts';\nimport {RunningState} from '../running-state.ts';\nimport type {Service} from '../service.ts';\n\nconst MINUTE = 60 * 1000;\nconst MAX_PURGE_INTERVAL_MS = 16 * MINUTE;\n\n// Purge tombstones after 31 days to facilitate up to a 30-day actives metric.\nconst TOMBSTONE_PURGE_THRESHOLD = 31 * 24 * 60 * 60 * 1000;\n\ntype Options = {\n inactivityThresholdMs: number;\n initialBatchSize: number;\n initialIntervalMs: number;\n};\n\nexport class CVRPurger implements Service {\n readonly id = 'reaper';\n\n readonly #lc: LogContext;\n readonly #db: PostgresDB;\n readonly #schema: string;\n readonly #inactivityThresholdMs: number;\n readonly #tombstonePurgeThresholdMs: number;\n readonly #initialBatchSize: number;\n readonly #initialIntervalMs: number;\n readonly #state = new RunningState('reaper');\n\n constructor(\n lc: LogContext,\n db: PostgresDB,\n shard: ShardID,\n {inactivityThresholdMs, initialBatchSize, initialIntervalMs}: Options,\n tombstonePurgeThreshold = TOMBSTONE_PURGE_THRESHOLD,\n ) {\n this.#lc = lc;\n this.#db = db;\n this.#schema = cvrSchema(shard);\n this.#inactivityThresholdMs = inactivityThresholdMs;\n this.#tombstonePurgeThresholdMs = Math.max(\n tombstonePurgeThreshold,\n inactivityThresholdMs,\n );\n this.#initialBatchSize = initialBatchSize;\n this.#initialIntervalMs = initialIntervalMs;\n }\n\n async run() {\n let purgeable: number | undefined;\n let maxCVRsPerPurge = this.#initialBatchSize;\n let purgeInterval = this.#initialIntervalMs;\n\n if (this.#initialBatchSize === 0) {\n this.#lc.warn?.(\n `CVR garbage collection is disabled (initialBatchSize = 0)`,\n );\n // Do nothing and just wait to be stopped.\n await this.#state.stopped();\n } else {\n this.#lc.info?.(\n `running cvr-purger with`,\n await this.#db`SHOW statement_timeout`,\n );\n }\n\n while (this.#state.shouldRun()) {\n try {\n const start = performance.now();\n const {purged, remaining} =\n await this.purgeInactiveCVRs(maxCVRsPerPurge);\n this.#state.resetBackoff();\n\n if (purgeable !== undefined && remaining > purgeable) {\n // If the number of purgeable CVRs has grown even after the purge,\n // increase the number purged per round to achieve a steady state.\n maxCVRsPerPurge += this.#initialBatchSize;\n this.#lc.info?.(`increased CVRs per purge to ${maxCVRsPerPurge}`);\n }\n purgeable = remaining;\n\n purgeInterval =\n purgeable > 0\n ? this.#initialIntervalMs\n : Math.min(purgeInterval * 2, MAX_PURGE_INTERVAL_MS);\n const elapsed = performance.now() - start;\n this.#lc.info?.(\n `purged ${purged} inactive CVRs (${elapsed.toFixed(2)} ms). Next purge in ${purgeInterval} ms`,\n );\n await this.#state.sleep(purgeInterval);\n } catch (e) {\n await this.#state.backoff(this.#lc, e);\n }\n }\n }\n\n // Exported for testing.\n purgeInactiveCVRs(\n maxCVRs: number,\n ): Promise<{purged: number; remaining: number}> {\n return runTx(\n this.#db,\n async sql => {\n const now = Date.now();\n const threshold = now - this.#inactivityThresholdMs;\n const tombstonePurgeThreshold = now - this.#tombstonePurgeThresholdMs;\n // Implementation note: `FOR UPDATE` will prevent a syncer from\n // concurrently updating the CVR, since the update also performs\n // a `SELECT ... FOR UPDATE`, instead causing that update to\n // fail, which will cause the client to create a new CVR.\n //\n // `SKIP LOCKED` will skip over CVRs that a syncer is already\n // in the process of updating. In this manner, an in-progress\n // update effectively excludes the CVR from the purge.\n const ids = (\n await sql<{clientGroupID: string}[]>`\n SELECT \"clientGroupID\" FROM ${sql(this.#schema)}.instances\n WHERE NOT \"deleted\" AND \"lastActive\" < ${threshold}\n ORDER BY \"lastActive\" ASC\n LIMIT ${maxCVRs}\n FOR UPDATE SKIP LOCKED\n `.values()\n ).flat();\n\n if (ids.length > 0) {\n // Explicitly delete rows from cvr tables from \"bottom\" up. Relying on\n // foreign key cascading deletes can be suboptimal when the foreign key\n // is not a prefix of the primary key (e.g. the \"desires\" foreign key\n // reference to the \"queries\" table is not a prefix of the \"desires\"\n // primary key).\n const stmts = [\n 'desires',\n 'queries',\n 'clients',\n 'rows',\n 'rowsVersion',\n ].map(table =>\n sql`\n DELETE FROM ${sql(this.#schema)}.${sql(table)} \n WHERE \"clientGroupID\" IN ${sql(ids)}`.execute(),\n );\n // Tombstones are written for the `instances` rows, preserving the\n // \"profileID\" and \"lastActive\" columns for computing usage stats.\n //\n // For backwards compatibility (i.e. older zero-caches that do not\n // check the \"deleted\" column) reset the \"version\" to '00' to trigger\n // the ClientNotFound error via\n // view-syncer.ts:checkClientAndCVRVersions()\n stmts.push(\n sql`\n UPDATE ${sql(this.#schema)}.instances\n SET \"deleted\" = TRUE, \n \"version\" = '00', \n \"ttlClock\" = 0,\n \"replicaVersion\" = NULL, \n \"owner\" = NULL,\n \"grantedAt\" = NULL,\n \"clientSchema\" = NULL\n WHERE \"clientGroupID\" IN ${sql(ids)}`.execute(),\n );\n // Tombstone rows are deleted after the tombstonePurgeThreshold.\n stmts.push(\n sql`\n DELETE FROM ${sql(this.#schema)}.instances\n WHERE \"deleted\" AND \"lastActive\" < ${tombstonePurgeThreshold}\n `.execute(),\n );\n await Promise.all(stmts);\n }\n\n const [{remaining}] = await sql<[{remaining: bigint}]>`\n SELECT COUNT(*) AS remaining FROM ${sql(this.#schema)}.instances\n WHERE NOT \"deleted\" AND \"lastActive\" < ${threshold}\n `;\n\n return {purged: ids.length, remaining: Number(remaining)};\n },\n {mode: READ_COMMITTED},\n );\n }\n\n stop(): Promise<void> {\n this.#state.stop(this.#lc);\n return promiseVoid;\n }\n}\n"],"mappings":";;;;;;;AAUA,IAAM,wBAAwB,MADf,KAAK;AAIpB,IAAM,4BAA4B,MAAU,KAAK,KAAK;AAQtD,IAAa,YAAb,MAA0C;CACxC,KAAc;CAEd;CACA;CACA;CACA;CACA;CACA;CACA;CACA,SAAkB,IAAI,aAAa,QAAQ;CAE3C,YACE,IACA,IACA,OACA,EAAC,uBAAuB,kBAAkB,qBAC1C,0BAA0B,2BAC1B;EACA,KAAKA,MAAM;EACX,KAAKC,MAAM;EACX,KAAKC,UAAU,UAAU,KAAK;EAC9B,KAAKC,yBAAyB;EAC9B,KAAKC,6BAA6B,KAAK,IACrC,yBACA,qBACF;EACA,KAAKC,oBAAoB;EACzB,KAAKC,qBAAqB;CAC5B;CAEA,MAAM,MAAM;EACV,IAAI;EACJ,IAAI,kBAAkB,KAAKD;EAC3B,IAAI,gBAAgB,KAAKC;EAEzB,IAAI,KAAKD,sBAAsB,GAAG;GAChC,KAAKL,IAAI,OACP,2DACF;GAEA,MAAM,KAAKO,OAAO,QAAQ;EAC5B,OACE,KAAKP,IAAI,OACP,2BACA,MAAM,KAAKC,GAAG,wBAChB;EAGF,OAAO,KAAKM,OAAO,UAAU,GAC3B,IAAI;GACF,MAAM,QAAQ,YAAY,IAAI;GAC9B,MAAM,EAAC,QAAQ,cACb,MAAM,KAAK,kBAAkB,eAAe;GAC9C,KAAKA,OAAO,aAAa;GAEzB,IAAI,cAAc,KAAA,KAAa,YAAY,WAAW;IAGpD,mBAAmB,KAAKF;IACxB,KAAKL,IAAI,OAAO,+BAA+B,iBAAiB;GAClE;GACA,YAAY;GAEZ,gBACE,YAAY,IACR,KAAKM,qBACL,KAAK,IAAI,gBAAgB,GAAG,qBAAqB;GACvD,MAAM,UAAU,YAAY,IAAI,IAAI;GACpC,KAAKN,IAAI,OACP,UAAU,OAAO,kBAAkB,QAAQ,QAAQ,CAAC,EAAE,sBAAsB,cAAc,IAC5F;GACA,MAAM,KAAKO,OAAO,MAAM,aAAa;EACvC,SAAS,GAAG;GACV,MAAM,KAAKA,OAAO,QAAQ,KAAKP,KAAK,CAAC;EACvC;CAEJ;CAGA,kBACE,SAC8C;EAC9C,OAAO,MACL,KAAKC,KACL,OAAM,QAAO;GACX,MAAM,MAAM,KAAK,IAAI;GACrB,MAAM,YAAY,MAAM,KAAKE;GAC7B,MAAM,0BAA0B,MAAM,KAAKC;GAS3C,MAAM,OACJ,MAAM,GAA8B;wCACN,IAAI,KAAKF,OAAO,EAAE;qDACL,UAAU;;oBAE3C,QAAQ;;QAEpB,OAAO,GACL,KAAK;GAEP,IAAI,IAAI,SAAS,GAAG;IAMlB,MAAM,QAAQ;KACZ;KACA;KACA;KACA;KACA;IACF,EAAE,KAAI,UACJ,GAAG;0BACW,IAAI,KAAKA,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE;yCACjB,IAAI,GAAG,IAAI,QAAQ,CAClD;IAQA,MAAM,KACJ,GAAG;qBACM,IAAI,KAAKA,OAAO,EAAE;;;;;;;;yCAQE,IAAI,GAAG,IAAI,QAAQ,CAClD;IAEA,MAAM,KACJ,GAAG;0BACW,IAAI,KAAKA,OAAO,EAAE;mDACO,wBAAwB;YAC/D,QAAQ,CACV;IACA,MAAM,QAAQ,IAAI,KAAK;GACzB;GAEA,MAAM,CAAC,EAAC,eAAc,MAAM,GAA0B;4CAClB,IAAI,KAAKA,OAAO,EAAE;mDACX,UAAU;;GAGrD,OAAO;IAAC,QAAQ,IAAI;IAAQ,WAAW,OAAO,SAAS;GAAC;EAC1D,GACA,EAAC,MAAM,eAAc,CACvB;CACF;CAEA,OAAsB;EACpB,KAAKK,OAAO,KAAK,KAAKP,GAAG;EACzB,OAAO;CACT;AACF"}
|