@rocicorp/zero 0.2.2024101101 → 0.3.2024102500
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/react.js +91 -39
- package/out/react.js.map +2 -2
- package/out/replicache/src/async-iterable-to-array.js +8 -0
- package/out/replicache/src/async-iterable-to-array.js.map +1 -0
- package/out/replicache/src/bg-interval.js +38 -0
- package/out/replicache/src/bg-interval.js.map +1 -0
- package/out/replicache/src/binary-search.js +31 -0
- package/out/replicache/src/binary-search.js.map +1 -0
- package/out/replicache/src/broadcast-channel.js +29 -0
- package/out/replicache/src/broadcast-channel.js.map +1 -0
- package/out/replicache/src/btree/diff.js +6 -0
- package/out/replicache/src/btree/diff.js.map +1 -0
- package/out/replicache/src/btree/node.js +392 -0
- package/out/replicache/src/btree/node.js.map +1 -0
- package/out/replicache/src/btree/read.js +227 -0
- package/out/replicache/src/btree/read.js.map +1 -0
- package/out/replicache/src/btree/splice.js +79 -0
- package/out/replicache/src/btree/splice.js.map +1 -0
- package/out/replicache/src/btree/write.js +154 -0
- package/out/replicache/src/btree/write.js.map +1 -0
- package/out/replicache/src/call-default-fetch.js +37 -0
- package/out/replicache/src/call-default-fetch.js.map +1 -0
- package/out/replicache/src/config.js +13 -0
- package/out/replicache/src/config.js.map +1 -0
- package/out/replicache/src/connection-loop-delegates.js +30 -0
- package/out/replicache/src/connection-loop-delegates.js.map +1 -0
- package/out/replicache/src/connection-loop.js +268 -0
- package/out/replicache/src/connection-loop.js.map +1 -0
- package/out/replicache/src/cookies.js +41 -0
- package/out/replicache/src/cookies.js.map +1 -0
- package/out/replicache/src/dag/chunk.js +60 -0
- package/out/replicache/src/dag/chunk.js.map +1 -0
- package/out/replicache/src/dag/gc.js +126 -0
- package/out/replicache/src/dag/gc.js.map +1 -0
- package/out/replicache/src/dag/key-type-enum.js +6 -0
- package/out/replicache/src/dag/key-type-enum.js.map +1 -0
- package/out/replicache/src/dag/key.js +54 -0
- package/out/replicache/src/dag/key.js.map +1 -0
- package/out/replicache/src/dag/lazy-store.js +532 -0
- package/out/replicache/src/dag/lazy-store.js.map +1 -0
- package/out/replicache/src/dag/store-impl.js +175 -0
- package/out/replicache/src/dag/store-impl.js.map +1 -0
- package/out/replicache/src/dag/store.js +22 -0
- package/out/replicache/src/dag/store.js.map +1 -0
- package/out/replicache/src/dag/visitor.js +22 -0
- package/out/replicache/src/dag/visitor.js.map +1 -0
- package/out/replicache/src/db/commit.js +443 -0
- package/out/replicache/src/db/commit.js.map +1 -0
- package/out/replicache/src/db/index-operation-enum.js +4 -0
- package/out/replicache/src/db/index-operation-enum.js.map +1 -0
- package/out/replicache/src/db/index.js +170 -0
- package/out/replicache/src/db/index.js.map +1 -0
- package/out/replicache/src/db/meta-type-enum.js +7 -0
- package/out/replicache/src/db/meta-type-enum.js.map +1 -0
- package/out/replicache/src/db/read.js +59 -0
- package/out/replicache/src/db/read.js.map +1 -0
- package/out/replicache/src/db/rebase.js +56 -0
- package/out/replicache/src/db/rebase.js.map +1 -0
- package/out/replicache/src/db/scan.js +2 -0
- package/out/replicache/src/db/scan.js.map +1 -0
- package/out/replicache/src/db/write.js +260 -0
- package/out/replicache/src/db/write.js.map +1 -0
- package/out/replicache/src/error-responses.js +30 -0
- package/out/replicache/src/error-responses.js.map +1 -0
- package/out/replicache/src/filter-async-iterable.js +15 -0
- package/out/replicache/src/filter-async-iterable.js.map +1 -0
- package/out/replicache/src/format-version-enum.js +9 -0
- package/out/replicache/src/format-version-enum.js.map +1 -0
- package/out/replicache/src/format-version.js +8 -0
- package/out/replicache/src/format-version.js.map +1 -0
- package/out/replicache/src/frozen-json.js +151 -0
- package/out/replicache/src/frozen-json.js.map +1 -0
- package/out/replicache/src/get-default-puller.js +74 -0
- package/out/replicache/src/get-default-puller.js.map +1 -0
- package/out/replicache/src/get-default-pusher.js +36 -0
- package/out/replicache/src/get-default-pusher.js.map +1 -0
- package/out/replicache/src/hash.js +73 -0
- package/out/replicache/src/hash.js.map +1 -0
- package/out/replicache/src/http-request-info.js +7 -0
- package/out/replicache/src/http-request-info.js.map +1 -0
- package/out/replicache/src/impl.js +2 -0
- package/out/replicache/src/impl.js.map +1 -0
- package/out/replicache/src/index-defs.js +28 -0
- package/out/replicache/src/index-defs.js.map +1 -0
- package/out/replicache/src/invoke-kind-enum.js +4 -0
- package/out/replicache/src/invoke-kind-enum.js.map +1 -0
- package/out/replicache/src/iterable-union.js +5 -0
- package/out/replicache/src/iterable-union.js.map +1 -0
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js +93 -0
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -0
- package/out/replicache/src/kv/idb-store.js +179 -0
- package/out/replicache/src/kv/idb-store.js.map +1 -0
- package/out/replicache/src/kv/mem-store.js +61 -0
- package/out/replicache/src/kv/mem-store.js.map +1 -0
- package/out/replicache/src/kv/read-impl.js +23 -0
- package/out/replicache/src/kv/read-impl.js.map +1 -0
- package/out/replicache/src/kv/store.js +2 -0
- package/out/replicache/src/kv/store.js.map +1 -0
- package/out/replicache/src/kv/write-impl-base.js +48 -0
- package/out/replicache/src/kv/write-impl-base.js.map +1 -0
- package/out/replicache/src/kv/write-impl.js +25 -0
- package/out/replicache/src/kv/write-impl.js.map +1 -0
- package/out/replicache/src/lazy.js +10 -0
- package/out/replicache/src/lazy.js.map +1 -0
- package/out/replicache/src/log-options.js +13 -0
- package/out/replicache/src/log-options.js.map +1 -0
- package/out/replicache/src/merge-async-iterables.js +61 -0
- package/out/replicache/src/merge-async-iterables.js.map +1 -0
- package/out/replicache/src/mod.js +14 -0
- package/out/replicache/src/mod.js.map +1 -0
- package/out/replicache/src/mutation-recovery.js +439 -0
- package/out/replicache/src/mutation-recovery.js.map +1 -0
- package/out/replicache/src/new-client-channel.js +77 -0
- package/out/replicache/src/new-client-channel.js.map +1 -0
- package/out/replicache/src/on-persist-channel.js +33 -0
- package/out/replicache/src/on-persist-channel.js.map +1 -0
- package/out/replicache/src/patch-operation.js +37 -0
- package/out/replicache/src/patch-operation.js.map +1 -0
- package/out/replicache/src/pending-mutations.js +18 -0
- package/out/replicache/src/pending-mutations.js.map +1 -0
- package/out/replicache/src/persist/client-gc.js +38 -0
- package/out/replicache/src/persist/client-gc.js.map +1 -0
- package/out/replicache/src/persist/client-group-gc.js +38 -0
- package/out/replicache/src/persist/client-group-gc.js.map +1 -0
- package/out/replicache/src/persist/client-groups.js +180 -0
- package/out/replicache/src/persist/client-groups.js.map +1 -0
- package/out/replicache/src/persist/clients.js +390 -0
- package/out/replicache/src/persist/clients.js.map +1 -0
- package/out/replicache/src/persist/collect-idb-databases.js +174 -0
- package/out/replicache/src/persist/collect-idb-databases.js.map +1 -0
- package/out/replicache/src/persist/gather-mem-only-visitor.js +25 -0
- package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
- package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -0
- package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
- package/out/replicache/src/persist/heartbeat.js +37 -0
- package/out/replicache/src/persist/heartbeat.js.map +1 -0
- package/out/replicache/src/persist/idb-databases-store-db-name.js +18 -0
- package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
- package/out/replicache/src/persist/idb-databases-store.js +90 -0
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -0
- package/out/replicache/src/persist/make-client-id.js +13 -0
- package/out/replicache/src/persist/make-client-id.js.map +1 -0
- package/out/replicache/src/persist/persist.js +132 -0
- package/out/replicache/src/persist/persist.js.map +1 -0
- package/out/replicache/src/persist/refresh.js +147 -0
- package/out/replicache/src/persist/refresh.js.map +1 -0
- package/out/replicache/src/process-scheduler.js +93 -0
- package/out/replicache/src/process-scheduler.js.map +1 -0
- package/out/replicache/src/puller.js +2 -0
- package/out/replicache/src/puller.js.map +1 -0
- package/out/replicache/src/pusher.js +32 -0
- package/out/replicache/src/pusher.js.map +1 -0
- package/out/replicache/src/replicache-impl.js +1007 -0
- package/out/replicache/src/replicache-impl.js.map +1 -0
- package/out/replicache/src/replicache-options.js +2 -0
- package/out/replicache/src/replicache-options.js.map +1 -0
- package/out/replicache/src/replicache.js +387 -0
- package/out/replicache/src/replicache.js.map +1 -0
- package/out/replicache/src/request-idle.js +15 -0
- package/out/replicache/src/request-idle.js.map +1 -0
- package/out/replicache/src/scan-iterator.js +202 -0
- package/out/replicache/src/scan-iterator.js.map +1 -0
- package/out/replicache/src/scan-options.js +45 -0
- package/out/replicache/src/scan-options.js.map +1 -0
- package/out/replicache/src/set-interval-with-signal.js +7 -0
- package/out/replicache/src/set-interval-with-signal.js.map +1 -0
- package/out/replicache/src/size-of-value.js +77 -0
- package/out/replicache/src/size-of-value.js.map +1 -0
- package/out/replicache/src/subscriptions.js +357 -0
- package/out/replicache/src/subscriptions.js.map +1 -0
- package/out/replicache/src/sync/diff.js +75 -0
- package/out/replicache/src/sync/diff.js.map +1 -0
- package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +5 -0
- package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +1 -0
- package/out/replicache/src/sync/ids.js +4 -0
- package/out/replicache/src/sync/ids.js.map +1 -0
- package/out/replicache/src/sync/patch.js +41 -0
- package/out/replicache/src/sync/patch.js.map +1 -0
- package/out/replicache/src/sync/pull-error.js +16 -0
- package/out/replicache/src/sync/pull-error.js.map +1 -0
- package/out/replicache/src/sync/pull.js +375 -0
- package/out/replicache/src/sync/pull.js.map +1 -0
- package/out/replicache/src/sync/push.js +141 -0
- package/out/replicache/src/sync/push.js.map +1 -0
- package/out/replicache/src/sync/request-id.js +31 -0
- package/out/replicache/src/sync/request-id.js.map +1 -0
- package/out/replicache/src/sync/sync-head-name.js +2 -0
- package/out/replicache/src/sync/sync-head-name.js.map +1 -0
- package/out/replicache/src/test-license-key.js +3 -0
- package/out/replicache/src/test-license-key.js.map +1 -0
- package/out/replicache/src/to-error.js +7 -0
- package/out/replicache/src/to-error.js.map +1 -0
- package/out/replicache/src/transaction-closed-error.js +17 -0
- package/out/replicache/src/transaction-closed-error.js.map +1 -0
- package/out/replicache/src/transactions.js +144 -0
- package/out/replicache/src/transactions.js.map +1 -0
- package/out/replicache/src/types.js +2 -0
- package/out/replicache/src/types.js.map +1 -0
- package/out/replicache/src/version.js +5 -0
- package/out/replicache/src/version.js.map +1 -0
- package/out/replicache/src/with-transactions.js +28 -0
- package/out/replicache/src/with-transactions.js.map +1 -0
- package/out/shared/src/browser-env.js +14 -0
- package/out/shared/src/browser-env.js.map +1 -0
- package/out/shared/src/document-visible.js +76 -0
- package/out/shared/src/document-visible.js.map +1 -0
- package/out/shared/src/immutable.js +2 -0
- package/out/shared/src/immutable.js.map +1 -0
- package/out/shared/src/iterables.d.ts +2 -2
- package/out/shared/src/iterables.d.ts.map +1 -1
- package/out/shared/src/iterables.js +40 -0
- package/out/shared/src/iterables.js.map +1 -0
- package/out/shared/src/navigator.js +3 -0
- package/out/shared/src/navigator.js.map +1 -0
- package/out/shared/src/random-uint64.js +8 -0
- package/out/shared/src/random-uint64.js.map +1 -0
- package/out/shared/src/random-values.d.ts +1 -0
- package/out/shared/src/random-values.d.ts.map +1 -1
- package/out/shared/src/random-values.js +22 -0
- package/out/shared/src/random-values.js.map +1 -0
- package/out/shared/src/set-utils.d.ts +1 -1
- package/out/shared/src/set-utils.d.ts.map +1 -1
- package/out/shared/src/set-utils.js +6 -4
- package/out/shared/src/set-utils.js.map +1 -1
- package/out/shared/src/sorted-entries.d.ts +2 -0
- package/out/shared/src/sorted-entries.d.ts.map +1 -0
- package/out/shared/src/sorted-entries.js +6 -0
- package/out/shared/src/sorted-entries.js.map +1 -0
- package/out/shared/src/types.js +2 -0
- package/out/shared/src/types.js.map +1 -0
- package/out/shared/src/valita.d.ts +1 -1
- package/out/shared/src/valita.d.ts.map +1 -1
- package/out/shared/src/valita.js.map +1 -1
- package/out/shared/src/writable.d.ts +4 -0
- package/out/shared/src/writable.d.ts.map +1 -0
- package/out/shared/src/writable.js +2 -0
- package/out/shared/src/writable.js.map +1 -0
- package/out/zero/src/config.d.ts +2 -0
- package/out/zero/src/config.d.ts.map +1 -0
- package/out/zero/src/config.js +2 -0
- package/out/zero/src/config.js.map +1 -0
- package/out/zero-cache/src/config/config-query.d.ts +18 -0
- package/out/zero-cache/src/config/config-query.d.ts.map +1 -0
- package/out/zero-cache/src/config/config-query.js +19 -0
- package/out/zero-cache/src/config/config-query.js.map +1 -0
- package/out/zero-cache/src/config/define-config.d.ts +43 -0
- package/out/zero-cache/src/config/define-config.d.ts.map +1 -0
- package/out/zero-cache/src/config/define-config.js +120 -0
- package/out/zero-cache/src/config/define-config.js.map +1 -0
- package/out/zero-cache/src/config/refs.d.ts +3 -0
- package/out/zero-cache/src/config/refs.d.ts.map +1 -0
- package/out/zero-cache/src/config/refs.js +14 -0
- package/out/zero-cache/src/config/refs.js.map +1 -0
- package/out/zero-cache/src/config/zero-config.d.ts +126 -686
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +43 -161
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/db/create.d.ts +8 -0
- package/out/zero-cache/src/db/create.d.ts.map +1 -0
- package/out/zero-cache/src/db/create.js +39 -0
- package/out/zero-cache/src/db/create.js.map +1 -0
- package/out/zero-cache/src/db/lite-tables.d.ts +3 -3
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js +29 -20
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.d.ts +60 -20
- package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +89 -69
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.d.ts +61 -20
- package/out/zero-cache/src/db/migration.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration.js +92 -75
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.d.ts +11 -0
- package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -0
- package/out/zero-cache/src/{services/change-streamer/pg/schema/lite.js → db/pg-to-lite.js} +27 -15
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -0
- package/out/zero-cache/src/db/specs.d.ts +73 -0
- package/out/zero-cache/src/db/specs.d.ts.map +1 -0
- package/out/zero-cache/src/db/specs.js +30 -0
- package/out/zero-cache/src/db/specs.js.map +1 -0
- package/out/zero-cache/src/db/statements.d.ts +1 -1
- package/out/zero-cache/src/db/statements.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.js +9 -5
- package/out/zero-cache/src/server/life-cycle.js.map +1 -1
- package/out/zero-cache/src/server/main.js +3 -3
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +2 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +1 -4
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +455 -13
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js +16 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/change-source.js +313 -88
- package/out/zero-cache/src/services/change-streamer/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js +13 -54
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts +239 -59
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js +291 -183
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.d.ts +5 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.js +18 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts +4 -4
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.js +14 -19
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.d.ts +17 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.js +150 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.js +11 -5
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts +325 -26
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.js +84 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts +2 -2
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +13 -5
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +6 -6
- package/out/zero-cache/src/services/change-streamer/storer.js +4 -4
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts +1 -0
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts.map +1 -1
- package/out/zero-cache/src/services/dispatcher/connect-params.js +5 -2
- package/out/zero-cache/src/services/dispatcher/connect-params.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +21 -22
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/write-authorizer.js +18 -9
- package/out/zero-cache/src/services/mutagen/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +131 -16
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +20 -3
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.js +46 -14
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +9 -9
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +4 -3
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +27 -21
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +6 -4
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +63 -18
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +11 -8
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +22 -13
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/database-storage.js +1 -1
- package/out/zero-cache/src/services/view-syncer/database-storage.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +31 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +53 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +13 -5
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +27 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +2 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +5 -4
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts +4 -0
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/init.js +16 -0
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +8 -216
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +2 -4
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +12 -4
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +59 -49
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +3 -4
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +105 -44
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/lite.d.ts.map +1 -1
- package/out/zero-cache/src/types/lite.js +8 -9
- package/out/zero-cache/src/types/lite.js.map +1 -1
- package/out/zero-cache/src/types/pg.d.ts +10 -4
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg.js +37 -15
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +4 -2
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +21 -2
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts +2 -1
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +20 -9
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/context.d.ts +1 -1
- package/out/zero-client/src/client/context.d.ts.map +1 -1
- package/out/zero-client/src/client/context.js +99 -0
- package/out/zero-client/src/client/context.js.map +1 -0
- package/out/zero-client/src/client/crud.d.ts +8 -10
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.js +181 -0
- package/out/zero-client/src/client/crud.js.map +1 -0
- package/out/zero-client/src/client/enable-analytics.js +21 -0
- package/out/zero-client/src/client/enable-analytics.js.map +1 -0
- package/out/zero-client/src/client/http-string.js +14 -0
- package/out/zero-client/src/client/http-string.js.map +1 -0
- package/out/zero-client/src/client/keys.d.ts +3 -2
- package/out/zero-client/src/client/keys.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.js +32 -0
- package/out/zero-client/src/client/keys.js.map +1 -0
- package/out/zero-client/src/client/log-options.js +57 -0
- package/out/zero-client/src/client/log-options.js.map +1 -0
- package/out/zero-client/src/client/metrics.js +268 -0
- package/out/zero-client/src/client/metrics.js.map +1 -0
- package/out/zero-client/src/client/normalized-schema.d.ts +17 -0
- package/out/zero-client/src/client/normalized-schema.d.ts.map +1 -0
- package/out/zero-client/src/client/normalized-schema.js +31 -0
- package/out/zero-client/src/client/normalized-schema.js.map +1 -0
- package/out/zero-client/src/client/options.js +2 -0
- package/out/zero-client/src/client/options.js.map +1 -0
- package/out/zero-client/src/client/query-manager.d.ts +18 -3
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.js +149 -0
- package/out/zero-client/src/client/query-manager.js.map +1 -0
- package/out/zero-client/src/client/reload-error-handler.js +23 -0
- package/out/zero-client/src/client/reload-error-handler.js.map +1 -0
- package/out/zero-client/src/client/replicache-types.js +2 -0
- package/out/zero-client/src/client/replicache-types.js.map +1 -0
- package/out/zero-client/src/client/server-error.js +22 -0
- package/out/zero-client/src/client/server-error.js.map +1 -0
- package/out/zero-client/src/client/server-option.js +37 -0
- package/out/zero-client/src/client/server-option.js.map +1 -0
- package/out/zero-client/src/client/version.js +5 -0
- package/out/zero-client/src/client/version.js.map +1 -0
- package/out/zero-client/src/client/zero-poke-handler.d.ts +3 -3
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js +240 -0
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -0
- package/out/zero-client/src/client/zero.d.ts +3 -2
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +1212 -0
- package/out/zero-client/src/client/zero.js.map +1 -0
- package/out/zero-client/src/mod.d.ts +1 -0
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-client/src/mod.js +5 -0
- package/out/zero-client/src/mod.js.map +1 -0
- package/out/zero-client/src/util/nanoid.js +34 -0
- package/out/zero-client/src/util/nanoid.js.map +1 -0
- package/out/zero-client/src/util/socket.js +4 -0
- package/out/zero-client/src/util/socket.js.map +1 -0
- package/out/zero-protocol/src/ast.d.ts +87 -1
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +53 -0
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.d.ts +6 -6
- package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/clients-patch.d.ts +1 -1
- package/out/zero-protocol/src/connect.d.ts +15 -8
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +21 -0
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/data.d.ts +36 -0
- package/out/zero-protocol/src/data.d.ts.map +1 -0
- package/out/zero-protocol/src/data.js +4 -0
- package/out/zero-protocol/src/data.js.map +1 -0
- package/out/zero-protocol/src/delete-clients.d.ts +4 -4
- package/out/zero-protocol/src/delete-clients.d.ts.map +1 -1
- package/out/zero-protocol/src/down.d.ts +18 -16
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/down.js +2 -1
- package/out/zero-protocol/src/down.js.map +1 -1
- package/out/zero-protocol/src/mod.d.ts +1 -2
- package/out/zero-protocol/src/mod.d.ts.map +1 -1
- package/out/zero-protocol/src/mod.js +2 -2
- package/out/zero-protocol/src/mod.js.map +1 -1
- package/out/zero-protocol/src/ping.d.ts +1 -1
- package/out/zero-protocol/src/ping.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.d.ts +26 -26
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.js +8 -5
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/pong.d.ts +1 -1
- package/out/zero-protocol/src/pong.d.ts.map +1 -1
- package/out/zero-protocol/src/primary-key.d.ts +2 -3
- package/out/zero-protocol/src/primary-key.d.ts.map +1 -1
- package/out/zero-protocol/src/primary-key.js +1 -3
- package/out/zero-protocol/src/primary-key.js.map +1 -1
- package/out/zero-protocol/src/pull.d.ts +4 -4
- package/out/zero-protocol/src/pull.d.ts.map +1 -1
- package/out/zero-protocol/src/push.d.ts +105 -98
- package/out/zero-protocol/src/push.d.ts.map +1 -1
- package/out/zero-protocol/src/push.js +17 -13
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.d.ts +4 -4
- package/out/zero-protocol/src/row-patch.d.ts +38 -0
- package/out/zero-protocol/src/row-patch.d.ts.map +1 -0
- package/out/zero-protocol/src/{entities-patch.js → row-patch.js} +10 -11
- package/out/zero-protocol/src/row-patch.js.map +1 -0
- package/out/zero-protocol/src/up.d.ts +28 -27
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero-protocol/src/warm.d.ts +10 -0
- package/out/zero-protocol/src/warm.d.ts.map +1 -0
- package/out/zero-protocol/src/warm.js +6 -0
- package/out/zero-protocol/src/warm.js.map +1 -0
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero.js +522 -217
- package/out/zero.js.map +4 -4
- package/out/zql/src/zql/builder/builder.d.ts +3 -4
- package/out/zql/src/zql/builder/builder.d.ts.map +1 -1
- package/out/zql/src/zql/builder/builder.js +1 -2
- package/out/zql/src/zql/builder/builder.js.map +1 -1
- package/out/zql/src/zql/builder/filter.d.ts +2 -2
- package/out/zql/src/zql/builder/filter.d.ts.map +1 -1
- package/out/zql/src/zql/builder/filter.js.map +1 -1
- package/out/zql/src/zql/ivm/array-view.d.ts +5 -12
- package/out/zql/src/zql/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/array-view.js +226 -0
- package/out/zql/src/zql/ivm/array-view.js.map +1 -0
- package/out/zql/src/zql/ivm/change.d.ts +2 -1
- package/out/zql/src/zql/ivm/change.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/data.d.ts +2 -33
- package/out/zql/src/zql/ivm/data.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/data.js.map +1 -1
- package/out/zql/src/zql/ivm/filter.d.ts +2 -1
- package/out/zql/src/zql/ivm/filter.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/filter.js.map +1 -1
- package/out/zql/src/zql/ivm/join.d.ts +1 -1
- package/out/zql/src/zql/ivm/join.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/join.js +68 -24
- package/out/zql/src/zql/ivm/join.js.map +1 -1
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/memory-source.d.ts +8 -6
- package/out/zql/src/zql/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/memory-source.js +2 -0
- package/out/zql/src/zql/ivm/memory-source.js.map +1 -1
- package/out/zql/src/zql/ivm/memory-storage.js +33 -0
- package/out/zql/src/zql/ivm/memory-storage.js.map +1 -0
- package/out/zql/src/zql/ivm/operator.d.ts +2 -1
- package/out/zql/src/zql/ivm/operator.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/schema.d.ts +3 -3
- package/out/zql/src/zql/ivm/schema.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/schema.js.map +1 -1
- package/out/zql/src/zql/ivm/skip.d.ts +2 -1
- package/out/zql/src/zql/ivm/skip.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/skip.js.map +1 -1
- package/out/zql/src/zql/ivm/source.d.ts +2 -2
- package/out/zql/src/zql/ivm/source.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/take.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/take.js.map +1 -1
- package/out/zql/src/zql/query/like.d.ts +2 -0
- package/out/zql/src/zql/query/like.d.ts.map +1 -0
- package/out/zql/src/zql/query/like.js +18 -0
- package/out/zql/src/zql/query/like.js.map +1 -0
- package/out/zql/src/zql/query/normalize-table-schema.d.ts +48 -0
- package/out/zql/src/zql/query/normalize-table-schema.d.ts.map +1 -0
- package/out/zql/src/zql/query/normalize-table-schema.js +116 -0
- package/out/zql/src/zql/query/normalize-table-schema.js.map +1 -0
- package/out/zql/src/zql/query/query-impl.d.ts +6 -5
- package/out/zql/src/zql/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/zql/query/query-impl.js +263 -0
- package/out/zql/src/zql/query/query-impl.js.map +1 -0
- package/out/zql/src/zql/query/query.d.ts +1 -1
- package/out/zql/src/zql/query/query.d.ts.map +1 -1
- package/out/zql/src/zql/query/query.js +3 -0
- package/out/zql/src/zql/query/query.js.map +1 -0
- package/out/zql/src/zql/query/schema.d.ts +13 -4
- package/out/zql/src/zql/query/schema.d.ts.map +1 -1
- package/out/zql/src/zql/query/schema.js +7 -0
- package/out/zql/src/zql/query/schema.js.map +1 -0
- package/out/zql/src/zql/query/typed-view.d.ts +5 -2
- package/out/zql/src/zql/query/typed-view.d.ts.map +1 -1
- package/out/zql/src/zql/query/typed-view.js +2 -0
- package/out/zql/src/zql/query/typed-view.js.map +1 -0
- package/out/zqlite/src/db.d.ts +1 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +1 -1
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +2 -2
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +10 -8
- package/deps/sqlite3/sqlite3.c +0 -260574
- package/deps/sqlite3/sqlite3.h +0 -13572
- package/deps/sqlite3/sqlite3ext.h +0 -719
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.d.ts +0 -6
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.js +0 -29
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts +0 -6
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.d.ts +0 -11
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.js +0 -86
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.js.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.d.ts +0 -4
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.js +0 -12
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.js.map +0 -1
- package/out/zero-cache/src/types/specs.d.ts +0 -29
- package/out/zero-cache/src/types/specs.d.ts.map +0 -1
- package/out/zero-cache/src/types/specs.js +0 -2
- package/out/zero-cache/src/types/specs.js.map +0 -1
- package/out/zero-client/src/client/make-id-from-primary-key.d.ts +0 -5
- package/out/zero-client/src/client/make-id-from-primary-key.d.ts.map +0 -1
- package/out/zero-protocol/src/entities-patch.d.ts +0 -66
- package/out/zero-protocol/src/entities-patch.d.ts.map +0 -1
- package/out/zero-protocol/src/entities-patch.js.map +0 -1
- package/out/zql/src/zql/ast/ast.d.ts +0 -84
- package/out/zql/src/zql/ast/ast.d.ts.map +0 -1
- package/out/zql/src/zql/ast/ast.js +0 -54
- package/out/zql/src/zql/ast/ast.js.map +0 -1
- package/tool/install-sqlite3.js +0 -37
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
export var MetricName;
|
|
2
|
+
(function (MetricName) {
|
|
3
|
+
MetricName["TimeToConnectMs"] = "time_to_connect_ms";
|
|
4
|
+
MetricName["LastConnectError"] = "last_connect_error";
|
|
5
|
+
MetricName["TimeToConnectMsV2"] = "time_to_connect_ms_v2";
|
|
6
|
+
MetricName["LastConnectErrorV2"] = "last_connect_error_v2";
|
|
7
|
+
MetricName["TotalTimeToConnectMs"] = "total_time_to_connect_ms";
|
|
8
|
+
MetricName["NotConnected"] = "not_connected";
|
|
9
|
+
})(MetricName || (MetricName = {}));
|
|
10
|
+
// This value is used to indicate that the client's last connection attempt
|
|
11
|
+
// failed. We don't make this -1 because we want to stack this never connected
|
|
12
|
+
// state in a graph on top of actual connection times, so it should be greater
|
|
13
|
+
// than any other value.
|
|
14
|
+
export const DID_NOT_CONNECT_VALUE = 100 * 1000;
|
|
15
|
+
export const REPORT_INTERVAL_MS = 5_000;
|
|
16
|
+
export function getLastConnectErrorValue(reason) {
|
|
17
|
+
if ('server' in reason) {
|
|
18
|
+
return `server_${camelToSnake(reason.server)}`;
|
|
19
|
+
}
|
|
20
|
+
return `client_${camelToSnake(reason.client)}`;
|
|
21
|
+
}
|
|
22
|
+
// camelToSnake is used to convert a protocol ErrorKind into a suitable
|
|
23
|
+
// metric name, eg AuthInvalidated => auth_invalidated. It converts
|
|
24
|
+
// both PascalCase and camelCase to snake_case.
|
|
25
|
+
function camelToSnake(s) {
|
|
26
|
+
return s
|
|
27
|
+
.split(/\.?(?=[A-Z])/)
|
|
28
|
+
.join('_')
|
|
29
|
+
.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* MetricManager keeps track of the set of metrics in use and flushes them
|
|
33
|
+
* to a format suitable for reporting.
|
|
34
|
+
*/
|
|
35
|
+
export class MetricManager {
|
|
36
|
+
#reportIntervalMs;
|
|
37
|
+
#host;
|
|
38
|
+
#reporter;
|
|
39
|
+
#lc;
|
|
40
|
+
#timerID;
|
|
41
|
+
constructor(opts) {
|
|
42
|
+
this.#reportIntervalMs = opts.reportIntervalMs;
|
|
43
|
+
this.#host = opts.host;
|
|
44
|
+
this.#reporter = opts.reporter;
|
|
45
|
+
this.#lc = opts.lc;
|
|
46
|
+
this.tags.push(`source:${opts.source}`);
|
|
47
|
+
this.timeToConnectMs.set(DID_NOT_CONNECT_VALUE);
|
|
48
|
+
this.#setNotConnectedReason('init');
|
|
49
|
+
this.#timerID = setInterval(() => {
|
|
50
|
+
void this.flush();
|
|
51
|
+
}, this.#reportIntervalMs);
|
|
52
|
+
}
|
|
53
|
+
#metrics = [];
|
|
54
|
+
// timeToConnectMs measures the time from the call to connect() to receiving
|
|
55
|
+
// the 'connected' ws message. We record the DID_NOT_CONNECT_VALUE if the previous
|
|
56
|
+
// connection attempt failed for any reason.
|
|
57
|
+
//
|
|
58
|
+
// We set the gauge using #connectStart as follows:
|
|
59
|
+
// - #connectStart is undefined if we are disconnected or connected; it is
|
|
60
|
+
// defined only in the Connecting state, as a number representing the timestamp
|
|
61
|
+
// at which we started connecting.
|
|
62
|
+
// - #connectStart is set to the current time when connect() is called.
|
|
63
|
+
// - When we receive the 'connected' message we record the time to connect and
|
|
64
|
+
// set #connectStart to undefined.
|
|
65
|
+
// - If disconnect() is called with a defined #connectStart then we record
|
|
66
|
+
// DID_NOT_CONNECT_VALUE and set #connectStart to undefined.
|
|
67
|
+
//
|
|
68
|
+
// TODO It's clear after playing with the connection code we should encapsulate
|
|
69
|
+
// the ConnectionState along with its state transitions and possibly behavior.
|
|
70
|
+
// In that world the metric gauge(s) and bookkeeping like #connectStart would
|
|
71
|
+
// be encapsulated with the ConnectionState. This will probably happen as part
|
|
72
|
+
// of https://github.com/rocicorp/reflect-server/issues/255.
|
|
73
|
+
timeToConnectMs = this.#register(new Gauge(MetricName.TimeToConnectMs));
|
|
74
|
+
// lastConnectError records the last error that occurred when connecting,
|
|
75
|
+
// if any. It is cleared when connecting successfully or when reported, so this
|
|
76
|
+
// state only gets reported if there was a failure during the reporting period and
|
|
77
|
+
// we are still not connected.
|
|
78
|
+
lastConnectError = this.#register(new State(MetricName.LastConnectError, true));
|
|
79
|
+
// notConnected records the reason why the client is not currently connected.
|
|
80
|
+
// It is cleared when the client successfully connects.
|
|
81
|
+
#notConnected = this.#register(new State(MetricName.NotConnected));
|
|
82
|
+
// The time from the call to connect() to receiving the 'connected' ws message
|
|
83
|
+
// for the current connection. Cleared when the client is not connected.
|
|
84
|
+
// TODO: Not actually currently cleared on disconnect untill there is a
|
|
85
|
+
// connect error, or client reports disconnected and waiting for visible.
|
|
86
|
+
// Should have a value iff _notConnected has no value.
|
|
87
|
+
#timeToConnectMsV2 = this.#register(new Gauge(MetricName.TimeToConnectMsV2));
|
|
88
|
+
// lastConnectErrorV2 records the last error that occurred when connecting,
|
|
89
|
+
// if any. It is cleared when the client successfully connects or
|
|
90
|
+
// stops trying to connect due to being hidden.
|
|
91
|
+
// Should have a value iff notConnected state is NotConnectedReason.Error.
|
|
92
|
+
#lastConnectErrorV2 = this.#register(new State(MetricName.LastConnectErrorV2));
|
|
93
|
+
// The total time it took to connect across retries for the current
|
|
94
|
+
// connection. Cleared when the client is not connected.
|
|
95
|
+
// TODO: Not actually currently cleared on disconnect until there is a
|
|
96
|
+
// connect error, or client reports disconnected and waiting for visible.
|
|
97
|
+
// See Zero.#totalToConnectStart for details of how this total is computed.
|
|
98
|
+
// Should have a value iff _notConnected has no value.
|
|
99
|
+
#totalTimeToConnectMs = this.#register(new Gauge(MetricName.TotalTimeToConnectMs));
|
|
100
|
+
#setNotConnectedReason(reason) {
|
|
101
|
+
this.#notConnected.set(reason);
|
|
102
|
+
}
|
|
103
|
+
setConnected(timeToConnectMs, totalTimeToConnectMs) {
|
|
104
|
+
this.#notConnected.clear();
|
|
105
|
+
this.#lastConnectErrorV2.clear();
|
|
106
|
+
this.#timeToConnectMsV2.set(timeToConnectMs);
|
|
107
|
+
this.#totalTimeToConnectMs.set(totalTimeToConnectMs);
|
|
108
|
+
}
|
|
109
|
+
setDisconnectedWaitingForVisible() {
|
|
110
|
+
this.#timeToConnectMsV2.clear();
|
|
111
|
+
this.#totalTimeToConnectMs.clear();
|
|
112
|
+
this.#lastConnectErrorV2.clear();
|
|
113
|
+
let notConnectedReason;
|
|
114
|
+
switch (this.#notConnected.get()) {
|
|
115
|
+
case 'init':
|
|
116
|
+
notConnectedReason = 'hidden_was_init';
|
|
117
|
+
break;
|
|
118
|
+
case 'error':
|
|
119
|
+
notConnectedReason = 'hidden_was_error';
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
notConnectedReason = 'hidden';
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
this.#setNotConnectedReason(notConnectedReason);
|
|
126
|
+
}
|
|
127
|
+
setConnectError(reason) {
|
|
128
|
+
this.#timeToConnectMsV2.clear();
|
|
129
|
+
this.#totalTimeToConnectMs.clear();
|
|
130
|
+
this.#setNotConnectedReason('error');
|
|
131
|
+
this.#lastConnectErrorV2.set(getLastConnectErrorValue(reason));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Tags to include in all metrics.
|
|
135
|
+
*/
|
|
136
|
+
tags = [];
|
|
137
|
+
// Flushes all metrics to an array of time series (plural), one Series
|
|
138
|
+
// per metric.
|
|
139
|
+
async flush() {
|
|
140
|
+
const lc = this.#lc;
|
|
141
|
+
if (this.#timerID === null) {
|
|
142
|
+
lc.error?.('MetricManager.flush() called but already stopped');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const allSeries = [];
|
|
146
|
+
for (const metric of this.#metrics) {
|
|
147
|
+
const series = metric.flush();
|
|
148
|
+
if (series !== undefined) {
|
|
149
|
+
allSeries.push({
|
|
150
|
+
...series,
|
|
151
|
+
host: this.#host,
|
|
152
|
+
tags: this.tags,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (allSeries.length === 0) {
|
|
157
|
+
lc?.debug?.('No metrics to report');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
await this.#reporter(allSeries);
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
lc?.error?.(`Error reporting metrics: ${e}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
stop() {
|
|
168
|
+
if (this.#timerID === null) {
|
|
169
|
+
this.#lc.error?.('MetricManager.stop() called but already stopped');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
clearInterval(this.#timerID);
|
|
173
|
+
this.#timerID = null;
|
|
174
|
+
}
|
|
175
|
+
#register(metric) {
|
|
176
|
+
this.#metrics.push(metric);
|
|
177
|
+
return metric;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function makePoint(ts, value) {
|
|
181
|
+
return [ts, [value]];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Gauge is a metric type that represents a single value that can go up and
|
|
185
|
+
* down. It's typically used to track discrete values or counts eg the number
|
|
186
|
+
* of active users, number of connections, cpu load, etc. A gauge retains
|
|
187
|
+
* its value when flushed.
|
|
188
|
+
*
|
|
189
|
+
* We use a Gauge to sample at the client. If we are interested in tracking
|
|
190
|
+
* a metric value *per client*, the client can note the latest value in
|
|
191
|
+
* a Gauge metric. The metric is periodically reported via Reporter. On the
|
|
192
|
+
* server, we graph the value of the metric rolled up over the periodic
|
|
193
|
+
* reporting period, that is, counted over a span of time equal to the
|
|
194
|
+
* reporting period. The result is ~one point per client per reporting
|
|
195
|
+
* period.
|
|
196
|
+
*/
|
|
197
|
+
export class Gauge {
|
|
198
|
+
#name;
|
|
199
|
+
#value = undefined;
|
|
200
|
+
constructor(name) {
|
|
201
|
+
this.#name = name;
|
|
202
|
+
}
|
|
203
|
+
set(value) {
|
|
204
|
+
this.#value = value;
|
|
205
|
+
}
|
|
206
|
+
get() {
|
|
207
|
+
return this.#value;
|
|
208
|
+
}
|
|
209
|
+
clear() {
|
|
210
|
+
this.#value = undefined;
|
|
211
|
+
}
|
|
212
|
+
flush() {
|
|
213
|
+
if (this.#value === undefined) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
// Gauge reports the timestamp at flush time, not at the point the value was
|
|
217
|
+
// recorded.
|
|
218
|
+
const points = [makePoint(t(), this.#value)];
|
|
219
|
+
return { metric: this.#name, points };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function t() {
|
|
223
|
+
return Math.round(Date.now() / 1000);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* State is a metric type that represents a specific state that the system is
|
|
227
|
+
* in, for example the state of a connection which may be 'open' or 'closed'.
|
|
228
|
+
* The state is given a name/prefix at construction time (eg 'connection') and
|
|
229
|
+
* then can be set to a specific state (eg 'open'). The prefix is prepended to
|
|
230
|
+
* the set state (eg, 'connection_open') and a value of 1 is reported.
|
|
231
|
+
* Unset/cleared states are not reported.
|
|
232
|
+
*
|
|
233
|
+
* Example:
|
|
234
|
+
* const s = new State('connection');
|
|
235
|
+
* s.set('open');
|
|
236
|
+
* s.flush(); // returns {metric: 'connection_open', points: [[now(), [1]]]}
|
|
237
|
+
*/
|
|
238
|
+
export class State {
|
|
239
|
+
#prefix;
|
|
240
|
+
#clearOnFlush;
|
|
241
|
+
#current = undefined;
|
|
242
|
+
constructor(prefix, clearOnFlush = false) {
|
|
243
|
+
this.#prefix = prefix;
|
|
244
|
+
this.#clearOnFlush = clearOnFlush;
|
|
245
|
+
}
|
|
246
|
+
set(state) {
|
|
247
|
+
this.#current = state;
|
|
248
|
+
}
|
|
249
|
+
get() {
|
|
250
|
+
return this.#current;
|
|
251
|
+
}
|
|
252
|
+
clear() {
|
|
253
|
+
this.#current = undefined;
|
|
254
|
+
}
|
|
255
|
+
flush() {
|
|
256
|
+
if (this.#current === undefined) {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
const gauge = new Gauge([this.#prefix, this.#current].join('_'));
|
|
260
|
+
gauge.set(1);
|
|
261
|
+
const series = gauge.flush();
|
|
262
|
+
if (this.#clearOnFlush) {
|
|
263
|
+
this.clear();
|
|
264
|
+
}
|
|
265
|
+
return series;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { NormalizedTableSchema } from '../../../zql/src/zql/query/normalize-table-schema.js';
|
|
2
|
+
import type { Schema } from './zero.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a normalized schema from a schema.
|
|
5
|
+
*
|
|
6
|
+
* A normalized schema has all the keys sorted and the primary key and the
|
|
7
|
+
* primary key columns are checked to be valid.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeSchema(schema: Schema): NormalizedSchema;
|
|
10
|
+
export declare class NormalizedSchema {
|
|
11
|
+
readonly version: number;
|
|
12
|
+
readonly tables: {
|
|
13
|
+
readonly [table: string]: NormalizedTableSchema;
|
|
14
|
+
};
|
|
15
|
+
constructor(schema: Schema);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=normalized-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalized-schema.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/normalized-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAGtB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAKhE;AAED,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC;KACjD,CAAC;gBAEU,MAAM,EAAE,MAAM;CAI3B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { sortedEntries } from '../../../shared/src/sorted-entries.js';
|
|
2
|
+
import { NormalizedTableSchema, normalizeTableSchemaWithCache, } from '../../../zql/src/zql/query/normalize-table-schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a normalized schema from a schema.
|
|
5
|
+
*
|
|
6
|
+
* A normalized schema has all the keys sorted and the primary key and the
|
|
7
|
+
* primary key columns are checked to be valid.
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeSchema(schema) {
|
|
10
|
+
if (schema instanceof NormalizedSchema) {
|
|
11
|
+
return schema;
|
|
12
|
+
}
|
|
13
|
+
return new NormalizedSchema(schema);
|
|
14
|
+
}
|
|
15
|
+
export class NormalizedSchema {
|
|
16
|
+
version;
|
|
17
|
+
tables;
|
|
18
|
+
constructor(schema) {
|
|
19
|
+
this.version = schema.version;
|
|
20
|
+
this.tables = normalizeTables(schema.tables);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function normalizeTables(tables) {
|
|
24
|
+
const rv = {};
|
|
25
|
+
const tableSchemaCache = new Map();
|
|
26
|
+
for (const [name, table] of sortedEntries(tables)) {
|
|
27
|
+
rv[name] = normalizeTableSchemaWithCache(table, name, tableSchemaCache);
|
|
28
|
+
}
|
|
29
|
+
return rv;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=normalized-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalized-schema.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/normalized-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAE9B,MAAM,sDAAsD,CAAC;AAG9D;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,MAAM,YAAY,gBAAgB,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,OAAO,gBAAgB;IAClB,OAAO,CAAS;IAChB,MAAM,CAEb;IAEF,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,SAAS,eAAe,CAAC,MAAwB;IAG/C,MAAM,EAAE,GAEH,EAAE,CAAC;IACR,MAAM,gBAAgB,GAAqB,IAAI,GAAG,EAAE,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,EAAE,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/options.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ClientID } from '../../../replicache/src/mod.js';
|
|
2
2
|
import type { ReplicacheImpl } from '../../../replicache/src/replicache-impl.js';
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
3
|
+
import { type AST } from '../../../zero-protocol/src/ast.js';
|
|
4
|
+
import type { ChangeDesiredQueriesMessage, QueriesPatchOp } from '../../../zero-protocol/src/mod.js';
|
|
5
5
|
import type { GotCallback } from '../../../zql/src/zql/query/query-impl.js';
|
|
6
6
|
import type { ReadTransaction } from '../mod.js';
|
|
7
7
|
/**
|
|
@@ -12,7 +12,22 @@ import type { ReadTransaction } from '../mod.js';
|
|
|
12
12
|
export declare class QueryManager {
|
|
13
13
|
#private;
|
|
14
14
|
constructor(clientID: ClientID, send: (change: ChangeDesiredQueriesMessage) => void, experimentalWatch: InstanceType<typeof ReplicacheImpl>['experimentalWatch']);
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Get the queries that need to be registered with the server.
|
|
17
|
+
*
|
|
18
|
+
* An optional `lastPatch` can be provided. This is the last patch that was
|
|
19
|
+
* sent to the server and may not yet have been acked. If `lastPatch` is provided,
|
|
20
|
+
* this method will return a patch that does not include any events sent in `lastPatch`.
|
|
21
|
+
*
|
|
22
|
+
* This diffing of last patch and current patch is needed since we send
|
|
23
|
+
* a set of queries to the server when we first connect inside of the `sec-protocol` as
|
|
24
|
+
* the `initConnectionMessage`.
|
|
25
|
+
*
|
|
26
|
+
* While we're waiting for the `connected` response to come back from the server,
|
|
27
|
+
* the client may have registered more queries. We need to diff the `initConnectionMessage`
|
|
28
|
+
* queries with the current set of queries to understand what those were.
|
|
29
|
+
*/
|
|
30
|
+
getQueriesPatch(tx: ReadTransaction, lastPatch?: Map<string, QueriesPatchOp> | undefined): Promise<Map<string, QueriesPatchOp>>;
|
|
16
31
|
add(ast: AST, gotCallback?: GotCallback | undefined): () => void;
|
|
17
32
|
}
|
|
18
33
|
//# sourceMappingURL=query-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-manager.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/query-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,4CAA4C,CAAC;AAG/E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"query-manager.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/query-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,4CAA4C,CAAC;AAG/E,OAAO,EAAe,KAAK,GAAG,EAAC,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EACV,2BAA2B,EAC3B,cAAc,EACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,0CAA0C,CAAC;AAC1E,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,WAAW,CAAC;AAG/C;;;;GAIG;AACH,qBAAa,YAAY;;gBAUrB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,IAAI,EACnD,iBAAiB,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,mBAAmB,CAAC;IAkC7E;;;;;;;;;;;;;;OAcG;IACG,eAAe,CACnB,EAAE,EAAE,eAAe,EACnB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,SAAS,GAClD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAsCvC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,IAAI;CAuDjE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { must } from '../../../shared/src/must.js';
|
|
2
|
+
import { h64 } from '../../../shared/src/xxhash.js';
|
|
3
|
+
import { normalizeAST } from '../../../zero-protocol/src/ast.js';
|
|
4
|
+
import { desiredQueriesPrefixForClient, GOT_QUERIES_KEY_PREFIX } from './keys.js';
|
|
5
|
+
/**
|
|
6
|
+
* Tracks what queries the client is currently subscribed to on the server.
|
|
7
|
+
* Sends `changeDesiredQueries` message to server when this changes.
|
|
8
|
+
* Deduplicates requests so that we only listen to a given unique query once.
|
|
9
|
+
*/
|
|
10
|
+
export class QueryManager {
|
|
11
|
+
#clientID;
|
|
12
|
+
#send;
|
|
13
|
+
#queries = new Map();
|
|
14
|
+
#gotQueries = new Set();
|
|
15
|
+
constructor(clientID, send, experimentalWatch) {
|
|
16
|
+
this.#clientID = clientID;
|
|
17
|
+
this.#send = send;
|
|
18
|
+
experimentalWatch(diff => {
|
|
19
|
+
for (const diffOp of diff) {
|
|
20
|
+
const queryHash = diffOp.key.substring(GOT_QUERIES_KEY_PREFIX.length);
|
|
21
|
+
switch (diffOp.op) {
|
|
22
|
+
case 'add':
|
|
23
|
+
this.#gotQueries.add(queryHash);
|
|
24
|
+
this.#fireGotCallbacks(queryHash, true);
|
|
25
|
+
break;
|
|
26
|
+
case 'del':
|
|
27
|
+
this.#gotQueries.delete(queryHash);
|
|
28
|
+
this.#fireGotCallbacks(queryHash, false);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}, {
|
|
33
|
+
prefix: GOT_QUERIES_KEY_PREFIX,
|
|
34
|
+
initialValuesInFirstDiff: true,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
#fireGotCallbacks(queryHash, got) {
|
|
38
|
+
const gotCallbacks = this.#queries.get(queryHash)?.gotCallbacks ?? [];
|
|
39
|
+
for (const gotCallback of gotCallbacks) {
|
|
40
|
+
gotCallback(got);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the queries that need to be registered with the server.
|
|
45
|
+
*
|
|
46
|
+
* An optional `lastPatch` can be provided. This is the last patch that was
|
|
47
|
+
* sent to the server and may not yet have been acked. If `lastPatch` is provided,
|
|
48
|
+
* this method will return a patch that does not include any events sent in `lastPatch`.
|
|
49
|
+
*
|
|
50
|
+
* This diffing of last patch and current patch is needed since we send
|
|
51
|
+
* a set of queries to the server when we first connect inside of the `sec-protocol` as
|
|
52
|
+
* the `initConnectionMessage`.
|
|
53
|
+
*
|
|
54
|
+
* While we're waiting for the `connected` response to come back from the server,
|
|
55
|
+
* the client may have registered more queries. We need to diff the `initConnectionMessage`
|
|
56
|
+
* queries with the current set of queries to understand what those were.
|
|
57
|
+
*/
|
|
58
|
+
async getQueriesPatch(tx, lastPatch) {
|
|
59
|
+
const existingQueryHashes = new Set();
|
|
60
|
+
const prefix = desiredQueriesPrefixForClient(this.#clientID);
|
|
61
|
+
for await (const key of tx.scan({ prefix }).keys()) {
|
|
62
|
+
existingQueryHashes.add(key.substring(prefix.length, key.length));
|
|
63
|
+
}
|
|
64
|
+
const patch = new Map();
|
|
65
|
+
for (const hash of existingQueryHashes) {
|
|
66
|
+
if (!this.#queries.has(hash)) {
|
|
67
|
+
patch.set(hash, { op: 'del', hash });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
for (const [hash, { normalized }] of this.#queries) {
|
|
71
|
+
if (!existingQueryHashes.has(hash)) {
|
|
72
|
+
patch.set(hash, { op: 'put', hash, ast: normalized });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (lastPatch) {
|
|
76
|
+
// if there are any `puts` in `lastPatch` that are not in `patch` then we need to
|
|
77
|
+
// send a `del` event in `patch`.
|
|
78
|
+
for (const [hash, { op }] of lastPatch) {
|
|
79
|
+
if (op === 'put' && !patch.has(hash)) {
|
|
80
|
+
patch.set(hash, { op: 'del', hash });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Remove everything from `patch` that was already sent in `lastPatch`.
|
|
84
|
+
for (const [hash, { op }] of patch) {
|
|
85
|
+
const lastPatchOp = lastPatch.get(hash);
|
|
86
|
+
if (lastPatchOp && lastPatchOp.op === op) {
|
|
87
|
+
patch.delete(hash);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return patch;
|
|
92
|
+
}
|
|
93
|
+
add(ast, gotCallback) {
|
|
94
|
+
const normalized = normalizeAST(ast);
|
|
95
|
+
const astHash = hash(normalized);
|
|
96
|
+
let entry = this.#queries.get(astHash);
|
|
97
|
+
if (!entry) {
|
|
98
|
+
entry = {
|
|
99
|
+
normalized,
|
|
100
|
+
count: 1,
|
|
101
|
+
gotCallbacks: gotCallback === undefined ? [] : [gotCallback],
|
|
102
|
+
};
|
|
103
|
+
this.#queries.set(astHash, entry);
|
|
104
|
+
this.#send([
|
|
105
|
+
'changeDesiredQueries',
|
|
106
|
+
{
|
|
107
|
+
desiredQueriesPatch: [{ op: 'put', hash: astHash, ast: normalized }],
|
|
108
|
+
},
|
|
109
|
+
]);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
++entry.count;
|
|
113
|
+
if (gotCallback) {
|
|
114
|
+
entry.gotCallbacks.push(gotCallback);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (gotCallback) {
|
|
118
|
+
queueMicrotask(() => {
|
|
119
|
+
gotCallback(this.#gotQueries.has(astHash));
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
let removed = false;
|
|
123
|
+
return () => {
|
|
124
|
+
if (removed) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
removed = true;
|
|
128
|
+
this.#remove(astHash);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
#remove(astHash) {
|
|
132
|
+
const entry = must(this.#queries.get(astHash));
|
|
133
|
+
--entry.count;
|
|
134
|
+
if (entry.count === 0) {
|
|
135
|
+
this.#queries.delete(astHash);
|
|
136
|
+
this.#send([
|
|
137
|
+
'changeDesiredQueries',
|
|
138
|
+
{
|
|
139
|
+
desiredQueriesPatch: [{ op: 'del', hash: astHash }],
|
|
140
|
+
},
|
|
141
|
+
]);
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function hash(normalized) {
|
|
147
|
+
return h64(JSON.stringify(normalized)).toString(36);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=query-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-manager.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/query-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const RELOAD_REASON_STORAGE_KEY = '_zeroReloadReason';
|
|
2
|
+
// TODO: This should get pushed down into Replicache and used for reloads we
|
|
3
|
+
// do there.
|
|
4
|
+
export function reloadWithReason(lc, reload, reason) {
|
|
5
|
+
if (typeof localStorage === 'undefined') {
|
|
6
|
+
lc.error?.('Zero reloaded the page.', reason);
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
localStorage[RELOAD_REASON_STORAGE_KEY] = reason;
|
|
10
|
+
}
|
|
11
|
+
reload();
|
|
12
|
+
}
|
|
13
|
+
export function reportReloadReason(lc) {
|
|
14
|
+
if (typeof localStorage === 'undefined') {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const reason = localStorage[RELOAD_REASON_STORAGE_KEY];
|
|
18
|
+
if (reason) {
|
|
19
|
+
delete localStorage[RELOAD_REASON_STORAGE_KEY];
|
|
20
|
+
lc.error?.('Zero reloaded the page.', reason);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=reload-error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload-error-handler.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/reload-error-handler.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAE7D,4EAA4E;AAC5E,YAAY;AACZ,MAAM,UAAU,gBAAgB,CAC9B,EAAc,EACd,MAAkB,EAClB,MAAc;IAEd,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;QACxC,EAAE,CAAC,KAAK,EAAE,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAc;IAC/C,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAC/C,EAAE,CAAC,KAAK,EAAE,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replicache-types.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/replicache-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ErrorKind } from '../../../zero-protocol/src/mod.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents an error sent by server as part of Zero protocol.
|
|
4
|
+
*/
|
|
5
|
+
export class ServerError extends Error {
|
|
6
|
+
kind;
|
|
7
|
+
name = 'ServerError';
|
|
8
|
+
constructor(kind, message) {
|
|
9
|
+
super(kind + ': ' + message);
|
|
10
|
+
this.kind = kind;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function isServerError(ex) {
|
|
14
|
+
return ex instanceof ServerError;
|
|
15
|
+
}
|
|
16
|
+
export function isAuthError(ex) {
|
|
17
|
+
return isServerError(ex) && isAuthErrorKind(ex.kind);
|
|
18
|
+
}
|
|
19
|
+
function isAuthErrorKind(kind) {
|
|
20
|
+
return kind === ErrorKind.AuthInvalidated || kind === ErrorKind.Unauthorized;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=server-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-error.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/server-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,mCAAmC,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,WAA6C,SAAQ,KAAK;IAC5D,IAAI,CAAI;IACR,IAAI,GAAG,aAAa,CAAC;IAC9B,YAAY,IAAO,EAAE,OAAe;QAClC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,EAAW;IACvC,OAAO,EAAE,YAAY,WAAW,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,EAAW;IAIX,OAAO,aAAa,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CACtB,IAAe;IAEf,OAAO,IAAI,KAAK,SAAS,CAAC,eAAe,IAAI,IAAI,KAAK,SAAS,CAAC,YAAY,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function validateServerParam(paramName, server) {
|
|
2
|
+
const expectedProtocol = 'http';
|
|
3
|
+
const forExample = () => ` For example: "${expectedProtocol}s://myapp-myteam.zero.ms/".`;
|
|
4
|
+
if (!server.startsWith(`${expectedProtocol}://`) &&
|
|
5
|
+
!server.startsWith(`${expectedProtocol}s://`)) {
|
|
6
|
+
throw new Error(`ZeroOptions.${paramName} must use the "${expectedProtocol}" or "${expectedProtocol}s" scheme.`);
|
|
7
|
+
}
|
|
8
|
+
let url;
|
|
9
|
+
try {
|
|
10
|
+
url = new URL(server);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
throw new Error(`ZeroOptions.${paramName} must be a valid URL.${forExample()}`);
|
|
14
|
+
}
|
|
15
|
+
const urlString = url.toString();
|
|
16
|
+
if (url.pathname !== '/') {
|
|
17
|
+
throw new Error(`ZeroOptions.${paramName} must not contain a path component (other than "/").${forExample()}`);
|
|
18
|
+
}
|
|
19
|
+
for (const [property, invalidEndsWith] of [
|
|
20
|
+
['search', '?'],
|
|
21
|
+
['hash', '#'],
|
|
22
|
+
]) {
|
|
23
|
+
if (url[property] || urlString.endsWith(invalidEndsWith)) {
|
|
24
|
+
throw new Error(`ZeroOptions.${paramName} must not contain a ${property} component.${forExample()}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return urlString;
|
|
28
|
+
}
|
|
29
|
+
export function getServer(server) {
|
|
30
|
+
if (server === undefined || server === null) {
|
|
31
|
+
console.warn('Zero starting up with no server URL. This is supported for unit testing ' +
|
|
32
|
+
'and prototyping, but no data will be synced.');
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return validateServerParam('server', server);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=server-option.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-option.js","sourceRoot":"","sources":["../../../../../zero-client/src/client/server-option.ts"],"names":[],"mappings":"AAEA,SAAS,mBAAmB,CAAC,SAAiB,EAAE,MAAc;IAC5D,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAChC,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,kBAAkB,gBAAgB,6BAA6B,CAAC;IAElE,IACE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,gBAAgB,KAAK,CAAC;QAC5C,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,gBAAgB,MAAM,CAAC,EAC7C,CAAC;QACD,MAAM,IAAI,KAAK,CACb,eAAe,SAAS,kBAAkB,gBAAgB,SAAS,gBAAgB,YAAY,CAChG,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,eAAe,SAAS,wBAAwB,UAAU,EAAE,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAEjC,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,eAAe,SAAS,uDAAuD,UAAU,EAAE,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI;QACxC,CAAC,QAAQ,EAAE,GAAG,CAAC;QACf,CAAC,MAAM,EAAE,GAAG,CAAC;KACL,EAAE,CAAC;QACX,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,eAAe,SAAS,uBAAuB,QAAQ,cAAc,UAAU,EAAE,EAAE,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAuB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAiC;IAEjC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CACV,0EAA0E;YACxE,8CAA8C,CACjD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|