@rocicorp/zero 1.12.0-canary.8 → 1.12.0-canary.9
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/replicache/src/btree/node.d.ts +0 -2
- package/out/replicache/src/btree/node.d.ts.map +1 -1
- package/out/replicache/src/btree/node.js.map +1 -1
- package/out/replicache/src/connection-loop.d.ts.map +1 -1
- package/out/replicache/src/connection-loop.js +1 -1
- package/out/replicache/src/connection-loop.js.map +1 -1
- package/out/replicache/src/db/commit.d.ts +0 -1
- package/out/replicache/src/db/commit.d.ts.map +1 -1
- package/out/replicache/src/db/commit.js +1 -1
- package/out/replicache/src/db/commit.js.map +1 -1
- package/out/replicache/src/db/write.d.ts +0 -2
- package/out/replicache/src/db/write.d.ts.map +1 -1
- package/out/replicache/src/db/write.js +1 -1
- package/out/replicache/src/db/write.js.map +1 -1
- package/out/replicache/src/deleted-clients.d.ts +0 -2
- package/out/replicache/src/deleted-clients.d.ts.map +1 -1
- package/out/replicache/src/deleted-clients.js +1 -1
- package/out/replicache/src/deleted-clients.js.map +1 -1
- package/out/replicache/src/frozen-json.d.ts +0 -1
- package/out/replicache/src/frozen-json.d.ts.map +1 -1
- package/out/replicache/src/frozen-json.js.map +1 -1
- package/out/replicache/src/index-defs.d.ts +0 -2
- package/out/replicache/src/index-defs.d.ts.map +1 -1
- package/out/replicache/src/index-defs.js +1 -1
- package/out/replicache/src/index-defs.js.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts +0 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/idb-store.js +1 -1
- package/out/replicache/src/kv/idb-store.js.map +1 -1
- package/out/replicache/src/kv/throw-if-closed.d.ts +0 -3
- package/out/replicache/src/kv/throw-if-closed.d.ts.map +1 -1
- package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
- package/out/replicache/src/persist/client-group-gc.d.ts +0 -7
- package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -1
- package/out/replicache/src/persist/client-group-gc.js +1 -1
- package/out/replicache/src/persist/client-group-gc.js.map +1 -1
- package/out/replicache/src/process-scheduler.js +1 -1
- package/out/replicache/src/process-scheduler.js.map +1 -1
- package/out/replicache/src/replicache-impl.d.ts +2 -7
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js +1 -1
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/sync/patch.d.ts +0 -5
- package/out/replicache/src/sync/patch.d.ts.map +1 -1
- package/out/replicache/src/sync/patch.js +1 -1
- package/out/replicache/src/sync/patch.js.map +1 -1
- package/out/replicache/src/sync/pull.d.ts +0 -1
- package/out/replicache/src/sync/pull.d.ts.map +1 -1
- package/out/replicache/src/sync/pull.js.map +1 -1
- package/out/replicache/src/sync/push.d.ts +2 -1
- package/out/replicache/src/sync/push.d.ts.map +1 -1
- package/out/replicache/src/sync/push.js.map +1 -1
- package/out/replicache/src/types.d.ts +2 -1
- package/out/replicache/src/types.d.ts.map +1 -1
- package/out/shared/src/asserts.d.ts +0 -5
- package/out/shared/src/asserts.d.ts.map +1 -1
- package/out/shared/src/asserts.js +1 -1
- package/out/shared/src/asserts.js.map +1 -1
- package/out/shared/src/browser-env.d.ts +0 -17
- package/out/shared/src/browser-env.d.ts.map +1 -1
- package/out/shared/src/browser-env.js.map +1 -1
- package/out/shared/src/deep-clone.d.ts +0 -1
- package/out/shared/src/deep-clone.d.ts.map +1 -1
- package/out/shared/src/deep-clone.js +1 -1
- package/out/shared/src/deep-clone.js.map +1 -1
- package/out/shared/src/document-visible.js +1 -1
- package/out/shared/src/document-visible.js.map +1 -1
- package/out/shared/src/expand.d.ts +0 -3
- package/out/shared/src/expand.d.ts.map +1 -1
- package/out/shared/src/immutable.d.ts +1 -1
- package/out/shared/src/immutable.d.ts.map +1 -1
- package/out/shared/src/iterables.d.ts +0 -1
- package/out/shared/src/iterables.d.ts.map +1 -1
- package/out/shared/src/iterables.js.map +1 -1
- package/out/shared/src/logging-test-utils.js +1 -1
- package/out/shared/src/logging-test-utils.js.map +1 -1
- package/out/shared/src/options-types.d.ts +1 -1
- package/out/shared/src/options-types.d.ts.map +1 -1
- package/out/shared/src/options.d.ts +2 -3
- package/out/shared/src/options.d.ts.map +1 -1
- package/out/shared/src/options.js +1 -1
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/promise-race.js +1 -1
- package/out/shared/src/promise-race.js.map +1 -1
- package/out/shared/src/queue.js +1 -1
- package/out/shared/src/queue.js.map +1 -1
- package/out/shared/src/resolved-promises.d.ts +0 -4
- package/out/shared/src/resolved-promises.d.ts.map +1 -1
- package/out/shared/src/resolved-promises.js +0 -1
- package/out/shared/src/resolved-promises.js.map +1 -1
- package/out/shared/src/resolver.d.ts +9 -0
- package/out/shared/src/resolver.d.ts.map +1 -0
- package/out/shared/src/resolver.js +6 -0
- package/out/shared/src/resolver.js.map +1 -0
- package/out/shared/src/sleep.js +1 -1
- package/out/shared/src/sleep.js.map +1 -1
- package/out/shared/src/tdigest.d.ts +0 -1
- package/out/shared/src/tdigest.d.ts.map +1 -1
- package/out/shared/src/tdigest.js.map +1 -1
- package/out/z2s/src/sql.d.ts +1 -5
- package/out/z2s/src/sql.d.ts.map +1 -1
- package/out/z2s/src/sql.js.map +1 -1
- package/out/zero/package.js +2 -3
- package/out/zero/package.js.map +1 -1
- package/out/zero/src/zero-cache-dev.js +1 -1
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +14 -11
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +23 -0
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.js +1 -1
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/pg-copy-binary.js +1 -1
- package/out/zero-cache/src/db/pg-copy-binary.js.map +1 -1
- package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
- package/out/zero-cache/src/db/specs.d.ts +3 -4
- package/out/zero-cache/src/db/specs.d.ts.map +1 -1
- package/out/zero-cache/src/db/specs.js +5 -7
- package/out/zero-cache/src/db/specs.js.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +2 -2
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
- package/out/zero-cache/src/observability/events.js +1 -1
- package/out/zero-cache/src/observability/events.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +1 -1
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.js +1 -1
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +1 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.d.ts +0 -2
- package/out/zero-cache/src/services/change-source/pg/lsn.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +0 -12
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +5 -3
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.js +1 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +2 -2
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.js +2 -2
- package/out/zero-cache/src/services/change-streamer/restore-admission.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js +2 -3
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +2 -2
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.js +1 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +1 -1
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +1 -1
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +2 -2
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/plannerz.d.ts +4 -12
- package/out/zero-cache/src/services/plannerz.d.ts.map +1 -1
- package/out/zero-cache/src/services/plannerz.js +1 -3
- package/out/zero-cache/src/services/plannerz.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-db.js +1 -1
- package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js +1 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -1
- package/out/zero-cache/src/services/replicator/drain-handler.js +1 -1
- package/out/zero-cache/src/services/replicator/drain-handler.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts +2 -11
- package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.js +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +0 -10
- 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.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.d.ts +0 -7
- package/out/zero-cache/src/services/replicator/schema/column-metadata.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
- package/out/zero-cache/src/services/running-state.js +1 -1
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +3 -17
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +10 -10
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/lite.d.ts +0 -1
- package/out/zero-cache/src/types/lite.d.ts.map +1 -1
- package/out/zero-cache/src/types/lite.js +2 -2
- package/out/zero-cache/src/types/lite.js.map +1 -1
- package/out/zero-cache/src/types/pg-types.d.ts +0 -40
- package/out/zero-cache/src/types/pg-types.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg-types.js.map +1 -1
- package/out/zero-cache/src/types/poke-chunk.js +1 -1
- package/out/zero-cache/src/types/poke-chunk.js.map +1 -1
- package/out/zero-cache/src/types/row-key.d.ts +0 -5
- package/out/zero-cache/src/types/row-key.d.ts.map +1 -1
- package/out/zero-cache/src/types/row-key.js.map +1 -1
- package/out/zero-cache/src/types/streams.js +1 -1
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/subscription.js +1 -1
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/types/websocket-handoff.d.ts +0 -6
- package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
- package/out/zero-cache/src/types/websocket-handoff.js +8 -2
- package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
- package/out/zero-cache/src/types/ws.d.ts +2 -1
- package/out/zero-cache/src/types/ws.d.ts.map +1 -1
- package/out/zero-cache/src/types/ws.js +1 -1
- package/out/zero-cache/src/types/ws.js.map +1 -1
- package/out/zero-cache/src/workers/connection.js +4 -1
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/mutator.js +1 -1
- package/out/zero-cache/src/workers/mutator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +36 -2
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.js +1 -1
- package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/connection-manager.js +1 -1
- package/out/zero-client/src/client/connection-manager.js.map +1 -1
- package/out/zero-client/src/client/crud.d.ts +2 -8
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.js +1 -1
- package/out/zero-client/src/client/crud.js.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +0 -2
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.js +1 -1
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/enable-analytics.d.ts +0 -1
- package/out/zero-client/src/client/enable-analytics.d.ts.map +1 -1
- package/out/zero-client/src/client/enable-analytics.js +2 -1
- package/out/zero-client/src/client/enable-analytics.js.map +1 -1
- package/out/zero-client/src/client/error.d.ts +4 -5
- package/out/zero-client/src/client/error.d.ts.map +1 -1
- package/out/zero-client/src/client/error.js.map +1 -1
- package/out/zero-client/src/client/keys.d.ts +0 -1
- package/out/zero-client/src/client/keys.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.js +4 -2
- package/out/zero-client/src/client/keys.js.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.js +1 -1
- package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
- package/out/zero-client/src/client/options.d.ts +0 -4
- package/out/zero-client/src/client/options.d.ts.map +1 -1
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/replicache-types.d.ts +3 -2
- package/out/zero-client/src/client/replicache-types.d.ts.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -2
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +1 -5
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +1 -1
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/types/client-state.d.ts +0 -6
- package/out/zero-client/src/types/client-state.d.ts.map +1 -1
- package/out/zero-permissions/src/permissions.d.ts +1 -12
- package/out/zero-permissions/src/permissions.d.ts.map +1 -1
- package/out/zero-permissions/src/permissions.js +1 -2
- package/out/zero-permissions/src/permissions.js.map +1 -1
- package/out/zero-protocol/src/ast.d.ts +0 -4
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +1 -2
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.d.ts +0 -20
- package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
- package/out/zero-protocol/src/client-schema.d.ts +2 -5
- package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
- package/out/zero-protocol/src/client-schema.js +1 -1
- package/out/zero-protocol/src/client-schema.js.map +1 -1
- package/out/zero-protocol/src/close-connection.d.ts +0 -8
- package/out/zero-protocol/src/close-connection.d.ts.map +1 -1
- package/out/zero-protocol/src/close-connection.js +1 -1
- package/out/zero-protocol/src/close-connection.js.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +0 -12
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +1 -1
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/custom-queries.d.ts +3 -17
- package/out/zero-protocol/src/custom-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/custom-queries.js +1 -1
- package/out/zero-protocol/src/custom-queries.js.map +1 -1
- package/out/zero-protocol/src/data.d.ts +0 -1
- package/out/zero-protocol/src/data.d.ts.map +1 -1
- package/out/zero-protocol/src/data.js +1 -1
- package/out/zero-protocol/src/data.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +27 -27
- package/out/zero-protocol/src/inspect-down.d.ts +82 -84
- package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.js +1 -1
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/inspect-up.d.ts +0 -28
- package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-up.js +1 -1
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/mutate-server.d.ts +0 -21
- package/out/zero-protocol/src/mutate-server.d.ts.map +1 -1
- package/out/zero-protocol/src/mutate-server.js +1 -1
- package/out/zero-protocol/src/mutate-server.js.map +1 -1
- package/out/zero-protocol/src/mutation-type-enum.d.ts +0 -1
- package/out/zero-protocol/src/mutation-type-enum.d.ts.map +1 -1
- package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
- package/out/zero-protocol/src/mutation.d.ts +2 -4
- package/out/zero-protocol/src/mutation.d.ts.map +1 -1
- package/out/zero-protocol/src/mutation.js +1 -1
- package/out/zero-protocol/src/mutation.js.map +1 -1
- package/out/zero-protocol/src/mutations-patch.d.ts +0 -33
- package/out/zero-protocol/src/mutations-patch.d.ts.map +1 -1
- package/out/zero-protocol/src/mutations-patch.js +1 -1
- package/out/zero-protocol/src/mutations-patch.js.map +1 -1
- package/out/zero-protocol/src/ping.d.ts +0 -2
- package/out/zero-protocol/src/ping.d.ts.map +1 -1
- package/out/zero-protocol/src/ping.js +1 -1
- package/out/zero-protocol/src/ping.js.map +1 -1
- package/out/zero-protocol/src/poke.d.ts +3 -2
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.js +1 -1
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/pong.d.ts +0 -2
- package/out/zero-protocol/src/pong.d.ts.map +1 -1
- package/out/zero-protocol/src/pong.js +1 -1
- package/out/zero-protocol/src/pong.js.map +1 -1
- package/out/zero-protocol/src/pull.d.ts +2 -7
- package/out/zero-protocol/src/pull.d.ts.map +1 -1
- package/out/zero-protocol/src/pull.js +1 -1
- package/out/zero-protocol/src/pull.js.map +1 -1
- package/out/zero-protocol/src/push.d.ts +1 -3
- package/out/zero-protocol/src/push.d.ts.map +1 -1
- package/out/zero-protocol/src/push.js +1 -1
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.d.ts +0 -16
- package/out/zero-protocol/src/queries-patch.d.ts.map +1 -1
- package/out/zero-protocol/src/queries-patch.js +1 -1
- package/out/zero-protocol/src/queries-patch.js.map +1 -1
- package/out/zero-protocol/src/query-server.d.ts +2 -41
- package/out/zero-protocol/src/query-server.d.ts.map +1 -1
- package/out/zero-protocol/src/query-server.js +1 -1
- package/out/zero-protocol/src/query-server.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +42 -42
- package/out/zero-protocol/src/version.d.ts +0 -1
- package/out/zero-protocol/src/version.d.ts.map +1 -1
- package/out/zero-protocol/src/version.js.map +1 -1
- package/out/zero-react/src/use-query.js +1 -1
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-schema/src/builder/relationship-builder.d.ts +0 -2
- package/out/zero-schema/src/builder/relationship-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +1 -1
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-schema/src/schema-config.d.ts +0 -1
- package/out/zero-schema/src/schema-config.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.js +1 -1
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-schema/src/table-schema.d.ts +3 -11
- package/out/zero-schema/src/table-schema.d.ts.map +1 -1
- package/out/zero-server/src/queries/process-queries.d.ts +2 -4
- package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
- package/out/zero-server/src/queries/process-queries.js.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +0 -2
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.js +1 -1
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-types/src/name-mapper.d.ts +2 -1
- package/out/zero-types/src/name-mapper.d.ts.map +1 -1
- package/out/zero-types/src/name-mapper.js.map +1 -1
- package/out/zero-types/src/schema-value.d.ts +3 -2
- package/out/zero-types/src/schema-value.d.ts.map +1 -1
- package/out/zero-types/src/schema.d.ts +1 -1
- package/out/zero-types/src/schema.d.ts.map +1 -1
- package/out/zql/src/builder/builder.d.ts +1 -11
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +1 -1
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/filter.d.ts +0 -1
- package/out/zql/src/builder/filter.d.ts.map +1 -1
- package/out/zql/src/builder/filter.js.map +1 -1
- package/out/zql/src/error.d.ts +0 -5
- package/out/zql/src/error.d.ts.map +1 -1
- package/out/zql/src/error.js.map +1 -1
- package/out/zql/src/ivm/constraint.d.ts +0 -7
- package/out/zql/src/ivm/constraint.d.ts.map +1 -1
- package/out/zql/src/ivm/constraint.js +1 -1
- package/out/zql/src/ivm/constraint.js.map +1 -1
- package/out/zql/src/ivm/data.d.ts +0 -1
- package/out/zql/src/ivm/data.d.ts.map +1 -1
- package/out/zql/src/ivm/data.js.map +1 -1
- package/out/zql/src/ivm/memory-source.d.ts +1 -2
- package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-source.js +1 -1
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/stream.d.ts +0 -1
- package/out/zql/src/ivm/stream.d.ts.map +1 -1
- package/out/zql/src/ivm/stream.js.map +1 -1
- package/out/zql/src/ivm/union-fan-in.d.ts +0 -1
- package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-in.js +1 -1
- package/out/zql/src/ivm/union-fan-in.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts +5 -35
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +1 -1
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/mutate/crud.d.ts +1 -3
- package/out/zql/src/mutate/crud.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.js +1 -1
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/mutate/mutator.d.ts +1 -1
- package/out/zql/src/mutate/mutator.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator.js.map +1 -1
- package/out/zql/src/planner/planner-debug.d.ts +10 -9
- package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/planner/planner-node.d.ts +0 -1
- package/out/zql/src/planner/planner-node.d.ts.map +1 -1
- package/out/zql/src/planner/planner-node.js.map +1 -1
- package/out/zql/src/planner/planner-warnings.d.ts +3 -3
- package/out/zql/src/planner/planner-warnings.d.ts.map +1 -1
- package/out/zql/src/planner/planner-warnings.js.map +1 -1
- package/out/zql/src/query/expression.d.ts +0 -22
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/expression.js +1 -1
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts +0 -7
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +2 -2
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-delegate.d.ts +1 -4
- package/out/zql/src/query/query-delegate.d.ts.map +1 -1
- package/out/zql/src/query/query-internals.d.ts +0 -3
- package/out/zql/src/query/query-internals.d.ts.map +1 -1
- package/out/zql/src/query/query-internals.js.map +1 -1
- package/out/zql/src/query/query-registry.d.ts +5 -5
- package/out/zql/src/query/query-registry.d.ts.map +1 -1
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/query.d.ts +2 -13
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.d.ts +1 -19
- package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.js +1 -1
- package/out/zql/src/query/runnable-query-impl.js.map +1 -1
- package/out/zql/src/query/ttl.d.ts +2 -3
- package/out/zql/src/query/ttl.d.ts.map +1 -1
- package/out/zql/src/query/ttl.js.map +1 -1
- package/out/zqlite/src/query-builder.d.ts +0 -2
- package/out/zqlite/src/query-builder.d.ts.map +1 -1
- package/out/zqlite/src/query-builder.js +1 -1
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +0 -1
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +1 -1
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +2 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","names":["patch.apply"],"sources":["../../../../../replicache/src/sync/pull.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {deepEqual} from '../../../shared/src/json.ts';\nimport {diff} from '../btree/diff.ts';\nimport {BTreeRead} from '../btree/read.ts';\nimport {compareCookies, type Cookie} from '../cookies.ts';\nimport type {Store} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n assertSnapshotMetaDD31,\n baseSnapshotFromHash,\n commitFromHash,\n commitIsLocalDD31,\n DEFAULT_HEAD_NAME,\n type LocalMeta,\n localMutations,\n snapshotMetaParts,\n} from '../db/commit.ts';\nimport {newWriteSnapshotDD31} from '../db/write.ts';\nimport {isErrorResponse} from '../error-responses.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport {deepFreeze, type FrozenJSONValue} from '../frozen-json.ts';\nimport {assertPullerResultV1} from '../get-default-puller.ts';\nimport {emptyHash, type Hash} from '../hash.ts';\nimport type {HTTPRequestInfo} from '../http-request-info.ts';\nimport type {\n Puller,\n PullerResult,\n PullResponseOKV1Internal,\n PullResponseV1,\n} from '../puller.ts';\nimport {ReportError} from '../report-error.ts';\nimport {toError} from '../to-error.ts';\nimport {withRead, withWriteNoImplicitCommit} from '../with-transactions.ts';\nimport {\n addDiffsForIndexes,\n type DiffComputationConfig,\n DiffsMap,\n} from './diff.ts';\nimport * as HandlePullResponseResultType from './handle-pull-response-result-type-enum.ts';\nimport type {ClientGroupID, ClientID} from './ids.ts';\nimport * as patch from './patch.ts';\nimport {PullError} from './pull-error.ts';\nimport {SYNC_HEAD_NAME} from './sync-head-name.ts';\n\ntype FormatVersion = (typeof FormatVersion)[keyof typeof FormatVersion];\n\nexport const PULL_VERSION_SDD = 0;\nexport const PULL_VERSION_DD31 = 1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequest = PullRequestV1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequestV1 = {\n pullVersion: 1;\n // schemaVersion can optionally be used by the customer's app\n // to indicate to the data layer what format of Client View the\n // app understands.\n schemaVersion: string;\n profileID: string;\n cookie: Cookie;\n\n clientGroupID: ClientGroupID;\n};\n\nexport function isPullRequestV1(pr: PullRequest): pr is PullRequestV1 {\n return pr.pullVersion === PULL_VERSION_DD31;\n}\n\nexport type BeginPullResponseV1 = {\n httpRequestInfo: HTTPRequestInfo;\n pullResponse?: PullResponseV1;\n syncHead: Hash;\n};\n\nexport async function beginPullV1(\n profileID: string,\n clientID: ClientID,\n clientGroupID: ClientGroupID,\n schemaVersion: string,\n puller: Puller,\n requestID: string,\n store: Store,\n formatVersion: FormatVersion,\n lc: LogContext,\n createSyncBranch = true,\n): Promise<BeginPullResponseV1> {\n const baseCookie = await withRead(store, async dagRead => {\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (!mainHeadHash) {\n throw new Error('Internal no main head found');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n return baseSnapshotMeta.cookieJSON;\n });\n\n const pullReq: PullRequestV1 = {\n profileID,\n clientGroupID,\n cookie: baseCookie,\n pullVersion: PULL_VERSION_DD31,\n schemaVersion,\n };\n\n const {response, httpRequestInfo} = await callPuller(\n lc,\n puller,\n pullReq,\n requestID,\n );\n\n // If Puller did not get a pull response we still want to return the HTTP\n // request info.\n if (!response) {\n return {\n httpRequestInfo,\n syncHead: emptyHash,\n };\n }\n\n if (!createSyncBranch || isErrorResponse(response)) {\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead: emptyHash,\n };\n }\n\n const result = await handlePullResponseV1(\n lc,\n store,\n baseCookie,\n response,\n clientID,\n formatVersion,\n );\n\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead:\n result.type === HandlePullResponseResultType.Applied\n ? result.syncHead\n : emptyHash,\n };\n}\n\nasync function callPuller(\n lc: LogContext,\n puller: Puller,\n pullReq: PullRequest,\n requestID: string,\n): Promise<PullerResult> {\n lc.debug?.('Starting pull...');\n const pullStart = Date.now();\n let pullerResult: PullerResult;\n try {\n pullerResult = await puller(pullReq, requestID);\n lc.debug?.(\n `...Pull ${pullerResult.response ? 'complete' : 'failed'} in `,\n Date.now() - pullStart,\n 'ms',\n );\n } catch (e) {\n throw new PullError(toError(e));\n }\n try {\n assertPullerResultV1(pullerResult);\n return pullerResult;\n } catch (e) {\n throw new ReportError('Invalid puller result', toError(e));\n }\n}\n\ntype HandlePullResponseResult =\n | {\n type: HandlePullResponseResultType.Applied;\n syncHead: Hash;\n }\n | {\n type:\n | HandlePullResponseResultType.NoOp\n | HandlePullResponseResultType.CookieMismatch;\n };\n\nfunction badOrderMessage(\n name: string,\n receivedValue: string,\n lastSnapshotValue: string,\n) {\n return `Received ${name} ${receivedValue} is < than last snapshot ${name} ${lastSnapshotValue}; ignoring client view`;\n}\n\nexport function handlePullResponseV1(\n lc: LogContext,\n store: Store,\n expectedBaseCookie: FrozenJSONValue,\n response: PullResponseOKV1Internal,\n clientID: ClientID,\n formatVersion: FormatVersion,\n): Promise<HandlePullResponseResult> {\n // It is possible that another sync completed while we were pulling. Ensure\n // that is not the case by re-checking the base snapshot.\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n const mainHead = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHead === undefined) {\n throw new Error('Main head disappeared');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHead, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n const baseCookie = baseSnapshotMeta.cookieJSON;\n\n // TODO(MP) Here we are using whether the cookie has changed as a proxy for whether\n // the base snapshot changed, which is the check we used to do. I don't think this\n // is quite right. We need to firm up under what conditions we will/not accept an\n // update from the server: https://github.com/rocicorp/replicache/issues/713.\n // In DD31 this is expected to happen if a refresh occurs during a pull.\n if (!deepEqual(expectedBaseCookie, baseCookie)) {\n lc.debug?.(\n 'handlePullResponse: cookie mismatch, response is not applicable',\n );\n return {\n type: HandlePullResponseResultType.CookieMismatch,\n };\n }\n\n // Check that the lastMutationIDs are not going backwards.\n for (const [clientID, lmidChange] of Object.entries(\n response.lastMutationIDChanges,\n )) {\n const lastMutationID = baseSnapshotMeta.lastMutationIDs[clientID];\n if (lastMutationID !== undefined && lmidChange < lastMutationID) {\n throw new Error(\n badOrderMessage(\n `${clientID} lastMutationID`,\n String(lmidChange),\n String(lastMutationID),\n ),\n );\n }\n }\n\n const frozenResponseCookie = deepFreeze(response.cookie);\n if (compareCookies(frozenResponseCookie, baseCookie) < 0) {\n throw new Error(\n badOrderMessage(\n 'cookie',\n JSON.stringify(frozenResponseCookie),\n JSON.stringify(baseCookie),\n ),\n );\n }\n\n if (deepEqual(frozenResponseCookie, baseCookie)) {\n if (response.patch.length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but patch is not empty`,\n );\n }\n if (Object.keys(response.lastMutationIDChanges).length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but lastMutationIDChanges is not empty`,\n );\n }\n // If the cookie doesn't change, it's a nop.\n return {\n type: HandlePullResponseResultType.NoOp,\n };\n }\n\n const dbWrite = await newWriteSnapshotDD31(\n baseSnapshot.chunk.hash,\n {...baseSnapshotMeta.lastMutationIDs, ...response.lastMutationIDChanges},\n frozenResponseCookie,\n dagWrite,\n clientID,\n formatVersion,\n );\n\n await patch.apply(lc, dbWrite, response.patch);\n\n return {\n type: HandlePullResponseResultType.Applied,\n syncHead: await dbWrite.commit(SYNC_HEAD_NAME),\n };\n });\n}\n\nexport function maybeEndPull<M extends LocalMeta>(\n store: Store,\n lc: LogContext,\n expectedSyncHead: Hash,\n clientID: ClientID,\n diffConfig: DiffComputationConfig,\n formatVersion: FormatVersion,\n): Promise<{\n syncHead: Hash;\n mainHead: Hash;\n oldMainHead: Hash;\n replayMutations: Commit<M>[];\n diffs: DiffsMap;\n}> {\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n // Ensure sync head is what the caller thinks it is.\n const syncHeadHash = await dagRead.getHead(SYNC_HEAD_NAME);\n if (syncHeadHash === undefined) {\n throw new Error('Missing sync head');\n }\n if (syncHeadHash !== expectedSyncHead) {\n lc.error?.(\n 'maybeEndPull, Wrong sync head. Expecting:',\n expectedSyncHead,\n 'got:',\n syncHeadHash,\n );\n throw new Error('Wrong sync head');\n }\n\n // Ensure another sync has not landed a new snapshot on the main chain.\n // TODO: In DD31, it is expected that a newer snapshot might have appeared\n // on the main chain. In that case, we just abort this pull.\n const syncSnapshot = await baseSnapshotFromHash(syncHeadHash, dagRead);\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHeadHash === undefined) {\n throw new Error('Missing main head');\n }\n const mainSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n\n const {meta} = syncSnapshot;\n const syncSnapshotBasis = meta.basisHash;\n if (syncSnapshot === null) {\n throw new Error('Sync snapshot with no basis');\n }\n if (syncSnapshotBasis !== mainSnapshot.chunk.hash) {\n throw new Error('Overlapping syncs');\n }\n\n // Collect pending commits from the main chain and determine which\n // of them if any need to be replayed.\n const [syncHead, commits] = await Promise.all([\n commitFromHash(syncHeadHash, dagRead),\n localMutations(mainHeadHash, dagRead),\n ]);\n const syncHeadMutationIDs = new Map<ClientID, Promise<number>>();\n const pending: Commit<M>[] = [];\n // Kick off all mutation ID loads before awaiting.\n for (const commit of commits) {\n assert(\n commitIsLocalDD31(commit),\n 'Expected commit to be a local DD31 commit',\n );\n const cid = commit.meta.clientID;\n if (!syncHeadMutationIDs.has(cid)) {\n syncHeadMutationIDs.set(cid, syncHead.getMutationID(cid, dagRead));\n }\n }\n for (const commit of commits) {\n const cid = commit.meta.clientID;\n if (commit.meta.mutationID > (await syncHeadMutationIDs.get(cid)!)) {\n // We know that the dag can only contain either LocalMetaSDD or LocalMetaDD31\n pending.push(commit as Commit<M>);\n }\n }\n // pending() gave us the pending mutations in sync-head-first order whereas\n // caller wants them in the order to replay (lower mutation ids first).\n pending.reverse();\n\n // We return the keys that changed due to this pull. This is used by\n // subscriptions in the JS API when there are no more pending mutations.\n const diffsMap = new DiffsMap();\n\n // Return replay commits if any.\n if (pending.length > 0) {\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: mainHeadHash,\n replayMutations: pending,\n // The changed keys are not reported when further replays are\n // needed. The diffs will be reported at the end when there\n // are no more mutations to be replay and then it will be reported\n // relative to DEFAULT_HEAD_NAME.\n diffs: diffsMap,\n };\n }\n\n // TODO check invariants\n\n // Compute diffs (changed keys) for value map and index maps.\n const mainHead = await commitFromHash(mainHeadHash, dagRead);\n if (diffConfig.shouldComputeDiffs()) {\n const mainHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n mainHead.valueHash,\n );\n const syncHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n syncHead.valueHash,\n );\n const valueDiff = await diff(mainHeadMap, syncHeadMap);\n diffsMap.set('', valueDiff);\n await addDiffsForIndexes(\n mainHead,\n syncHead,\n dagRead,\n diffsMap,\n diffConfig,\n formatVersion,\n );\n }\n\n // No mutations to replay so set the main head to the sync head and sync complete!\n await Promise.all([\n dagWrite.setHead(DEFAULT_HEAD_NAME, syncHeadHash),\n dagWrite.removeHead(SYNC_HEAD_NAME),\n ]);\n await dagWrite.commit();\n // main head was set to sync head\n const newMainHeadHash = syncHeadHash;\n\n if (lc.debug) {\n const [oldLastMutationID, oldCookie] = snapshotMetaParts(\n mainSnapshot,\n clientID,\n );\n const [newLastMutationID, newCookie] = snapshotMetaParts(\n syncSnapshot,\n clientID,\n );\n lc.debug(\n `Successfully pulled new snapshot with lastMutationID:`,\n newLastMutationID,\n `(prev:`,\n oldLastMutationID,\n `), cookie: `,\n newCookie,\n `(prev:`,\n oldCookie,\n `), sync head hash:`,\n syncHeadHash,\n ', main head hash:',\n mainHeadHash,\n `, valueHash:`,\n syncHead.valueHash,\n `(prev:`,\n mainSnapshot.valueHash,\n );\n }\n\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: newMainHeadHash,\n replayMutations: [],\n diffs: diffsMap,\n };\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pull.js","names":["patch.apply"],"sources":["../../../../../replicache/src/sync/pull.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {deepEqual} from '../../../shared/src/json.ts';\nimport {diff} from '../btree/diff.ts';\nimport {BTreeRead} from '../btree/read.ts';\nimport {compareCookies, type Cookie} from '../cookies.ts';\nimport type {Store} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n assertSnapshotMetaDD31,\n baseSnapshotFromHash,\n commitFromHash,\n commitIsLocalDD31,\n DEFAULT_HEAD_NAME,\n type LocalMeta,\n localMutations,\n snapshotMetaParts,\n} from '../db/commit.ts';\nimport {newWriteSnapshotDD31} from '../db/write.ts';\nimport {isErrorResponse} from '../error-responses.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport {deepFreeze, type FrozenJSONValue} from '../frozen-json.ts';\nimport {assertPullerResultV1} from '../get-default-puller.ts';\nimport {emptyHash, type Hash} from '../hash.ts';\nimport type {HTTPRequestInfo} from '../http-request-info.ts';\nimport type {\n Puller,\n PullerResult,\n PullResponseOKV1Internal,\n PullResponseV1,\n} from '../puller.ts';\nimport {ReportError} from '../report-error.ts';\nimport {toError} from '../to-error.ts';\nimport {withRead, withWriteNoImplicitCommit} from '../with-transactions.ts';\nimport {\n addDiffsForIndexes,\n type DiffComputationConfig,\n DiffsMap,\n} from './diff.ts';\nimport * as HandlePullResponseResultType from './handle-pull-response-result-type-enum.ts';\nimport type {ClientGroupID, ClientID} from './ids.ts';\nimport * as patch from './patch.ts';\nimport {PullError} from './pull-error.ts';\nimport {SYNC_HEAD_NAME} from './sync-head-name.ts';\n\ntype FormatVersion = (typeof FormatVersion)[keyof typeof FormatVersion];\n\nexport const PULL_VERSION_DD31 = 1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequest = PullRequestV1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequestV1 = {\n pullVersion: 1;\n // schemaVersion can optionally be used by the customer's app\n // to indicate to the data layer what format of Client View the\n // app understands.\n schemaVersion: string;\n profileID: string;\n cookie: Cookie;\n\n clientGroupID: ClientGroupID;\n};\n\nexport function isPullRequestV1(pr: PullRequest): pr is PullRequestV1 {\n return pr.pullVersion === PULL_VERSION_DD31;\n}\n\nexport type BeginPullResponseV1 = {\n httpRequestInfo: HTTPRequestInfo;\n pullResponse?: PullResponseV1;\n syncHead: Hash;\n};\n\nexport async function beginPullV1(\n profileID: string,\n clientID: ClientID,\n clientGroupID: ClientGroupID,\n schemaVersion: string,\n puller: Puller,\n requestID: string,\n store: Store,\n formatVersion: FormatVersion,\n lc: LogContext,\n createSyncBranch = true,\n): Promise<BeginPullResponseV1> {\n const baseCookie = await withRead(store, async dagRead => {\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (!mainHeadHash) {\n throw new Error('Internal no main head found');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n return baseSnapshotMeta.cookieJSON;\n });\n\n const pullReq: PullRequestV1 = {\n profileID,\n clientGroupID,\n cookie: baseCookie,\n pullVersion: PULL_VERSION_DD31,\n schemaVersion,\n };\n\n const {response, httpRequestInfo} = await callPuller(\n lc,\n puller,\n pullReq,\n requestID,\n );\n\n // If Puller did not get a pull response we still want to return the HTTP\n // request info.\n if (!response) {\n return {\n httpRequestInfo,\n syncHead: emptyHash,\n };\n }\n\n if (!createSyncBranch || isErrorResponse(response)) {\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead: emptyHash,\n };\n }\n\n const result = await handlePullResponseV1(\n lc,\n store,\n baseCookie,\n response,\n clientID,\n formatVersion,\n );\n\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead:\n result.type === HandlePullResponseResultType.Applied\n ? result.syncHead\n : emptyHash,\n };\n}\n\nasync function callPuller(\n lc: LogContext,\n puller: Puller,\n pullReq: PullRequest,\n requestID: string,\n): Promise<PullerResult> {\n lc.debug?.('Starting pull...');\n const pullStart = Date.now();\n let pullerResult: PullerResult;\n try {\n pullerResult = await puller(pullReq, requestID);\n lc.debug?.(\n `...Pull ${pullerResult.response ? 'complete' : 'failed'} in `,\n Date.now() - pullStart,\n 'ms',\n );\n } catch (e) {\n throw new PullError(toError(e));\n }\n try {\n assertPullerResultV1(pullerResult);\n return pullerResult;\n } catch (e) {\n throw new ReportError('Invalid puller result', toError(e));\n }\n}\n\ntype HandlePullResponseResult =\n | {\n type: HandlePullResponseResultType.Applied;\n syncHead: Hash;\n }\n | {\n type:\n | HandlePullResponseResultType.NoOp\n | HandlePullResponseResultType.CookieMismatch;\n };\n\nfunction badOrderMessage(\n name: string,\n receivedValue: string,\n lastSnapshotValue: string,\n) {\n return `Received ${name} ${receivedValue} is < than last snapshot ${name} ${lastSnapshotValue}; ignoring client view`;\n}\n\nexport function handlePullResponseV1(\n lc: LogContext,\n store: Store,\n expectedBaseCookie: FrozenJSONValue,\n response: PullResponseOKV1Internal,\n clientID: ClientID,\n formatVersion: FormatVersion,\n): Promise<HandlePullResponseResult> {\n // It is possible that another sync completed while we were pulling. Ensure\n // that is not the case by re-checking the base snapshot.\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n const mainHead = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHead === undefined) {\n throw new Error('Main head disappeared');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHead, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n const baseCookie = baseSnapshotMeta.cookieJSON;\n\n // TODO(MP) Here we are using whether the cookie has changed as a proxy for whether\n // the base snapshot changed, which is the check we used to do. I don't think this\n // is quite right. We need to firm up under what conditions we will/not accept an\n // update from the server: https://github.com/rocicorp/replicache/issues/713.\n // In DD31 this is expected to happen if a refresh occurs during a pull.\n if (!deepEqual(expectedBaseCookie, baseCookie)) {\n lc.debug?.(\n 'handlePullResponse: cookie mismatch, response is not applicable',\n );\n return {\n type: HandlePullResponseResultType.CookieMismatch,\n };\n }\n\n // Check that the lastMutationIDs are not going backwards.\n for (const [clientID, lmidChange] of Object.entries(\n response.lastMutationIDChanges,\n )) {\n const lastMutationID = baseSnapshotMeta.lastMutationIDs[clientID];\n if (lastMutationID !== undefined && lmidChange < lastMutationID) {\n throw new Error(\n badOrderMessage(\n `${clientID} lastMutationID`,\n String(lmidChange),\n String(lastMutationID),\n ),\n );\n }\n }\n\n const frozenResponseCookie = deepFreeze(response.cookie);\n if (compareCookies(frozenResponseCookie, baseCookie) < 0) {\n throw new Error(\n badOrderMessage(\n 'cookie',\n JSON.stringify(frozenResponseCookie),\n JSON.stringify(baseCookie),\n ),\n );\n }\n\n if (deepEqual(frozenResponseCookie, baseCookie)) {\n if (response.patch.length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but patch is not empty`,\n );\n }\n if (Object.keys(response.lastMutationIDChanges).length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but lastMutationIDChanges is not empty`,\n );\n }\n // If the cookie doesn't change, it's a nop.\n return {\n type: HandlePullResponseResultType.NoOp,\n };\n }\n\n const dbWrite = await newWriteSnapshotDD31(\n baseSnapshot.chunk.hash,\n {...baseSnapshotMeta.lastMutationIDs, ...response.lastMutationIDChanges},\n frozenResponseCookie,\n dagWrite,\n clientID,\n formatVersion,\n );\n\n await patch.apply(lc, dbWrite, response.patch);\n\n return {\n type: HandlePullResponseResultType.Applied,\n syncHead: await dbWrite.commit(SYNC_HEAD_NAME),\n };\n });\n}\n\nexport function maybeEndPull<M extends LocalMeta>(\n store: Store,\n lc: LogContext,\n expectedSyncHead: Hash,\n clientID: ClientID,\n diffConfig: DiffComputationConfig,\n formatVersion: FormatVersion,\n): Promise<{\n syncHead: Hash;\n mainHead: Hash;\n oldMainHead: Hash;\n replayMutations: Commit<M>[];\n diffs: DiffsMap;\n}> {\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n // Ensure sync head is what the caller thinks it is.\n const syncHeadHash = await dagRead.getHead(SYNC_HEAD_NAME);\n if (syncHeadHash === undefined) {\n throw new Error('Missing sync head');\n }\n if (syncHeadHash !== expectedSyncHead) {\n lc.error?.(\n 'maybeEndPull, Wrong sync head. Expecting:',\n expectedSyncHead,\n 'got:',\n syncHeadHash,\n );\n throw new Error('Wrong sync head');\n }\n\n // Ensure another sync has not landed a new snapshot on the main chain.\n // TODO: In DD31, it is expected that a newer snapshot might have appeared\n // on the main chain. In that case, we just abort this pull.\n const syncSnapshot = await baseSnapshotFromHash(syncHeadHash, dagRead);\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHeadHash === undefined) {\n throw new Error('Missing main head');\n }\n const mainSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n\n const {meta} = syncSnapshot;\n const syncSnapshotBasis = meta.basisHash;\n if (syncSnapshot === null) {\n throw new Error('Sync snapshot with no basis');\n }\n if (syncSnapshotBasis !== mainSnapshot.chunk.hash) {\n throw new Error('Overlapping syncs');\n }\n\n // Collect pending commits from the main chain and determine which\n // of them if any need to be replayed.\n const [syncHead, commits] = await Promise.all([\n commitFromHash(syncHeadHash, dagRead),\n localMutations(mainHeadHash, dagRead),\n ]);\n const syncHeadMutationIDs = new Map<ClientID, Promise<number>>();\n const pending: Commit<M>[] = [];\n // Kick off all mutation ID loads before awaiting.\n for (const commit of commits) {\n assert(\n commitIsLocalDD31(commit),\n 'Expected commit to be a local DD31 commit',\n );\n const cid = commit.meta.clientID;\n if (!syncHeadMutationIDs.has(cid)) {\n syncHeadMutationIDs.set(cid, syncHead.getMutationID(cid, dagRead));\n }\n }\n for (const commit of commits) {\n const cid = commit.meta.clientID;\n if (commit.meta.mutationID > (await syncHeadMutationIDs.get(cid)!)) {\n // We know that the dag can only contain either LocalMetaSDD or LocalMetaDD31\n pending.push(commit as Commit<M>);\n }\n }\n // pending() gave us the pending mutations in sync-head-first order whereas\n // caller wants them in the order to replay (lower mutation ids first).\n pending.reverse();\n\n // We return the keys that changed due to this pull. This is used by\n // subscriptions in the JS API when there are no more pending mutations.\n const diffsMap = new DiffsMap();\n\n // Return replay commits if any.\n if (pending.length > 0) {\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: mainHeadHash,\n replayMutations: pending,\n // The changed keys are not reported when further replays are\n // needed. The diffs will be reported at the end when there\n // are no more mutations to be replay and then it will be reported\n // relative to DEFAULT_HEAD_NAME.\n diffs: diffsMap,\n };\n }\n\n // TODO check invariants\n\n // Compute diffs (changed keys) for value map and index maps.\n const mainHead = await commitFromHash(mainHeadHash, dagRead);\n if (diffConfig.shouldComputeDiffs()) {\n const mainHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n mainHead.valueHash,\n );\n const syncHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n syncHead.valueHash,\n );\n const valueDiff = await diff(mainHeadMap, syncHeadMap);\n diffsMap.set('', valueDiff);\n await addDiffsForIndexes(\n mainHead,\n syncHead,\n dagRead,\n diffsMap,\n diffConfig,\n formatVersion,\n );\n }\n\n // No mutations to replay so set the main head to the sync head and sync complete!\n await Promise.all([\n dagWrite.setHead(DEFAULT_HEAD_NAME, syncHeadHash),\n dagWrite.removeHead(SYNC_HEAD_NAME),\n ]);\n await dagWrite.commit();\n // main head was set to sync head\n const newMainHeadHash = syncHeadHash;\n\n if (lc.debug) {\n const [oldLastMutationID, oldCookie] = snapshotMetaParts(\n mainSnapshot,\n clientID,\n );\n const [newLastMutationID, newCookie] = snapshotMetaParts(\n syncSnapshot,\n clientID,\n );\n lc.debug(\n `Successfully pulled new snapshot with lastMutationID:`,\n newLastMutationID,\n `(prev:`,\n oldLastMutationID,\n `), cookie: `,\n newCookie,\n `(prev:`,\n oldCookie,\n `), sync head hash:`,\n syncHeadHash,\n ', main head hash:',\n mainHeadHash,\n `, valueHash:`,\n syncHead.valueHash,\n `(prev:`,\n mainSnapshot.valueHash,\n );\n }\n\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: newMainHeadHash,\n replayMutations: [],\n diffs: diffsMap,\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export declare const PUSH_VERSION_DD31 = 1;
|
|
|
8
8
|
/**
|
|
9
9
|
* Mutation describes a single mutation done on the client.
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
type MutationV1 = {
|
|
12
12
|
readonly id: number;
|
|
13
13
|
readonly name: string;
|
|
14
14
|
readonly args: ReadonlyJSONValue;
|
|
@@ -35,4 +35,5 @@ export type PushRequestV1 = {
|
|
|
35
35
|
export type PushRequest = PushRequestV1;
|
|
36
36
|
export declare function assertPushRequestV1(value: unknown): asserts value is PushRequestV1;
|
|
37
37
|
export declare function push(requestID: string, store: Store, lc: LogContext, profileID: string, clientGroupID: ClientGroupID | undefined, _clientID: ClientID, pusher: Pusher, schemaVersion: string, pushVersion: typeof PUSH_VERSION_SDD | typeof PUSH_VERSION_DD31): Promise<PusherResult | undefined>;
|
|
38
|
+
export {};
|
|
38
39
|
//# sourceMappingURL=push.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../../replicache/src/sync/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAQ3C,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,YAAY,EAElB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EAGd,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../../replicache/src/sync/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAQ3C,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,YAAY,EAElB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EAGd,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;AAUlC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,CAAC,CAAC;IACf;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAElB,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB,CAAC;AAUF,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,aAAa,CAEhC;AAuBD,wBAAsB,IAAI,CACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,SAAS,EAAE,QAAQ,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,OAAO,gBAAgB,GAAG,OAAO,iBAAiB,GAC9D,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA+CnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","names":["valita.readonlyObject","valita"],"sources":["../../../../../replicache/src/sync/push.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {jsonSchema} from '../../../shared/src/json-schema.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport * as valita from '../../../shared/src/valita.ts';\nimport type {Store} from '../dag/store.ts';\nimport {\n DEFAULT_HEAD_NAME,\n type LocalMetaDD31,\n commitIsLocalDD31,\n localMutations,\n} from '../db/commit.ts';\nimport type {FrozenJSONValue} from '../frozen-json.ts';\nimport {\n PushError,\n type Pusher,\n type PusherResult,\n assertPusherResult,\n} from '../pusher.ts';\nimport {ReportError} from '../report-error.ts';\nimport {toError} from '../to-error.ts';\nimport {withRead} from '../with-transactions.ts';\nimport {\n type ClientGroupID,\n type ClientID,\n clientGroupIDSchema,\n clientIDSchema,\n} from './ids.ts';\n\nexport const PUSH_VERSION_SDD = 0;\nexport const PUSH_VERSION_DD31 = 1;\n\n/**\n * Mutation describes a single mutation done on the client.\n */\
|
|
1
|
+
{"version":3,"file":"push.js","names":["valita.readonlyObject","valita"],"sources":["../../../../../replicache/src/sync/push.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {jsonSchema} from '../../../shared/src/json-schema.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport * as valita from '../../../shared/src/valita.ts';\nimport type {Store} from '../dag/store.ts';\nimport {\n DEFAULT_HEAD_NAME,\n type LocalMetaDD31,\n commitIsLocalDD31,\n localMutations,\n} from '../db/commit.ts';\nimport type {FrozenJSONValue} from '../frozen-json.ts';\nimport {\n PushError,\n type Pusher,\n type PusherResult,\n assertPusherResult,\n} from '../pusher.ts';\nimport {ReportError} from '../report-error.ts';\nimport {toError} from '../to-error.ts';\nimport {withRead} from '../with-transactions.ts';\nimport {\n type ClientGroupID,\n type ClientID,\n clientGroupIDSchema,\n clientIDSchema,\n} from './ids.ts';\n\nexport const PUSH_VERSION_SDD = 0;\nexport const PUSH_VERSION_DD31 = 1;\n\n/**\n * Mutation describes a single mutation done on the client.\n */\ntype MutationV1 = {\n readonly id: number;\n readonly name: string;\n readonly args: ReadonlyJSONValue;\n readonly timestamp: number;\n readonly clientID: ClientID;\n};\n\nexport type Mutation = MutationV1;\n\nconst mutationV1Schema: valita.Type<MutationV1> = valita.readonlyObject({\n id: valita.number(),\n name: valita.string(),\n args: jsonSchema,\n timestamp: valita.number(),\n clientID: clientIDSchema,\n});\n\n/**\n * The JSON value used as the body when doing a POST to the [push\n * endpoint](/reference/server-push).\n */\nexport type PushRequestV1 = {\n pushVersion: 1;\n /**\n * `schemaVersion` can optionally be used to specify to the push endpoint\n * version information about the mutators the app is using (e.g., format of\n * mutator args).\n */\n schemaVersion: string;\n profileID: string;\n\n clientGroupID: ClientGroupID;\n mutations: MutationV1[];\n};\n\nconst pushRequestV1Schema = valita.object({\n pushVersion: valita.literal(1),\n schemaVersion: valita.string(),\n profileID: valita.string(),\n clientGroupID: clientGroupIDSchema,\n mutations: valita.array(mutationV1Schema),\n});\n\nexport type PushRequest = PushRequestV1;\n\nexport function assertPushRequestV1(\n value: unknown,\n): asserts value is PushRequestV1 {\n valita.assert(value, pushRequestV1Schema);\n}\n\n/**\n * Mutation describes a single mutation done on the client.\n */\ntype FrozenMutationV1 = {\n readonly id: number;\n readonly name: string;\n readonly args: FrozenJSONValue;\n readonly timestamp: number;\n readonly clientID: ClientID;\n};\n\nfunction convertDD31(lm: LocalMetaDD31): FrozenMutationV1 {\n return {\n id: lm.mutationID,\n name: lm.mutatorName,\n args: lm.mutatorArgsJSON,\n timestamp: lm.timestamp,\n clientID: lm.clientID,\n };\n}\n\nexport async function push(\n requestID: string,\n store: Store,\n lc: LogContext,\n profileID: string,\n clientGroupID: ClientGroupID | undefined,\n _clientID: ClientID,\n pusher: Pusher,\n schemaVersion: string,\n pushVersion: typeof PUSH_VERSION_SDD | typeof PUSH_VERSION_DD31,\n): Promise<PusherResult | undefined> {\n // Find pending commits between the base snapshot and the main head and push\n // them to the data layer.\n const pending = await withRead(store, async dagRead => {\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (!mainHeadHash) {\n throw new Error('Internal no main head');\n }\n return localMutations(mainHeadHash, dagRead);\n // Important! Don't hold the lock through an HTTP request!\n });\n\n if (pending.length === 0) {\n return undefined;\n }\n\n // Commit.pending gave us commits in head-first order; the bindings\n // want tail first (in mutation id order).\n pending.reverse();\n\n assert(\n pushVersion === PUSH_VERSION_DD31,\n 'Expected pushVersion to be PUSH_VERSION_DD31',\n );\n\n const pushMutations: FrozenMutationV1[] = [];\n for (const commit of pending) {\n if (commitIsLocalDD31(commit)) {\n pushMutations.push(convertDD31(commit.meta));\n } else {\n throw new Error('Internal non local pending commit');\n }\n }\n assert(clientGroupID, 'Expected clientGroupID to be defined');\n const pushReq: PushRequestV1 = {\n profileID,\n clientGroupID,\n mutations: pushMutations,\n pushVersion: PUSH_VERSION_DD31,\n schemaVersion,\n };\n\n lc.debug?.('Starting push...');\n const pushStart = Date.now();\n const pusherResult = await callPusher(pusher, pushReq, requestID);\n lc.debug?.('...Push complete in ', Date.now() - pushStart, 'ms');\n return pusherResult;\n}\n\nasync function callPusher(\n pusher: Pusher,\n body: PushRequestV1,\n requestID: string,\n): Promise<PusherResult> {\n let pusherResult: PusherResult;\n try {\n pusherResult = await pusher(body, requestID);\n } catch (e) {\n throw new PushError(toError(e));\n }\n try {\n assertPusherResult(pusherResult);\n return pusherResult;\n } catch (e) {\n throw new ReportError('Invalid pusher result', toError(e));\n }\n}\n"],"mappings":";;;;;;;;;AA6CA,IAAM,mBAA4CA,eAAsB;CACtE,IAAIC,eAAO,OAAO;CAClB,MAAMA,eAAO,OAAO;CACpB,MAAM;CACN,WAAWA,eAAO,OAAO;CACzB,UAAU;AACZ,CAAC;AAoB2BA,eAAO,OAAO;CACxC,aAAaA,eAAO,QAAQ,CAAC;CAC7B,eAAeA,eAAO,OAAO;CAC7B,WAAWA,eAAO,OAAO;CACzB,eAAe;CACf,WAAWA,eAAO,MAAM,gBAAgB;AAC1C,CAAC;AAqBD,SAAS,YAAY,IAAqC;CACxD,OAAO;EACL,IAAI,GAAG;EACP,MAAM,GAAG;EACT,MAAM,GAAG;EACT,WAAW,GAAG;EACd,UAAU,GAAG;CACf;AACF;AAEA,eAAsB,KACpB,WACA,OACA,IACA,WACA,eACA,WACA,QACA,eACA,aACmC;CAGnC,MAAM,UAAU,MAAM,SAAS,OAAO,OAAM,YAAW;EACrD,MAAM,eAAe,MAAM,QAAQ,QAAQ,iBAAiB;EAC5D,IAAI,CAAC,cACH,MAAM,IAAI,MAAM,uBAAuB;EAEzC,OAAO,eAAe,cAAc,OAAO;CAE7C,CAAC;CAED,IAAI,QAAQ,WAAW,GACrB;CAKF,QAAQ,QAAQ;CAEhB,OACE,gBAAA,GACA,8CACF;CAEA,MAAM,gBAAoC,CAAC;CAC3C,KAAK,MAAM,UAAU,SACnB,IAAI,kBAAkB,MAAM,GAC1B,cAAc,KAAK,YAAY,OAAO,IAAI,CAAC;MAE3C,MAAM,IAAI,MAAM,mCAAmC;CAGvD,OAAO,eAAe,sCAAsC;CAC5D,MAAM,UAAyB;EAC7B;EACA;EACA,WAAW;EACX,aAAA;EACA;CACF;CAEA,GAAG,QAAQ,kBAAkB;CAC7B,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,eAAe,MAAM,WAAW,QAAQ,SAAS,SAAS;CAChE,GAAG,QAAQ,wBAAwB,KAAK,IAAI,IAAI,WAAW,IAAI;CAC/D,OAAO;AACT;AAEA,eAAe,WACb,QACA,MACA,WACuB;CACvB,IAAI;CACJ,IAAI;EACF,eAAe,MAAM,OAAO,MAAM,SAAS;CAC7C,SAAS,GAAG;EACV,MAAM,IAAI,UAAU,QAAQ,CAAC,CAAC;CAChC;CACA,IAAI;EACF,mBAAmB,YAAY;EAC/B,OAAO;CACT,SAAS,GAAG;EACV,MAAM,IAAI,YAAY,yBAAyB,QAAQ,CAAC,CAAC;CAC3D;AACF"}
|
|
@@ -44,7 +44,7 @@ export interface RequestOptions {
|
|
|
44
44
|
export type MakeMutators<T extends MutatorDefs> = {
|
|
45
45
|
readonly [P in keyof T]: MakeMutator<T[P]>;
|
|
46
46
|
};
|
|
47
|
-
|
|
47
|
+
type ToPromise<P> = P extends Promise<unknown> ? P : Promise<P>;
|
|
48
48
|
export type QueryInternal = <R>(body: (tx: ReadTransactionImpl) => MaybePromise<R>) => Promise<R>; /**
|
|
49
49
|
* The reason {@link onUpdateNeeded} was called.
|
|
50
50
|
*/
|
|
@@ -54,4 +54,5 @@ export type UpdateNeededReason = {
|
|
|
54
54
|
type: 'VersionNotSupported';
|
|
55
55
|
versionType?: 'push' | 'pull' | 'schema' | undefined;
|
|
56
56
|
};
|
|
57
|
+
export {};
|
|
57
58
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../replicache/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAC,cAAc,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAC,mBAAmB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,IAAI,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;CACb,CAAC;AACF,MAAM,MAAM,IAAI,GAAG;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,cAAc,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IACvE,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;;;;;;EAMvB;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,CACb,EAAE,EAAE,gBAAgB,EAGpB,IAAI,CAAC,EAAE,GAAG,KACP,aAAa,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS,CACR,EAAE,EAAE,gBAAgB,EACpB,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,iBAAiB,CAAC,KAC9B,aAAa,IAChB,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,GAAG,GAClE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,GAAG,CAAC,GACjC,KAAK,CAAC,CAAC;;EAER;AAEH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI;IAChD,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../replicache/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAC,cAAc,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAC,mBAAmB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,IAAI,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;CACb,CAAC;AACF,MAAM,MAAM,IAAI,GAAG;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,cAAc,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IACvE,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;;;;;;EAMvB;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,CACb,EAAE,EAAE,gBAAgB,EAGpB,IAAI,CAAC,EAAE,GAAG,KACP,aAAa,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS,CACR,EAAE,EAAE,gBAAgB,EACpB,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,iBAAiB,CAAC,KAC9B,aAAa,IAChB,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,GAAG,GAClE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,GAAG,CAAC,GACjC,KAAK,CAAC,CAAC;;EAER;AAEH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI;IAChD,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,CAAC;AAEF,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAC5B,IAAI,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,YAAY,CAAC,CAAC,CAAC,KAC/C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;GAEd;AAEH,MAAM,MAAM,kBAAkB,GAC1B;IAKE,IAAI,EAAE,gBAAgB,CAAC;CACxB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACtD,CAAC"}
|
|
@@ -4,14 +4,9 @@ export declare function assertNumber(v: unknown): asserts v is number;
|
|
|
4
4
|
export declare function assertBoolean(v: unknown): asserts v is boolean;
|
|
5
5
|
export declare function assertObject(v: unknown): asserts v is Record<string, unknown>;
|
|
6
6
|
export declare function assertArray(v: unknown): asserts v is unknown[];
|
|
7
|
-
export declare function invalidType(v: unknown, t: string): string;
|
|
8
7
|
export declare function throwInvalidType(v: unknown, t: string): never;
|
|
9
8
|
export declare function assertNotNull<T>(v: T | null): asserts v is T;
|
|
10
|
-
export declare function assertUndefined<T>(v: T | undefined, msg?: string): asserts v is T;
|
|
11
9
|
export declare function assertNotUndefined<T>(v: T | undefined, msg?: string): asserts v is T;
|
|
12
|
-
export declare function assertInstanceof<T>(v: unknown, t: new (...args: unknown[]) => T): asserts v is T;
|
|
13
|
-
export declare function assertUint8Array(v: unknown): asserts v is Uint8Array;
|
|
14
10
|
export declare function unreachable(): never;
|
|
15
11
|
export declare function unreachable(v: never): never;
|
|
16
|
-
export declare function notImplemented(): never;
|
|
17
12
|
//# sourceMappingURL=asserts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asserts.d.ts","sourceRoot":"","sources":["../../../../shared/src/asserts.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAI1E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAE9D;AAQD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK7E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,EAAE,CAI9D;
|
|
1
|
+
{"version":3,"file":"asserts.d.ts","sourceRoot":"","sources":["../../../../shared/src/asserts.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAI1E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAE9D;AAQD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK7E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,EAAE,CAI9D;AAYD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAE7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAI5D;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,CAAC,EAAE,CAAC,GAAG,SAAS,EAChB,GAAG,SAAiC,GACnC,OAAO,CAAC,CAAC,IAAI,CAAC,CAIhB;AAED,wBAAgB,WAAW,IAAI,KAAK,CAAC;AACrC,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC"}
|
|
@@ -40,6 +40,6 @@ function unreachable(_) {
|
|
|
40
40
|
throw new Error("Unreachable");
|
|
41
41
|
}
|
|
42
42
|
//#endregion
|
|
43
|
-
export { assert, assertArray, assertBoolean, assertNotNull, assertNotUndefined, assertNumber, assertObject, assertString,
|
|
43
|
+
export { assert, assertArray, assertBoolean, assertNotNull, assertNotUndefined, assertNumber, assertObject, assertString, throwInvalidType, unreachable };
|
|
44
44
|
|
|
45
45
|
//# sourceMappingURL=asserts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asserts.js","names":[],"sources":["../../../../shared/src/asserts.ts"],"sourcesContent":["export function assert(b: unknown, msg: string | (() => string)): asserts b {\n if (!b) {\n throw new Error(typeof msg === 'string' ? msg : msg());\n }\n}\n\nexport function assertString(v: unknown): asserts v is string {\n assertType(v, 'string');\n}\n\nexport function assertNumber(v: unknown): asserts v is number {\n assertType(v, 'number');\n}\n\nexport function assertBoolean(v: unknown): asserts v is boolean {\n assertType(v, 'boolean');\n}\n\nfunction assertType(v: unknown, t: string) {\n if (typeof v !== t) {\n throwInvalidType(v, t);\n }\n}\n\nexport function assertObject(v: unknown): asserts v is Record<string, unknown> {\n if (v === null) {\n throwInvalidType(v, 'object');\n }\n assertType(v, 'object');\n}\n\nexport function assertArray(v: unknown): asserts v is unknown[] {\n if (!Array.isArray(v)) {\n throwInvalidType(v, 'array');\n }\n}\n\
|
|
1
|
+
{"version":3,"file":"asserts.js","names":[],"sources":["../../../../shared/src/asserts.ts"],"sourcesContent":["export function assert(b: unknown, msg: string | (() => string)): asserts b {\n if (!b) {\n throw new Error(typeof msg === 'string' ? msg : msg());\n }\n}\n\nexport function assertString(v: unknown): asserts v is string {\n assertType(v, 'string');\n}\n\nexport function assertNumber(v: unknown): asserts v is number {\n assertType(v, 'number');\n}\n\nexport function assertBoolean(v: unknown): asserts v is boolean {\n assertType(v, 'boolean');\n}\n\nfunction assertType(v: unknown, t: string) {\n if (typeof v !== t) {\n throwInvalidType(v, t);\n }\n}\n\nexport function assertObject(v: unknown): asserts v is Record<string, unknown> {\n if (v === null) {\n throwInvalidType(v, 'object');\n }\n assertType(v, 'object');\n}\n\nexport function assertArray(v: unknown): asserts v is unknown[] {\n if (!Array.isArray(v)) {\n throwInvalidType(v, 'array');\n }\n}\n\nfunction invalidType(v: unknown, t: string): string {\n let s = 'Invalid type: ';\n if (v === null || v === undefined) {\n s += v;\n } else {\n s += `${typeof v} \\`${v}\\``;\n }\n return s + `, expected ${t}`;\n}\n\nexport function throwInvalidType(v: unknown, t: string): never {\n throw new Error(invalidType(v, t));\n}\n\nexport function assertNotNull<T>(v: T | null): asserts v is T {\n if (v === null) {\n throw new Error('Expected non-null value');\n }\n}\n\nexport function assertNotUndefined<T>(\n v: T | undefined,\n msg = 'Expected non undefined value',\n): asserts v is T {\n if (v === undefined) {\n throw new Error(msg);\n }\n}\n\nexport function unreachable(): never;\nexport function unreachable(v: never): never;\nexport function unreachable(_?: never): never {\n throw new Error('Unreachable');\n}\n"],"mappings":";AAAA,SAAgB,OAAO,GAAY,KAAyC;CAC1E,IAAI,CAAC,GACH,MAAM,IAAI,MAAM,OAAO,QAAQ,WAAW,MAAM,IAAI,CAAC;AAEzD;AAEA,SAAgB,aAAa,GAAiC;CAC5D,WAAW,GAAG,QAAQ;AACxB;AAEA,SAAgB,aAAa,GAAiC;CAC5D,WAAW,GAAG,QAAQ;AACxB;AAEA,SAAgB,cAAc,GAAkC;CAC9D,WAAW,GAAG,SAAS;AACzB;AAEA,SAAS,WAAW,GAAY,GAAW;CACzC,IAAI,OAAO,MAAM,GACf,iBAAiB,GAAG,CAAC;AAEzB;AAEA,SAAgB,aAAa,GAAkD;CAC7E,IAAI,MAAM,MACR,iBAAiB,GAAG,QAAQ;CAE9B,WAAW,GAAG,QAAQ;AACxB;AAEA,SAAgB,YAAY,GAAoC;CAC9D,IAAI,CAAC,MAAM,QAAQ,CAAC,GAClB,iBAAiB,GAAG,OAAO;AAE/B;AAEA,SAAS,YAAY,GAAY,GAAmB;CAClD,IAAI,IAAI;CACR,IAAI,MAAM,QAAQ,MAAM,KAAA,GACtB,KAAK;MAEL,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE;CAE1B,OAAO,IAAI,cAAc;AAC3B;AAEA,SAAgB,iBAAiB,GAAY,GAAkB;CAC7D,MAAM,IAAI,MAAM,YAAY,GAAG,CAAC,CAAC;AACnC;AAEA,SAAgB,cAAiB,GAA6B;CAC5D,IAAI,MAAM,MACR,MAAM,IAAI,MAAM,yBAAyB;AAE7C;AAEA,SAAgB,mBACd,GACA,MAAM,gCACU;CAChB,IAAI,MAAM,KAAA,GACR,MAAM,IAAI,MAAM,GAAG;AAEvB;AAIA,SAAgB,YAAY,GAAkB;CAC5C,MAAM,IAAI,MAAM,aAAa;AAC/B"}
|
|
@@ -2,23 +2,6 @@ type GlobalThis = typeof globalThis;
|
|
|
2
2
|
export declare function overrideBrowserGlobal<T extends keyof GlobalThis>(name: T, value: GlobalThis[T]): void;
|
|
3
3
|
export declare function clearBrowserOverrides(): void;
|
|
4
4
|
export declare function getBrowserGlobal<T extends keyof GlobalThis>(name: T): GlobalThis[T] | undefined;
|
|
5
|
-
/**
|
|
6
|
-
* Returns the global method with the given name, bound to the global object.
|
|
7
|
-
* This is important because some methods (e.g. `requestAnimationFrame`) are not
|
|
8
|
-
* bound to the global object by default.
|
|
9
|
-
*
|
|
10
|
-
* If you end up using {@link getBrowserGlobal} instead in a case like this:
|
|
11
|
-
*
|
|
12
|
-
* ```js
|
|
13
|
-
* this.#raf = getBrowserGlobal('requestAnimationFrame') ?? rafFallback;
|
|
14
|
-
* ...
|
|
15
|
-
* this.#raf(() => ...);
|
|
16
|
-
* ```
|
|
17
|
-
*
|
|
18
|
-
* You will end up with `Uncaught TypeError: Illegal invocation` because `this`
|
|
19
|
-
* is not bound to the global object
|
|
20
|
-
*/
|
|
21
|
-
export declare function getBrowserGlobalMethod<T extends keyof GlobalThis>(name: T): GlobalThis[T] | undefined;
|
|
22
5
|
export declare function mustGetBrowserGlobal<T extends keyof GlobalThis>(name: T): GlobalThis[T];
|
|
23
6
|
export {};
|
|
24
7
|
//# sourceMappingURL=browser-env.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-env.d.ts","sourceRoot":"","sources":["../../../../shared/src/browser-env.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,OAAO,UAAU,CAAC;AAIpC,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,UAAU,EAC9D,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAGrB;AAED,wBAAgB,qBAAqB,SAEpC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,UAAU,EACzD,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAK3B;AAED
|
|
1
|
+
{"version":3,"file":"browser-env.d.ts","sourceRoot":"","sources":["../../../../shared/src/browser-env.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,OAAO,UAAU,CAAC;AAIpC,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,UAAU,EAC9D,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAGrB;AAED,wBAAgB,qBAAqB,SAEpC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,UAAU,EACzD,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAK3B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,UAAU,EAC7D,IAAI,EAAE,CAAC,GACN,UAAU,CAAC,CAAC,CAAC,CAQf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-env.js","names":[],"sources":["../../../../shared/src/browser-env.ts"],"sourcesContent":["// Helpers for some objects from the browser environment. These are wrapped in\n// functions because Replicache runs in environments that do not have these\n// objects (such as Web Workers, Deno etc).\n\ntype GlobalThis = typeof globalThis;\n\nconst overrides = new Map<keyof GlobalThis, GlobalThis[keyof GlobalThis]>();\n\nexport function overrideBrowserGlobal<T extends keyof GlobalThis>(\n name: T,\n value: GlobalThis[T],\n) {\n overrides.set(name, value);\n}\n\nexport function clearBrowserOverrides() {\n overrides.clear();\n}\n\nexport function getBrowserGlobal<T extends keyof GlobalThis>(\n name: T,\n): GlobalThis[T] | undefined {\n if (overrides.has(name)) {\n return overrides.get(name);\n }\n return globalThis[name];\n}\n\
|
|
1
|
+
{"version":3,"file":"browser-env.js","names":[],"sources":["../../../../shared/src/browser-env.ts"],"sourcesContent":["// Helpers for some objects from the browser environment. These are wrapped in\n// functions because Replicache runs in environments that do not have these\n// objects (such as Web Workers, Deno etc).\n\ntype GlobalThis = typeof globalThis;\n\nconst overrides = new Map<keyof GlobalThis, GlobalThis[keyof GlobalThis]>();\n\nexport function overrideBrowserGlobal<T extends keyof GlobalThis>(\n name: T,\n value: GlobalThis[T],\n) {\n overrides.set(name, value);\n}\n\nexport function clearBrowserOverrides() {\n overrides.clear();\n}\n\nexport function getBrowserGlobal<T extends keyof GlobalThis>(\n name: T,\n): GlobalThis[T] | undefined {\n if (overrides.has(name)) {\n return overrides.get(name);\n }\n return globalThis[name];\n}\n\nexport function mustGetBrowserGlobal<T extends keyof GlobalThis>(\n name: T,\n): GlobalThis[T] {\n const r = getBrowserGlobal(name);\n if (r === undefined) {\n throw new Error(\n `Unsupported JavaScript environment: Could not find ${name}.`,\n );\n }\n return r;\n}\n"],"mappings":";AAMA,IAAM,4BAAY,IAAI,IAAoD;AAa1E,SAAgB,iBACd,MAC2B;CAC3B,IAAI,UAAU,IAAI,IAAI,GACpB,OAAO,UAAU,IAAI,IAAI;CAE3B,OAAO,WAAW;AACpB;AAEA,SAAgB,qBACd,MACe;CACf,MAAM,IAAI,iBAAiB,IAAI;CAC/B,IAAI,MAAM,KAAA,GACR,MAAM,IAAI,MACR,sDAAsD,KAAK,EAC7D;CAEF,OAAO;AACT"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { JSONValue, ReadonlyJSONValue } from './json.ts';
|
|
2
2
|
export declare function deepClone(value: ReadonlyJSONValue): JSONValue;
|
|
3
|
-
export declare function internalDeepClone(value: ReadonlyJSONValue, seen: Array<ReadonlyJSONValue>): JSONValue;
|
|
4
3
|
//# sourceMappingURL=deep-clone.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-clone.d.ts","sourceRoot":"","sources":["../../../../shared/src/deep-clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAE5D,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAG7D
|
|
1
|
+
{"version":3,"file":"deep-clone.d.ts","sourceRoot":"","sources":["../../../../shared/src/deep-clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAE5D,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAG7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-clone.js","names":[],"sources":["../../../../shared/src/deep-clone.ts"],"sourcesContent":["import {hasOwn} from './has-own.ts';\nimport type {JSONValue, ReadonlyJSONValue} from './json.ts';\n\nexport function deepClone(value: ReadonlyJSONValue): JSONValue {\n const seen: Array<ReadonlyJSONValue> = [];\n return internalDeepClone(value, seen);\n}\n\
|
|
1
|
+
{"version":3,"file":"deep-clone.js","names":[],"sources":["../../../../shared/src/deep-clone.ts"],"sourcesContent":["import {hasOwn} from './has-own.ts';\nimport type {JSONValue, ReadonlyJSONValue} from './json.ts';\n\nexport function deepClone(value: ReadonlyJSONValue): JSONValue {\n const seen: Array<ReadonlyJSONValue> = [];\n return internalDeepClone(value, seen);\n}\n\nfunction internalDeepClone(\n value: ReadonlyJSONValue,\n seen: Array<ReadonlyJSONValue>,\n): JSONValue {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'string':\n case 'undefined':\n return value;\n case 'object': {\n if (value === null) {\n return null;\n }\n if (seen.includes(value)) {\n throw new Error('Cyclic object');\n }\n seen.push(value);\n if (Array.isArray(value)) {\n const rv = value.map(v => internalDeepClone(v, seen));\n seen.pop();\n return rv;\n }\n\n const obj: JSONValue = {};\n\n for (const k in value) {\n if (hasOwn(value, k)) {\n const v = (value as Record<string, ReadonlyJSONValue>)[k];\n if (v !== undefined) {\n obj[k] = internalDeepClone(v, seen);\n }\n }\n }\n seen.pop();\n return obj;\n }\n\n default:\n throw new Error(`Invalid type: ${typeof value}`);\n }\n}\n"],"mappings":";;AAGA,SAAgB,UAAU,OAAqC;CAE7D,OAAO,kBAAkB,OAAO,CAAA,CAAI;AACtC;AAEA,SAAS,kBACP,OACA,MACW;CACX,QAAQ,OAAO,OAAf;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK,UAAU;GACb,IAAI,UAAU,MACZ,OAAO;GAET,IAAI,KAAK,SAAS,KAAK,GACrB,MAAM,IAAI,MAAM,eAAe;GAEjC,KAAK,KAAK,KAAK;GACf,IAAI,MAAM,QAAQ,KAAK,GAAG;IACxB,MAAM,KAAK,MAAM,KAAI,MAAK,kBAAkB,GAAG,IAAI,CAAC;IACpD,KAAK,IAAI;IACT,OAAO;GACT;GAEA,MAAM,MAAiB,CAAC;GAExB,KAAK,MAAM,KAAK,OACd,IAAI,OAAO,OAAO,CAAC,GAAG;IACpB,MAAM,IAAK,MAA4C;IACvD,IAAI,MAAM,KAAA,GACR,IAAI,KAAK,kBAAkB,GAAG,IAAI;GAEtC;GAEF,KAAK,IAAI;GACT,OAAO;EACT;EAEA,SACE,MAAM,IAAI,MAAM,iBAAiB,OAAO,OAAO;CACnD;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolver } from "
|
|
1
|
+
import { resolver } from "./resolver.js";
|
|
2
2
|
//#region ../shared/src/document-visible.ts
|
|
3
3
|
function getDocumentVisibilityWatcher(doc, hiddenIntervalMS, signal) {
|
|
4
4
|
return doc ? new DocumentVisibilityWatcherImpl(doc, hiddenIntervalMS, signal) : new DocumentVisibilityWatcherNoDoc();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-visible.js","names":[],"sources":["../../../../shared/src/document-visible.ts"],"sourcesContent":["import {resolver} from '
|
|
1
|
+
{"version":3,"file":"document-visible.js","names":[],"sources":["../../../../shared/src/document-visible.ts"],"sourcesContent":["import {resolver} from './resolver.ts';\n\ntype PartialDocument = Pick<\n Document,\n 'visibilityState' | 'addEventListener' | 'removeEventListener'\n>;\n\nexport function getDocumentVisibilityWatcher(\n doc: PartialDocument | undefined,\n hiddenIntervalMS: number,\n signal: AbortSignal,\n): DocumentVisibilityWatcher {\n return doc\n ? new DocumentVisibilityWatcherImpl(doc, hiddenIntervalMS, signal)\n : new DocumentVisibilityWatcherNoDoc();\n}\n\nexport interface DocumentVisibilityWatcher {\n readonly visibilityState: DocumentVisibilityState;\n waitForVisible(): Promise<unknown>;\n waitForHidden(): Promise<unknown>;\n}\n\nclass DocumentVisibilityWatcherImpl implements DocumentVisibilityWatcher {\n readonly #doc: PartialDocument;\n readonly #hiddenIntervalMS: number;\n #timeoutID: ReturnType<typeof setTimeout> | 0 = 0;\n\n // This trails doc.visibilityState by hiddenIntervalMS when being hidden. This\n // is because we want to wait for the tab to be hidden for a while before\n // considering as hidden.\n visibilityState: DocumentVisibilityState;\n\n readonly #promises = new Set<{\n resolve: () => void;\n state: DocumentVisibilityState;\n }>();\n\n constructor(\n doc: PartialDocument,\n hiddenIntervalMS: number,\n signal: AbortSignal,\n ) {\n this.#doc = doc;\n this.#hiddenIntervalMS = hiddenIntervalMS;\n this.visibilityState = doc.visibilityState;\n // Safari got support for abort signal in addEventListener in version\n // 15 (Released 2021-09-20)\n this.#doc.addEventListener('visibilitychange', this.#onVisibilityChange, {\n signal,\n });\n }\n\n #onVisibilityChange = () => {\n if (this.#doc.visibilityState === 'visible') {\n clearTimeout(this.#timeoutID);\n this.#setVisibilityState('visible');\n } else {\n this.#timeoutID = setTimeout(() => {\n this.#setVisibilityState('hidden');\n }, this.#hiddenIntervalMS);\n }\n };\n\n #setVisibilityState(visibilityState: DocumentVisibilityState) {\n if (visibilityState === this.visibilityState) {\n return;\n }\n this.visibilityState = visibilityState;\n for (const entry of this.#promises) {\n const {resolve, state} = entry;\n if (state === visibilityState) {\n resolve();\n this.#promises.delete(entry);\n }\n }\n }\n\n waitForVisible(): Promise<unknown> {\n return this.#waitFor('visible');\n }\n\n waitForHidden(): Promise<unknown> {\n return this.#waitFor('hidden');\n }\n\n #waitFor(state: DocumentVisibilityState): Promise<unknown> {\n if (this.visibilityState === state) {\n return Promise.resolve();\n }\n\n const {promise, resolve} = resolver();\n this.#promises.add({resolve, state});\n return promise;\n }\n}\n\nconst resolvedPromise = Promise.resolve();\nconst promiseThatNeverResolves = new Promise(() => undefined);\n\nclass DocumentVisibilityWatcherNoDoc implements DocumentVisibilityWatcher {\n readonly visibilityState: DocumentVisibilityState = 'visible';\n waitForVisible(): Promise<unknown> {\n return resolvedPromise;\n }\n\n waitForHidden(): Promise<unknown> {\n return promiseThatNeverResolves;\n }\n}\n"],"mappings":";;AAOA,SAAgB,6BACd,KACA,kBACA,QAC2B;CAC3B,OAAO,MACH,IAAI,8BAA8B,KAAK,kBAAkB,MAAM,IAC/D,IAAI,+BAA+B;AACzC;AAQA,IAAM,gCAAN,MAAyE;CACvE;CACA;CACA,aAAgD;CAKhD;CAEA,4BAAqB,IAAI,IAGtB;CAEH,YACE,KACA,kBACA,QACA;EACA,KAAK,OAAO;EACZ,KAAK,oBAAoB;EACzB,KAAK,kBAAkB,IAAI;EAG3B,KAAK,KAAK,iBAAiB,oBAAoB,KAAK,qBAAqB,EACvE,OACF,CAAC;CACH;CAEA,4BAA4B;EAC1B,IAAI,KAAK,KAAK,oBAAoB,WAAW;GAC3C,aAAa,KAAK,UAAU;GAC5B,KAAK,oBAAoB,SAAS;EACpC,OACE,KAAK,aAAa,iBAAiB;GACjC,KAAK,oBAAoB,QAAQ;EACnC,GAAG,KAAK,iBAAiB;CAE7B;CAEA,oBAAoB,iBAA0C;EAC5D,IAAI,oBAAoB,KAAK,iBAC3B;EAEF,KAAK,kBAAkB;EACvB,KAAK,MAAM,SAAS,KAAK,WAAW;GAClC,MAAM,EAAC,SAAS,UAAS;GACzB,IAAI,UAAU,iBAAiB;IAC7B,QAAQ;IACR,KAAK,UAAU,OAAO,KAAK;GAC7B;EACF;CACF;CAEA,iBAAmC;EACjC,OAAO,KAAK,SAAS,SAAS;CAChC;CAEA,gBAAkC;EAChC,OAAO,KAAK,SAAS,QAAQ;CAC/B;CAEA,SAAS,OAAkD;EACzD,IAAI,KAAK,oBAAoB,OAC3B,OAAO,QAAQ,QAAQ;EAGzB,MAAM,EAAC,SAAS,YAAW,SAAS;EACpC,KAAK,UAAU,IAAI;GAAC;GAAS;EAAK,CAAC;EACnC,OAAO;CACT;AACF;AAEA,IAAM,kBAAkB,QAAQ,QAAQ;AACxC,IAAM,2BAA2B,IAAI,cAAc,KAAA,CAAS;AAE5D,IAAM,iCAAN,MAA0E;CACxE,kBAAoD;CACpD,iBAAmC;EACjC,OAAO;CACT;CAEA,gBAAkC;EAChC,OAAO;CACT;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../../shared/src/expand.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,GAAG,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../../shared/src/expand.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAC,GAAG,KAAK,CAAC"}
|
|
@@ -4,7 +4,7 @@ type Primitive = undefined | null | boolean | string | number | symbol | bigint;
|
|
|
4
4
|
*/
|
|
5
5
|
export type Immutable<T> = T extends Primitive ? T : T extends ReadonlyArray<infer U> ? ImmutableArray<U> : ImmutableObject<T>;
|
|
6
6
|
export type ImmutableArray<T> = ReadonlyArray<Immutable<T>>;
|
|
7
|
-
|
|
7
|
+
type ImmutableObject<T> = {
|
|
8
8
|
readonly [K in keyof T]: Immutable<T[K]>;
|
|
9
9
|
};
|
|
10
10
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../../../shared/src/immutable.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAC1C,CAAC,GACD,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC9B,cAAc,CAAC,CAAC,CAAC,GACjB,eAAe,CAAC,CAAC,CAAC,CAAC;AAGzB,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,
|
|
1
|
+
{"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../../../shared/src/immutable.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAC1C,CAAC,GACD,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC9B,cAAc,CAAC,CAAC,CAAC,GACjB,eAAe,CAAC,CAAC,CAAC,CAAC;AAGzB,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,KAAK,eAAe,CAAC,CAAC,IAAI;IAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare function joinIterables<T>(...iters: Iterable<T>[]): Generator<T, void, any>;
|
|
2
|
-
export declare function first<T>(stream: Iterable<T>): T | undefined;
|
|
3
2
|
export declare function once<T>(stream: Iterable<T>): Iterable<T>;
|
|
4
3
|
type IteratorWithHelpers<T> = Iterator<T> & {
|
|
5
4
|
map<U>(f: (t: T, index: number) => U): IteratorWithHelpers<U>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterables.d.ts","sourceRoot":"","sources":["../../../../shared/src/iterables.ts"],"names":[],"mappings":"AAAA,wBAAiB,aAAa,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,2BAIxD;AAwBD,
|
|
1
|
+
{"version":3,"file":"iterables.d.ts","sourceRoot":"","sources":["../../../../shared/src/iterables.ts"],"names":[],"mappings":"AAAA,wBAAiB,aAAa,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,2BAIxD;AAwBD,wBAAiB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAOzD;AAKD,KAAK,mBAAmB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAC1C,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC;IACnD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC7C,CAAC;AA6CF,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,GAC/B,CAAC,EAAE,CAGL;AAED,wBAAgB,IAAI,CAAC,CAAC,EACpB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAC7C,OAAO,CAQT;AAuBD,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CACxB,CAAC;AAEzC,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,KAAK,EAAE,CAAC,GAEP,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAE/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterables.js","names":[],"sources":["../../../../shared/src/iterables.ts"],"sourcesContent":["export function* joinIterables<T>(...iters: Iterable<T>[]) {\n for (const iter of iters) {\n yield* iter;\n }\n}\n\nfunction* filterIter<T>(\n iter: Iterable<T>,\n p: (t: T, index: number) => boolean,\n): Iterable<T> {\n let index = 0;\n for (const t of iter) {\n if (p(t, index++)) {\n yield t;\n }\n }\n}\n\nfunction* mapIter<T, U>(\n iter: Iterable<T>,\n f: (t: T, index: number) => U,\n): Iterable<U> {\n let index = 0;\n for (const t of iter) {\n yield f(t, index++);\n }\n}\n\nexport function
|
|
1
|
+
{"version":3,"file":"iterables.js","names":[],"sources":["../../../../shared/src/iterables.ts"],"sourcesContent":["export function* joinIterables<T>(...iters: Iterable<T>[]) {\n for (const iter of iters) {\n yield* iter;\n }\n}\n\nfunction* filterIter<T>(\n iter: Iterable<T>,\n p: (t: T, index: number) => boolean,\n): Iterable<T> {\n let index = 0;\n for (const t of iter) {\n if (p(t, index++)) {\n yield t;\n }\n }\n}\n\nfunction* mapIter<T, U>(\n iter: Iterable<T>,\n f: (t: T, index: number) => U,\n): Iterable<U> {\n let index = 0;\n for (const t of iter) {\n yield f(t, index++);\n }\n}\n\nexport function* once<T>(stream: Iterable<T>): Iterable<T> {\n const it = stream[Symbol.iterator]();\n const {value} = it.next();\n if (value !== undefined) {\n yield value;\n }\n it.return?.();\n}\n\n// ES2024 Iterator helpers are available in Node 22+ and part of ES2024.\n// https://github.com/tc39/proposal-iterator-helpers\n\ntype IteratorWithHelpers<T> = Iterator<T> & {\n map<U>(f: (t: T, index: number) => U): IteratorWithHelpers<U>;\n filter(p: (t: T, index: number) => boolean): IteratorWithHelpers<T>;\n some(p: (t: T, index: number) => boolean): boolean;\n [Symbol.iterator](): IteratorWithHelpers<T>;\n};\n\ntype IteratorConstructor = {\n from<T>(this: void, iter: Iterable<T>): IteratorWithHelpers<T>;\n};\n\n// Check if native Iterator.from is available and bind it once at startup\n// We use globalThis to access the runtime value safely\nconst iteratorCtor = (globalThis as {Iterator?: IteratorConstructor}).Iterator;\nconst nativeIteratorFrom = iteratorCtor?.from as\n | (<T>(iter: Iterable<T>) => IteratorWithHelpers<T>)\n | undefined;\n\nconst iteratorFrom: <T>(e: Iterable<T>) => IteratorWithHelpers<T> =\n nativeIteratorFrom ?? (e => new IterWrapper(e));\n\n// Fallback implementation for environments without ES2024 Iterator helpers\nclass IterWrapper<T> implements IteratorWithHelpers<T>, IterableIterator<T> {\n readonly #iterator: Iterator<T>;\n\n constructor(iterable: Iterable<T>) {\n this.#iterator = iterable[Symbol.iterator]();\n }\n\n next(): IteratorResult<T> {\n return this.#iterator.next();\n }\n\n [Symbol.iterator](): IteratorWithHelpers<T> {\n return this;\n }\n\n map<U>(f: (t: T, index: number) => U): IterWrapper<U> {\n return new IterWrapper(mapIter(this, f));\n }\n\n filter(p: (t: T, index: number) => boolean): IterWrapper<T> {\n return new IterWrapper(filterIter(this, p));\n }\n\n some(p: (t: T, index: number) => boolean): boolean {\n return some(this, p);\n }\n}\n\nexport function wrapIterable<T>(iter: Iterable<T>): IteratorWithHelpers<T> {\n return iteratorFrom(iter);\n}\n\n/**\n * This will make a new array where the elements are the same as the iterable\n * but sorted according to the compare function. If the compare function is not\n * provided, it will sort the elements in JS standard way which is string\n * compare.\n */\nexport function toSorted<T>(\n iter: Iterable<T>,\n compare?: (a: T, b: T) => number,\n): T[] {\n // oxlint-disable-next-line e18e/prefer-array-to-sorted\n return [...iter].sort(compare);\n}\n\nexport function some<T>(\n iterable: Iterable<T>,\n predicate: (item: T, index: number) => boolean,\n): boolean {\n let index = 0;\n for (const item of iterable) {\n if (predicate(item, index++)) {\n return true;\n }\n }\n return false;\n}\n\nclass EmptyIteratorWithReturn<T>\n // oxlint-disable-next-line typescript/no-explicit-any\n implements IterableIterator<any, T, any>, IteratorReturnResult<T>\n{\n readonly value: T;\n readonly done = true;\n\n constructor(value: T) {\n this.value = value;\n }\n\n [Symbol.iterator]() {\n return this;\n }\n\n next() {\n return this;\n }\n}\n\n// oxlint-disable-next-line typescript/no-explicit-any\nexport const emptyIterator: IterableIterator<any, undefined, any> =\n new EmptyIteratorWithReturn(undefined);\n\nexport function makeEmptyIteratorWithReturn<T>(\n value: T,\n // oxlint-disable-next-line typescript/no-explicit-any\n): IterableIterator<any, T, any> {\n return new EmptyIteratorWithReturn(value);\n}\n"],"mappings":";AAAA,UAAiB,cAAiB,GAAG,OAAsB;CACzD,KAAK,MAAM,QAAQ,OACjB,OAAO;AAEX;AAEA,UAAU,WACR,MACA,GACa;CACb,IAAI,QAAQ;CACZ,KAAK,MAAM,KAAK,MACd,IAAI,EAAE,GAAG,OAAO,GACd,MAAM;AAGZ;AAEA,UAAU,QACR,MACA,GACa;CACb,IAAI,QAAQ;CACZ,KAAK,MAAM,KAAK,MACd,MAAM,EAAE,GAAG,OAAO;AAEtB;AAEA,UAAiB,KAAQ,QAAkC;CACzD,MAAM,KAAK,OAAO,OAAO,SAAS,CAAC;CACnC,MAAM,EAAC,UAAS,GAAG,KAAK;CACxB,IAAI,UAAU,KAAA,GACZ,MAAM;CAER,GAAG,SAAS;AACd;AAuBA,IAAM,eALgB,WAAgD,UAC7B,UAKhB,MAAK,IAAI,YAAY,CAAC;AAG/C,IAAM,cAAN,MAAM,YAAsE;CAC1E;CAEA,YAAY,UAAuB;EACjC,KAAK,YAAY,SAAS,OAAO,SAAS,CAAC;CAC7C;CAEA,OAA0B;EACxB,OAAO,KAAK,UAAU,KAAK;CAC7B;CAEA,CAAC,OAAO,YAAoC;EAC1C,OAAO;CACT;CAEA,IAAO,GAA+C;EACpD,OAAO,IAAI,YAAY,QAAQ,MAAM,CAAC,CAAC;CACzC;CAEA,OAAO,GAAqD;EAC1D,OAAO,IAAI,YAAY,WAAW,MAAM,CAAC,CAAC;CAC5C;CAEA,KAAK,GAA8C;EACjD,OAAO,KAAK,MAAM,CAAC;CACrB;AACF;AAEA,SAAgB,aAAgB,MAA2C;CACzE,OAAO,aAAa,IAAI;AAC1B;;;;;;;AAQA,SAAgB,SACd,MACA,SACK;CAEL,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,OAAO;AAC/B;AAEA,SAAgB,KACd,UACA,WACS;CACT,IAAI,QAAQ;CACZ,KAAK,MAAM,QAAQ,UACjB,IAAI,UAAU,MAAM,OAAO,GACzB,OAAO;CAGX,OAAO;AACT;AAEA,IAAM,0BAAN,MAGA;CACE;CACA,OAAgB;CAEhB,YAAY,OAAU;EACpB,KAAK,QAAQ;CACf;CAEA,CAAC,OAAO,YAAY;EAClB,OAAO;CACT;CAEA,OAAO;EACL,OAAO;CACT;AACF;AAGA,IAAa,gBACX,IAAI,wBAAwB,KAAA,CAAS;AAEvC,SAAgB,4BACd,OAE+B;CAC/B,OAAO,IAAI,wBAAwB,KAAK;AAC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging-test-utils.js","names":[],"sources":["../../../../shared/src/logging-test-utils.ts"],"sourcesContent":["import {\n type Context,\n LogContext,\n type LogLevel,\n type LogSink,\n} from '@rocicorp/logger';\n\nexport class TestLogSink implements LogSink {\n messages: [LogLevel, Context | undefined, unknown[]][] = [];\n flushCallCount = 0;\n\n log(level: LogLevel, context: Context | undefined, ...args: unknown[]): void {\n this.messages.push([level, context, args]);\n }\n\n flush() {\n this.flushCallCount++;\n return Promise.resolve();\n }\n}\n\
|
|
1
|
+
{"version":3,"file":"logging-test-utils.js","names":[],"sources":["../../../../shared/src/logging-test-utils.ts"],"sourcesContent":["import {\n type Context,\n LogContext,\n type LogLevel,\n type LogSink,\n} from '@rocicorp/logger';\n\nexport class TestLogSink implements LogSink {\n messages: [LogLevel, Context | undefined, unknown[]][] = [];\n flushCallCount = 0;\n\n log(level: LogLevel, context: Context | undefined, ...args: unknown[]): void {\n this.messages.push([level, context, args]);\n }\n\n flush() {\n this.flushCallCount++;\n return Promise.resolve();\n }\n}\n\nclass SilentLogSink implements LogSink {\n log(_l: LogLevel, _c: Context | undefined, ..._args: unknown[]): void {\n return;\n }\n}\n\nexport function createSilentLogContext() {\n return new LogContext('error', undefined, new SilentLogSink());\n}\n"],"mappings":";;AAqBA,IAAM,gBAAN,MAAuC;CACrC,IAAI,IAAc,IAAyB,GAAG,OAAwB,CAEtE;AACF;AAEA,SAAgB,yBAAyB;CACvC,OAAO,IAAI,WAAW,SAAS,KAAA,GAAW,IAAI,cAAc,CAAC;AAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-types.d.ts","sourceRoot":"","sources":["../../../../shared/src/options-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,aAAa,CAAC;AAEtC,KAAK,kBAAkB,GACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GACd,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GACd,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GACf,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAChB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAChB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAEtB,KAAK,kBAAkB,GACnB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAClB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAClB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GACnB,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GACpB,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GACpB,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AAE1B,KAAK,UAAU,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,UAAU,CAAC;IAEjB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"options-types.d.ts","sourceRoot":"","sources":["../../../../shared/src/options-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { OptionalLogger } from '@rocicorp/logger';
|
|
2
|
-
import type { Config, Group,
|
|
2
|
+
import type { Config, Group, Options } from './options-types.ts';
|
|
3
3
|
import * as v from './valita.ts';
|
|
4
|
-
export type { Config, Group,
|
|
4
|
+
export type { Config, Group, Options };
|
|
5
5
|
/**
|
|
6
6
|
* Converts an Options instance into an "env schema", which is an object with
|
|
7
7
|
* ENV names as its keys, mapped to optional or required string values
|
|
@@ -43,5 +43,4 @@ export declare function parseOptionsAdvanced<T extends Options>(appOptions: T, o
|
|
|
43
43
|
unknown?: string[];
|
|
44
44
|
};
|
|
45
45
|
export declare function flagToEnv(prefix: string, flag: string): string;
|
|
46
|
-
export declare function parseBoolean(optionName: string, input: string): boolean;
|
|
47
46
|
//# sourceMappingURL=options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../shared/src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AASrD,OAAO,KAAK,EACV,MAAM,EACN,KAAK,EACL,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../shared/src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AASrD,OAAO,KAAK,EACV,MAAM,EACN,KAAK,EACL,OAAO,EAER,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC,YAAY,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;AAiFrC;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,SAAK;;cAgC1E;AAUD,MAAM,MAAM,YAAY,GAAG;IACzB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,WAAW,CAAC,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAElD,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAExB,0BAA0B;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,sGAAsG;IACtG,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,iCAAiC;IACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC;CACjD,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,EAC5C,UAAU,EAAE,CAAC,EACb,IAAI,GAAE,YAAiB,GACtB,MAAM,CAAC,CAAC,CAAC,CAEX;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,OAAO,EACpD,UAAU,EAAE,CAAC,EACb,IAAI,GAAE,YAAiB,GACtB;IAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,CA+KtE;AA6FD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|
|
@@ -244,6 +244,6 @@ function showUsage(optionList, description = [], logger = console) {
|
|
|
244
244
|
logger.info?.(commandLineUsage(sections));
|
|
245
245
|
}
|
|
246
246
|
//#endregion
|
|
247
|
-
export { flagToEnv,
|
|
247
|
+
export { flagToEnv, parseOptions, parseOptionsAdvanced };
|
|
248
248
|
|
|
249
249
|
//# sourceMappingURL=options.js.map
|