@rocicorp/zero 0.26.1 → 0.26.2-canary.4
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/_virtual/_@oxc-project_runtime@0.115.0/helpers/usingCtx.js +57 -0
- package/out/_virtual/_rolldown/runtime.js +27 -0
- package/out/analyze-query/src/bin-analyze.js +195 -283
- package/out/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/analyze-query/src/bin-transform.js +35 -40
- package/out/analyze-query/src/bin-transform.js.map +1 -1
- package/out/analyze-query/src/explain-queries.js +11 -13
- package/out/analyze-query/src/explain-queries.js.map +1 -1
- package/out/analyze-query/src/run-ast.js +68 -103
- package/out/analyze-query/src/run-ast.js.map +1 -1
- package/out/ast-to-zql/src/ast-to-zql.js +105 -153
- package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
- package/out/ast-to-zql/src/bin.js +57 -62
- package/out/ast-to-zql/src/bin.js.map +1 -1
- package/out/ast-to-zql/src/format.js +14 -13
- package/out/ast-to-zql/src/format.js.map +1 -1
- package/out/datadog/src/datadog-log-sink.js +148 -213
- package/out/datadog/src/datadog-log-sink.js.map +1 -1
- package/out/otel/src/enabled.js +9 -11
- package/out/otel/src/enabled.js.map +1 -1
- package/out/otel/src/log-options.js +25 -35
- package/out/otel/src/log-options.js.map +1 -1
- package/out/otel/src/maybe-time.js +13 -14
- package/out/otel/src/maybe-time.js.map +1 -1
- package/out/otel/src/span.js +23 -26
- package/out/otel/src/span.js.map +1 -1
- package/out/otel/src/test-log-config.js +11 -10
- package/out/otel/src/test-log-config.js.map +1 -1
- package/out/otel/src/version.js +6 -5
- package/out/otel/src/version.js.map +1 -1
- package/out/replicache/src/async-iterable-to-array.js +8 -9
- package/out/replicache/src/async-iterable-to-array.js.map +1 -1
- package/out/replicache/src/bg-interval.js +28 -35
- package/out/replicache/src/bg-interval.js.map +1 -1
- package/out/replicache/src/btree/diff.js +6 -5
- package/out/replicache/src/btree/diff.js.map +1 -1
- package/out/replicache/src/btree/node.js +281 -372
- package/out/replicache/src/btree/node.js.map +1 -1
- package/out/replicache/src/btree/read.js +155 -256
- package/out/replicache/src/btree/read.js.map +1 -1
- package/out/replicache/src/btree/splice.js +60 -80
- package/out/replicache/src/btree/splice.js.map +1 -1
- package/out/replicache/src/btree/write.js +134 -158
- package/out/replicache/src/btree/write.js.map +1 -1
- package/out/replicache/src/call-default-fetch.js +28 -32
- package/out/replicache/src/call-default-fetch.js.map +1 -1
- package/out/replicache/src/config.js +2 -0
- package/out/replicache/src/connection-loop-delegates.js +31 -33
- package/out/replicache/src/connection-loop-delegates.js.map +1 -1
- package/out/replicache/src/connection-loop.js +174 -240
- package/out/replicache/src/connection-loop.js.map +1 -1
- package/out/replicache/src/cookies.js +22 -32
- package/out/replicache/src/cookies.js.map +1 -1
- package/out/replicache/src/dag/chunk.js +44 -50
- package/out/replicache/src/dag/chunk.js.map +1 -1
- package/out/replicache/src/dag/gc.js +94 -114
- package/out/replicache/src/dag/gc.js.map +1 -1
- package/out/replicache/src/dag/key.js +9 -11
- package/out/replicache/src/dag/key.js.map +1 -1
- package/out/replicache/src/dag/lazy-store.js +458 -510
- package/out/replicache/src/dag/lazy-store.js.map +1 -1
- package/out/replicache/src/dag/store-impl.js +147 -178
- package/out/replicache/src/dag/store-impl.js.map +1 -1
- package/out/replicache/src/dag/store.js +19 -22
- package/out/replicache/src/dag/store.js.map +1 -1
- package/out/replicache/src/dag/visitor.js +23 -21
- package/out/replicache/src/dag/visitor.js.map +1 -1
- package/out/replicache/src/db/commit.js +209 -283
- package/out/replicache/src/db/commit.js.map +1 -1
- package/out/replicache/src/db/index.js +79 -122
- package/out/replicache/src/db/index.js.map +1 -1
- package/out/replicache/src/db/read.js +44 -60
- package/out/replicache/src/db/read.js.map +1 -1
- package/out/replicache/src/db/rebase.js +22 -77
- package/out/replicache/src/db/rebase.js.map +1 -1
- package/out/replicache/src/db/write.js +162 -296
- package/out/replicache/src/db/write.js.map +1 -1
- package/out/replicache/src/deleted-clients.js +59 -87
- package/out/replicache/src/deleted-clients.js.map +1 -1
- package/out/replicache/src/error-responses.js +18 -26
- package/out/replicache/src/error-responses.js.map +1 -1
- package/out/replicache/src/expo-sqlite.js +2 -0
- package/out/replicache/src/frozen-json.js +74 -108
- package/out/replicache/src/frozen-json.js.map +1 -1
- package/out/replicache/src/get-default-puller.js +34 -46
- package/out/replicache/src/get-default-puller.js.map +1 -1
- package/out/replicache/src/get-default-pusher.js +25 -33
- package/out/replicache/src/get-default-pusher.js.map +1 -1
- package/out/replicache/src/get-kv-store-provider.js +18 -20
- package/out/replicache/src/get-kv-store-provider.js.map +1 -1
- package/out/replicache/src/hash.js +29 -29
- package/out/replicache/src/hash.js.map +1 -1
- package/out/replicache/src/http-request-info.js +9 -8
- package/out/replicache/src/http-request-info.js.map +1 -1
- package/out/replicache/src/impl.js +2 -0
- package/out/replicache/src/index-defs.js +17 -28
- package/out/replicache/src/index-defs.js.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js +52 -50
- package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js +71 -68
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
- package/out/replicache/src/kv/idb-store.js +144 -168
- package/out/replicache/src/kv/idb-store.js.map +1 -1
- package/out/replicache/src/kv/mem-store.js +57 -45
- package/out/replicache/src/kv/mem-store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/store.js +56 -62
- package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/types.d.ts.map +1 -1
- package/out/replicache/src/kv/op-sqlite/types.js +7 -6
- package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
- package/out/replicache/src/kv/read-impl.js +26 -25
- package/out/replicache/src/kv/read-impl.js.map +1 -1
- package/out/replicache/src/kv/sqlite-store.js +194 -207
- package/out/replicache/src/kv/sqlite-store.js.map +1 -1
- package/out/replicache/src/kv/throw-if-closed.js +12 -19
- package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
- package/out/replicache/src/kv/write-impl-base.js +44 -56
- package/out/replicache/src/kv/write-impl-base.js.map +1 -1
- package/out/replicache/src/kv/write-impl.js +22 -26
- package/out/replicache/src/kv/write-impl.js.map +1 -1
- package/out/replicache/src/lazy.js +10 -11
- package/out/replicache/src/lazy.js.map +1 -1
- package/out/replicache/src/log-options.js +14 -7
- package/out/replicache/src/log-options.js.map +1 -1
- package/out/replicache/src/make-idb-name.js +14 -9
- package/out/replicache/src/make-idb-name.js.map +1 -1
- package/out/replicache/src/mutation-recovery.js +12 -0
- package/out/replicache/src/mutation-recovery.js.map +1 -0
- package/out/replicache/src/new-client-channel.js +34 -42
- package/out/replicache/src/new-client-channel.js.map +1 -1
- package/out/replicache/src/on-persist-channel.js +26 -29
- package/out/replicache/src/on-persist-channel.js.map +1 -1
- package/out/replicache/src/op-sqlite.js +2 -0
- package/out/replicache/src/patch-operation.js +27 -36
- package/out/replicache/src/patch-operation.js.map +1 -1
- package/out/replicache/src/pending-mutations.js +14 -12
- package/out/replicache/src/pending-mutations.js.map +1 -1
- package/out/replicache/src/persist/client-gc.js +36 -51
- package/out/replicache/src/persist/client-gc.js.map +1 -1
- package/out/replicache/src/persist/client-group-gc.js +29 -36
- package/out/replicache/src/persist/client-group-gc.js.map +1 -1
- package/out/replicache/src/persist/client-groups.js +80 -154
- package/out/replicache/src/persist/client-groups.js.map +1 -1
- package/out/replicache/src/persist/clients.js +212 -307
- package/out/replicache/src/persist/clients.js.map +1 -1
- package/out/replicache/src/persist/collect-idb-databases.js +109 -171
- package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
- package/out/replicache/src/persist/gather-mem-only-visitor.js +23 -24
- package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
- package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -33
- package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
- package/out/replicache/src/persist/heartbeat.js +31 -41
- package/out/replicache/src/persist/heartbeat.js.map +1 -1
- package/out/replicache/src/persist/idb-databases-store-db-name.js +9 -12
- package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -1
- package/out/replicache/src/persist/idb-databases-store.js +78 -97
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
- package/out/replicache/src/persist/make-client-id.js +13 -9
- package/out/replicache/src/persist/make-client-id.js.map +1 -1
- package/out/replicache/src/persist/persist.js +113 -174
- package/out/replicache/src/persist/persist.js.map +1 -1
- package/out/replicache/src/persist/refresh.js +94 -183
- package/out/replicache/src/persist/refresh.js.map +1 -1
- package/out/replicache/src/process-scheduler.js +122 -143
- package/out/replicache/src/process-scheduler.js.map +1 -1
- package/out/replicache/src/pusher.js +21 -26
- package/out/replicache/src/pusher.js.map +1 -1
- package/out/replicache/src/replicache-impl.js +844 -1184
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/report-error.js +9 -6
- package/out/replicache/src/report-error.js.map +1 -1
- package/out/replicache/src/request-idle.js +13 -11
- package/out/replicache/src/request-idle.js.map +1 -1
- package/out/replicache/src/scan-iterator.d.ts.map +1 -1
- package/out/replicache/src/scan-iterator.js +108 -135
- package/out/replicache/src/scan-iterator.js.map +1 -1
- package/out/replicache/src/scan-options.js +33 -39
- package/out/replicache/src/scan-options.js.map +1 -1
- package/out/replicache/src/set-interval-with-signal.js +11 -10
- package/out/replicache/src/set-interval-with-signal.js.map +1 -1
- package/out/replicache/src/sqlite.js +2 -0
- package/out/replicache/src/subscriptions.js +222 -338
- package/out/replicache/src/subscriptions.js.map +1 -1
- package/out/replicache/src/sync/diff.js +52 -65
- package/out/replicache/src/sync/diff.js.map +1 -1
- package/out/replicache/src/sync/ids.js +8 -9
- package/out/replicache/src/sync/ids.js.map +1 -1
- package/out/replicache/src/sync/patch.js +34 -45
- package/out/replicache/src/sync/patch.js.map +1 -1
- package/out/replicache/src/sync/pull-error.js +15 -15
- package/out/replicache/src/sync/pull-error.js.map +1 -1
- package/out/replicache/src/sync/pull.js +145 -283
- package/out/replicache/src/sync/pull.js.map +1 -1
- package/out/replicache/src/sync/push.js +64 -79
- package/out/replicache/src/sync/push.js.map +1 -1
- package/out/replicache/src/sync/request-id.js +23 -15
- package/out/replicache/src/sync/request-id.js.map +1 -1
- package/out/replicache/src/sync/sync-head-name.js +6 -5
- package/out/replicache/src/sync/sync-head-name.js.map +1 -1
- package/out/replicache/src/to-error.js +7 -8
- package/out/replicache/src/to-error.js.map +1 -1
- package/out/replicache/src/transaction-closed-error.js +15 -15
- package/out/replicache/src/transaction-closed-error.js.map +1 -1
- package/out/replicache/src/transactions.js +120 -140
- package/out/replicache/src/transactions.js.map +1 -1
- package/out/replicache/src/version.js +9 -5
- package/out/replicache/src/version.js.map +1 -1
- package/out/replicache/src/with-transactions.js +23 -20
- package/out/replicache/src/with-transactions.js.map +1 -1
- package/out/shared/src/abort-error.js +7 -6
- package/out/shared/src/abort-error.js.map +1 -1
- package/out/shared/src/arrays.js +35 -42
- package/out/shared/src/arrays.js.map +1 -1
- package/out/shared/src/asserts.js +21 -45
- package/out/shared/src/asserts.js.map +1 -1
- package/out/shared/src/bigint-json.js +42 -38
- package/out/shared/src/bigint-json.js.map +1 -1
- package/out/shared/src/binary-search.js +27 -18
- package/out/shared/src/binary-search.js.map +1 -1
- package/out/shared/src/broadcast-channel.js +20 -23
- package/out/shared/src/broadcast-channel.js.map +1 -1
- package/out/shared/src/browser-env.js +11 -17
- package/out/shared/src/browser-env.js.map +1 -1
- package/out/shared/src/btree-set.js +419 -481
- package/out/shared/src/btree-set.js.map +1 -1
- package/out/shared/src/cache.js +43 -36
- package/out/shared/src/cache.js.map +1 -1
- package/out/shared/src/centroid.js +24 -26
- package/out/shared/src/centroid.js.map +1 -1
- package/out/shared/src/config.js +6 -6
- package/out/shared/src/config.js.map +1 -1
- package/out/shared/src/custom-key-map.js +54 -58
- package/out/shared/src/custom-key-map.js.map +1 -1
- package/out/shared/src/custom-key-set.js +53 -51
- package/out/shared/src/custom-key-set.js.map +1 -1
- package/out/shared/src/deep-clone.js +30 -41
- package/out/shared/src/deep-clone.js.map +1 -1
- package/out/shared/src/deep-merge.js +25 -24
- package/out/shared/src/deep-merge.js.map +1 -1
- package/out/shared/src/document-visible.js +63 -70
- package/out/shared/src/document-visible.js.map +1 -1
- package/out/shared/src/dotenv.js +7 -3
- package/out/shared/src/dotenv.js.map +1 -1
- package/out/shared/src/error.js +43 -64
- package/out/shared/src/error.js.map +1 -1
- package/out/shared/src/has-own.js +6 -5
- package/out/shared/src/has-own.js.map +1 -1
- package/out/shared/src/hash.js +15 -14
- package/out/shared/src/hash.js.map +1 -1
- package/out/shared/src/iterables.js +34 -47
- package/out/shared/src/iterables.js.map +1 -1
- package/out/shared/src/json-schema.js +25 -30
- package/out/shared/src/json-schema.js.map +1 -1
- package/out/shared/src/json.js +90 -129
- package/out/shared/src/json.js.map +1 -1
- package/out/shared/src/logging-test-utils.js +9 -11
- package/out/shared/src/logging-test-utils.js.map +1 -1
- package/out/shared/src/logging.js +75 -95
- package/out/shared/src/logging.js.map +1 -1
- package/out/shared/src/must.js +7 -8
- package/out/shared/src/must.js.map +1 -1
- package/out/shared/src/navigator.js +6 -5
- package/out/shared/src/navigator.js.map +1 -1
- package/out/shared/src/object-traversal.js +23 -23
- package/out/shared/src/object-traversal.js.map +1 -1
- package/out/shared/src/objects.js +15 -18
- package/out/shared/src/objects.js.map +1 -1
- package/out/shared/src/options.js +225 -302
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/parse-big-int.js +12 -11
- package/out/shared/src/parse-big-int.js.map +1 -1
- package/out/shared/src/promise-race.js +21 -17
- package/out/shared/src/promise-race.js.map +1 -1
- package/out/shared/src/queue.js +124 -124
- package/out/shared/src/queue.js.map +1 -1
- package/out/shared/src/rand.js +13 -7
- package/out/shared/src/rand.js.map +1 -1
- package/out/shared/src/random-uint64.js +8 -7
- package/out/shared/src/random-uint64.js.map +1 -1
- package/out/shared/src/random-values.js +8 -11
- package/out/shared/src/random-values.js.map +1 -1
- package/out/shared/src/record-proxy.js +68 -57
- package/out/shared/src/record-proxy.js.map +1 -1
- package/out/shared/src/resolved-promises.js +9 -11
- package/out/shared/src/resolved-promises.js.map +1 -1
- package/out/shared/src/sentinels.js +9 -12
- package/out/shared/src/sentinels.js.map +1 -1
- package/out/shared/src/set-utils.js +41 -63
- package/out/shared/src/set-utils.js.map +1 -1
- package/out/shared/src/size-of-value.js +55 -51
- package/out/shared/src/size-of-value.js.map +1 -1
- package/out/shared/src/sleep.js +50 -45
- package/out/shared/src/sleep.js.map +1 -1
- package/out/shared/src/string-compare.js +8 -11
- package/out/shared/src/string-compare.js.map +1 -1
- package/out/shared/src/subscribable.js +34 -33
- package/out/shared/src/subscribable.js.map +1 -1
- package/out/shared/src/tdigest-schema.js +11 -7
- package/out/shared/src/tdigest-schema.js.map +1 -1
- package/out/shared/src/tdigest.js +197 -270
- package/out/shared/src/tdigest.js.map +1 -1
- package/out/shared/src/valita.js +145 -174
- package/out/shared/src/valita.js.map +1 -1
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +238 -468
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/z2s/src/sql.d.ts +0 -1
- package/out/z2s/src/sql.d.ts.map +1 -1
- package/out/z2s/src/sql.js +149 -194
- package/out/z2s/src/sql.js.map +1 -1
- package/out/zero/package.js +194 -0
- package/out/zero/package.js.map +1 -0
- package/out/zero/src/adapters/drizzle.js +1 -6
- package/out/zero/src/adapters/pg.js +1 -6
- package/out/zero/src/adapters/postgresjs.js +1 -6
- package/out/zero/src/adapters/prisma.js +1 -5
- package/out/zero/src/analyze-query.js +1 -1
- package/out/zero/src/ast-to-zql.js +1 -1
- package/out/zero/src/bindings.js +6 -21
- package/out/zero/src/build-schema.js +5 -1
- package/out/zero/src/build-schema.js.map +1 -1
- package/out/zero/src/change-protocol/v0.js +3 -5
- package/out/zero/src/cli.js +2 -2
- package/out/zero/src/deploy-permissions.js +1 -1
- package/out/zero/src/expo-sqlite.js +2 -4
- package/out/zero/src/op-sqlite.js +2 -4
- package/out/zero/src/pg.js +2 -20
- package/out/zero/src/react-native.js +16 -12
- package/out/zero/src/react-native.js.map +1 -1
- package/out/zero/src/react.js +3 -12
- package/out/zero/src/server/runner/main.js +2 -0
- package/out/zero/src/server.js +2 -17
- package/out/zero/src/solid.js +3 -12
- package/out/zero/src/sqlite.js +2 -6
- package/out/zero/src/transform-query.js +1 -1
- package/out/zero/src/zero-cache-dev.js +124 -151
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero/src/zero-out.js +9 -6
- package/out/zero/src/zero-out.js.map +1 -1
- package/out/zero/src/zero.js +6 -55
- package/out/zero/src/zqlite.js +2 -7
- package/out/zero-cache/src/auth/auth.js +138 -172
- package/out/zero-cache/src/auth/auth.js.map +1 -1
- package/out/zero-cache/src/auth/jwt.js +25 -33
- package/out/zero-cache/src/auth/jwt.js.map +1 -1
- package/out/zero-cache/src/auth/load-permissions.js +54 -62
- package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +70 -80
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +284 -432
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/network.js +31 -45
- package/out/zero-cache/src/config/network.js.map +1 -1
- package/out/zero-cache/src/config/normalize.js +81 -83
- package/out/zero-cache/src/config/normalize.js.map +1 -1
- package/out/zero-cache/src/config/server-context.js +32 -29
- package/out/zero-cache/src/config/server-context.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +753 -833
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.js +183 -230
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.js +93 -99
- package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
- package/out/zero-cache/src/db/create.js +27 -29
- package/out/zero-cache/src/db/create.js.map +1 -1
- package/out/zero-cache/src/db/delete-lite-db.js +11 -7
- package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js +118 -158
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +110 -178
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.js +82 -151
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/mode-enum.js +8 -9
- package/out/zero-cache/src/db/mode-enum.js.map +1 -1
- package/out/zero-cache/src/db/pg-copy.js +56 -54
- package/out/zero-cache/src/db/pg-copy.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js +74 -110
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
- package/out/zero-cache/src/db/pg-type-parser.js +19 -36
- package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
- package/out/zero-cache/src/db/run-transaction.js +19 -20
- package/out/zero-cache/src/db/run-transaction.js.map +1 -1
- package/out/zero-cache/src/db/specs.js +42 -78
- package/out/zero-cache/src/db/specs.js.map +1 -1
- package/out/zero-cache/src/db/statements.js +52 -59
- package/out/zero-cache/src/db/statements.js.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +376 -400
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
- package/out/zero-cache/src/db/warmup.js +13 -24
- package/out/zero-cache/src/db/warmup.js.map +1 -1
- package/out/zero-cache/src/observability/events.js +89 -99
- package/out/zero-cache/src/observability/events.js.map +1 -1
- package/out/zero-cache/src/observability/metrics.js +30 -54
- package/out/zero-cache/src/observability/metrics.js.map +1 -1
- package/out/zero-cache/src/scripts/decommission.js +42 -47
- package/out/zero-cache/src/scripts/decommission.js.map +1 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +106 -144
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.js +86 -107
- package/out/zero-cache/src/scripts/permissions.js.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +306 -440
- package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +57 -130
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/inspector-delegate.js +89 -100
- package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
- package/out/zero-cache/src/server/logging.js +18 -26
- package/out/zero-cache/src/server/logging.js.map +1 -1
- package/out/zero-cache/src/server/main.js +85 -142
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/mutator.js +16 -13
- package/out/zero-cache/src/server/mutator.js.map +1 -1
- package/out/zero-cache/src/server/otel-diag-logger.js +42 -49
- package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
- package/out/zero-cache/src/server/otel-log-sink.js +34 -44
- package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
- package/out/zero-cache/src/server/otel-start.js +43 -51
- package/out/zero-cache/src/server/otel-start.js.map +1 -1
- package/out/zero-cache/src/server/priority-op.js +27 -25
- package/out/zero-cache/src/server/priority-op.js.map +1 -1
- package/out/zero-cache/src/server/reaper.js +32 -43
- package/out/zero-cache/src/server/reaper.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +41 -57
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/main.js +7 -8
- package/out/zero-cache/src/server/runner/main.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +56 -52
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/runner/runtime.js +26 -32
- package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.js +22 -27
- package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/syncer.js +79 -148
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.js +84 -113
- package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/worker-urls.d.ts +2 -1
- package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
- package/out/zero-cache/src/server/worker-urls.js +14 -18
- package/out/zero-cache/src/server/worker-urls.js.map +1 -1
- package/out/zero-cache/src/server/write-worker.js +2 -0
- package/out/zero-cache/src/services/analyze.js +61 -130
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js +420 -419
- 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 +111 -114
- 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-schema.js +80 -148
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +154 -216
- 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-metadata.js +11 -14
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +168 -212
- 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 +672 -892
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js +19 -23
- package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +258 -411
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +59 -65
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +218 -247
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +100 -142
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.js +17 -19
- package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +88 -98
- 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/init.js +96 -177
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.js +69 -107
- package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +151 -212
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js +22 -53
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.js +24 -12
- package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js +180 -290
- package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +21 -33
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/json.js +7 -18
- package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/path.js +24 -5
- package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js +25 -19
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +24 -16
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current.js +51 -46
- package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/mod.js +2 -0
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +165 -171
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +163 -169
- 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 +154 -221
- 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.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +340 -299
- 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 +17 -24
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +84 -103
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js +49 -43
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +61 -89
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +20 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +131 -109
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.js +26 -28
- package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +434 -513
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +142 -155
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/heapz.js +18 -20
- package/out/zero-cache/src/services/heapz.js.map +1 -1
- package/out/zero-cache/src/services/http-service.js +59 -57
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +182 -214
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +102 -81
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +144 -205
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/error.js +10 -14
- package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +166 -264
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js +372 -487
- package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +483 -592
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +4 -2
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +118 -143
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.js +52 -28
- package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.js +105 -128
- package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +2 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js +32 -34
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.js +101 -133
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js +145 -174
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/constants.js +11 -5
- package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +56 -107
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/table-metadata.js +81 -66
- package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +69 -0
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/write-worker-client.js +96 -0
- package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
- package/out/zero-cache/src/services/replicator/write-worker.js +68 -0
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -0
- package/out/zero-cache/src/services/run-ast.js +79 -120
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/runner.js +39 -41
- package/out/zero-cache/src/services/runner.js.map +1 -1
- package/out/zero-cache/src/services/running-state.js +129 -134
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/statz.js +139 -200
- package/out/zero-cache/src/services/statz.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +46 -49
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +257 -299
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.js +52 -82
- package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +85 -107
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +604 -757
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +631 -739
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +60 -40
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +95 -178
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +571 -722
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js +246 -257
- 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 +59 -45
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js +121 -189
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +138 -263
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +322 -335
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/tracer.js +7 -6
- package/out/zero-cache/src/services/view-syncer/tracer.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/ttl-clock.js +9 -11
- package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +1067 -1603
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/error-with-level.js +19 -25
- package/out/zero-cache/src/types/error-with-level.js.map +1 -1
- package/out/zero-cache/src/types/http.js +17 -26
- package/out/zero-cache/src/types/http.js.map +1 -1
- package/out/zero-cache/src/types/lexi-version.js +28 -42
- package/out/zero-cache/src/types/lexi-version.js.map +1 -1
- package/out/zero-cache/src/types/lite.js +101 -121
- package/out/zero-cache/src/types/lite.js.map +1 -1
- package/out/zero-cache/src/types/names.js +6 -5
- package/out/zero-cache/src/types/names.js.map +1 -1
- package/out/zero-cache/src/types/pg-data-type.d.ts +1 -0
- package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg-data-type.js +58 -73
- package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
- package/out/zero-cache/src/types/pg-types.js +12 -19
- package/out/zero-cache/src/types/pg-types.js.map +1 -1
- package/out/zero-cache/src/types/pg.js +144 -218
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/types/processes.js +95 -90
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/profiler.js +32 -27
- package/out/zero-cache/src/types/profiler.js.map +1 -1
- package/out/zero-cache/src/types/row-key.js +42 -30
- package/out/zero-cache/src/types/row-key.js.map +1 -1
- package/out/zero-cache/src/types/shards.js +36 -45
- package/out/zero-cache/src/types/shards.js.map +1 -1
- package/out/zero-cache/src/types/sql.js +20 -9
- package/out/zero-cache/src/types/sql.js.map +1 -1
- package/out/zero-cache/src/types/state-version.js +17 -23
- package/out/zero-cache/src/types/state-version.js.map +1 -1
- package/out/zero-cache/src/types/streams.js +234 -270
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/strings.js +10 -13
- package/out/zero-cache/src/types/strings.js.map +1 -1
- package/out/zero-cache/src/types/subscription.js +266 -226
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/types/url-params.js +30 -39
- package/out/zero-cache/src/types/url-params.js.map +1 -1
- package/out/zero-cache/src/types/websocket-handoff.js +62 -75
- package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
- package/out/zero-cache/src/types/ws.js +43 -53
- package/out/zero-cache/src/types/ws.js.map +1 -1
- package/out/zero-cache/src/workers/connect-params.js +42 -43
- package/out/zero-cache/src/workers/connect-params.js.map +1 -1
- package/out/zero-cache/src/workers/connection.js +213 -282
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/mutator.js +22 -21
- package/out/zero-cache/src/workers/mutator.js.map +1 -1
- package/out/zero-cache/src/workers/replicator.d.ts +7 -0
- package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/workers/replicator.js +92 -97
- package/out/zero-cache/src/workers/replicator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +121 -203
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +147 -201
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.js +178 -187
- package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/bindings.js +11 -0
- package/out/zero-client/src/client/client-error-kind-enum.js +18 -29
- package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -1
- package/out/zero-client/src/client/connection-manager.js +291 -346
- package/out/zero-client/src/client/connection-manager.js.map +1 -1
- package/out/zero-client/src/client/connection-status-enum.js +20 -15
- package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
- package/out/zero-client/src/client/connection.js +92 -110
- package/out/zero-client/src/client/connection.js.map +1 -1
- package/out/zero-client/src/client/context.js +84 -100
- package/out/zero-client/src/client/context.js.map +1 -1
- package/out/zero-client/src/client/crud-impl.js +56 -88
- package/out/zero-client/src/client/crud-impl.js.map +1 -1
- package/out/zero-client/src/client/crud.js +127 -129
- package/out/zero-client/src/client/crud.js.map +1 -1
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.js +50 -74
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.js +72 -93
- package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/enable-analytics.js +8 -16
- package/out/zero-client/src/client/enable-analytics.js.map +1 -1
- package/out/zero-client/src/client/error.js +118 -133
- package/out/zero-client/src/client/error.js.map +1 -1
- package/out/zero-client/src/client/http-string.js +7 -7
- package/out/zero-client/src/client/http-string.js.map +1 -1
- package/out/zero-client/src/client/inspector/client-group.js +21 -26
- package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
- package/out/zero-client/src/client/inspector/client.js +23 -26
- package/out/zero-client/src/client/inspector/client.js.map +1 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js +72 -73
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
- package/out/zero-client/src/client/inspector/inspector.js +46 -51
- package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.js +132 -192
- package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
- package/out/zero-client/src/client/inspector/query.js +72 -77
- package/out/zero-client/src/client/inspector/query.js.map +1 -1
- package/out/zero-client/src/client/ivm-branch.js +118 -145
- package/out/zero-client/src/client/ivm-branch.js.map +1 -1
- package/out/zero-client/src/client/keys.js +15 -31
- package/out/zero-client/src/client/keys.js.map +1 -1
- package/out/zero-client/src/client/log-options.js +43 -57
- package/out/zero-client/src/client/log-options.js.map +1 -1
- package/out/zero-client/src/client/make-mutate-property.js +46 -29
- package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js +80 -96
- package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
- package/out/zero-client/src/client/metric-name-enum.js +11 -15
- package/out/zero-client/src/client/metric-name-enum.js.map +1 -1
- package/out/zero-client/src/client/metrics.js +210 -237
- package/out/zero-client/src/client/metrics.js.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.js +264 -354
- package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.js +122 -151
- package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
- package/out/zero-client/src/client/options.js +7 -10
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/query-manager.js +305 -373
- package/out/zero-client/src/client/query-manager.js.map +1 -1
- package/out/zero-client/src/client/reload-error-handler.js +80 -101
- package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
- package/out/zero-client/src/client/server-option.js +30 -59
- package/out/zero-client/src/client/server-option.js.map +1 -1
- package/out/zero-client/src/client/update-needed-reason-type-enum.js +27 -9
- package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -1
- package/out/zero-client/src/client/version.js +9 -5
- package/out/zero-client/src/client/version.js.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js +205 -293
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
- package/out/zero-client/src/client/zero-rep.js +61 -68
- package/out/zero-client/src/client/zero-rep.js.map +1 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +1367 -1834
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.js +21 -0
- package/out/zero-client/src/util/nanoid.js +13 -18
- package/out/zero-client/src/util/nanoid.js.map +1 -1
- package/out/zero-client/src/util/socket.js +6 -5
- package/out/zero-client/src/util/socket.js.map +1 -1
- package/out/zero-pg/src/mod.js +10 -0
- package/out/zero-protocol/src/analyze-query-result.js +108 -148
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/application-error.js +36 -34
- package/out/zero-protocol/src/application-error.js.map +1 -1
- package/out/zero-protocol/src/ast.js +236 -309
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.js +8 -13
- package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
- package/out/zero-protocol/src/client-schema.js +21 -42
- package/out/zero-protocol/src/client-schema.js.map +1 -1
- package/out/zero-protocol/src/close-connection.js +20 -12
- package/out/zero-protocol/src/close-connection.js.map +1 -1
- package/out/zero-protocol/src/connect.js +37 -52
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/custom-queries.js +34 -65
- package/out/zero-protocol/src/custom-queries.js.map +1 -1
- package/out/zero-protocol/src/data.js +6 -9
- package/out/zero-protocol/src/data.js.map +1 -1
- package/out/zero-protocol/src/delete-clients.js +11 -17
- package/out/zero-protocol/src/delete-clients.js.map +1 -1
- package/out/zero-protocol/src/down.js +11 -23
- package/out/zero-protocol/src/down.js.map +1 -1
- package/out/zero-protocol/src/error-kind-enum.js +24 -41
- package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
- package/out/zero-protocol/src/error-origin-enum.js +8 -9
- package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
- package/out/zero-protocol/src/error-reason-enum.js +12 -17
- package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
- package/out/zero-protocol/src/error.js +76 -152
- package/out/zero-protocol/src/error.js.map +1 -1
- package/out/zero-protocol/src/inspect-down.js +51 -74
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/inspect-up.js +28 -46
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/mutation-id.js +9 -9
- package/out/zero-protocol/src/mutation-id.js.map +1 -1
- package/out/zero-protocol/src/mutation-type-enum.js +7 -7
- package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
- package/out/zero-protocol/src/mutations-patch.js +21 -16
- package/out/zero-protocol/src/mutations-patch.js.map +1 -1
- package/out/zero-protocol/src/ping.js +8 -9
- package/out/zero-protocol/src/ping.js.map +1 -1
- package/out/zero-protocol/src/poke.js +53 -59
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/pong.js +8 -9
- package/out/zero-protocol/src/pong.js.map +1 -1
- package/out/zero-protocol/src/primary-key.js +9 -19
- package/out/zero-protocol/src/primary-key.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +5 -11
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/pull.js +16 -28
- package/out/zero-protocol/src/pull.js.map +1 -1
- package/out/zero-protocol/src/push.js +162 -209
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.js +22 -30
- package/out/zero-protocol/src/queries-patch.js.map +1 -1
- package/out/zero-protocol/src/query-hash.js +14 -17
- package/out/zero-protocol/src/query-hash.js.map +1 -1
- package/out/zero-protocol/src/row-patch.js +23 -30
- package/out/zero-protocol/src/row-patch.js.map +1 -1
- package/out/zero-protocol/src/up.js +11 -22
- package/out/zero-protocol/src/up.js.map +1 -1
- package/out/zero-protocol/src/update-auth.js +8 -13
- package/out/zero-protocol/src/update-auth.js.map +1 -1
- package/out/zero-protocol/src/version.js +8 -9
- package/out/zero-protocol/src/version.js.map +1 -1
- package/out/zero-react/src/bindings.js +12 -0
- package/out/zero-react/src/mod.js +5 -0
- package/out/zero-react/src/use-connection-state.js +14 -11
- package/out/zero-react/src/use-connection-state.js.map +1 -1
- package/out/zero-react/src/use-query.js +283 -281
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/use-zero-online.js +17 -11
- package/out/zero-react/src/use-zero-online.js.map +1 -1
- package/out/zero-react/src/zero-provider.js +53 -69
- package/out/zero-react/src/zero-provider.js.map +1 -1
- package/out/zero-react/src/zero.js +22 -0
- package/out/zero-schema/src/builder/relationship-builder.js +25 -21
- package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.js +51 -79
- package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +99 -116
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-schema/src/compiled-permissions.js +21 -25
- package/out/zero-schema/src/compiled-permissions.js.map +1 -1
- package/out/zero-schema/src/name-mapper.js +31 -47
- package/out/zero-schema/src/name-mapper.js.map +1 -1
- package/out/zero-schema/src/permissions.js +94 -181
- package/out/zero-schema/src/permissions.js.map +1 -1
- package/out/zero-schema/src/schema-config.js +26 -32
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
- package/out/zero-server/src/adapters/drizzle.js +79 -76
- package/out/zero-server/src/adapters/drizzle.js.map +1 -1
- package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
- package/out/zero-server/src/adapters/pg.js +79 -55
- package/out/zero-server/src/adapters/pg.js.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.js +66 -40
- package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
- package/out/zero-server/src/adapters/prisma.d.ts.map +1 -1
- package/out/zero-server/src/adapters/prisma.js +75 -55
- package/out/zero-server/src/adapters/prisma.js.map +1 -1
- package/out/zero-server/src/custom.d.ts.map +1 -1
- package/out/zero-server/src/custom.js +188 -265
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/logging.js +6 -5
- package/out/zero-server/src/logging.js.map +1 -1
- package/out/zero-server/src/mod.js +8 -0
- package/out/zero-server/src/pg-query-executor.js +14 -17
- package/out/zero-server/src/pg-query-executor.js.map +1 -1
- package/out/zero-server/src/process-mutations.js +293 -365
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/push-processor.js +33 -49
- package/out/zero-server/src/push-processor.js.map +1 -1
- package/out/zero-server/src/queries/process-queries.js +106 -96
- package/out/zero-server/src/queries/process-queries.js.map +1 -1
- package/out/zero-server/src/schema.js +98 -144
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-server/src/zql-database.d.ts.map +1 -1
- package/out/zero-server/src/zql-database.js +54 -69
- package/out/zero-server/src/zql-database.js.map +1 -1
- package/out/zero-solid/src/bindings.js +12 -0
- package/out/zero-solid/src/mod.js +5 -0
- package/out/zero-solid/src/solid-view.js +135 -227
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/use-connection-state.js +18 -14
- package/out/zero-solid/src/use-connection-state.js.map +1 -1
- package/out/zero-solid/src/use-query.js +55 -100
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/use-zero-online.js +18 -12
- package/out/zero-solid/src/use-zero-online.js.map +1 -1
- package/out/zero-solid/src/use-zero.js +65 -77
- package/out/zero-solid/src/use-zero.js.map +1 -1
- package/out/zero-solid/src/zero.js +22 -0
- package/out/zero-types/src/format.js +8 -7
- package/out/zero-types/src/format.js.map +1 -1
- package/out/zero-types/src/name-mapper.js +34 -47
- package/out/zero-types/src/name-mapper.js.map +1 -1
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +315 -476
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/debug-delegate.js +69 -74
- package/out/zql/src/builder/debug-delegate.js.map +1 -1
- package/out/zql/src/builder/filter.js +116 -140
- package/out/zql/src/builder/filter.js.map +1 -1
- package/out/zql/src/builder/like.js +41 -46
- package/out/zql/src/builder/like.js.map +1 -1
- package/out/zql/src/error.js +10 -9
- package/out/zql/src/error.js.map +1 -1
- package/out/zql/src/ivm/array-view.js +89 -91
- package/out/zql/src/ivm/array-view.js.map +1 -1
- package/out/zql/src/ivm/constraint.js +65 -74
- package/out/zql/src/ivm/constraint.js.map +1 -1
- package/out/zql/src/ivm/data.js +61 -48
- package/out/zql/src/ivm/data.js.map +1 -1
- package/out/zql/src/ivm/exists.js +164 -213
- package/out/zql/src/ivm/exists.js.map +1 -1
- package/out/zql/src/ivm/fan-in.js +62 -59
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/fan-out.js +52 -61
- package/out/zql/src/ivm/fan-out.js.map +1 -1
- package/out/zql/src/ivm/filter-operators.js +91 -96
- package/out/zql/src/ivm/filter-operators.js.map +1 -1
- package/out/zql/src/ivm/filter-push.js +22 -26
- package/out/zql/src/ivm/filter-push.js.map +1 -1
- package/out/zql/src/ivm/filter.js +41 -35
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/flipped-join.js +282 -391
- package/out/zql/src/ivm/flipped-join.js.map +1 -1
- package/out/zql/src/ivm/join-utils.js +85 -115
- package/out/zql/src/ivm/join-utils.js.map +1 -1
- package/out/zql/src/ivm/join.js +162 -231
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +21 -25
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
- package/out/zql/src/ivm/memory-source.js +364 -503
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/memory-storage.js +33 -34
- package/out/zql/src/ivm/memory-storage.js.map +1 -1
- package/out/zql/src/ivm/operator.js +13 -15
- package/out/zql/src/ivm/operator.js.map +1 -1
- package/out/zql/src/ivm/push-accumulated.js +267 -270
- package/out/zql/src/ivm/push-accumulated.js.map +1 -1
- package/out/zql/src/ivm/skip.js +91 -104
- package/out/zql/src/ivm/skip.js.map +1 -1
- package/out/zql/src/ivm/stream.js +10 -10
- package/out/zql/src/ivm/stream.js.map +1 -1
- package/out/zql/src/ivm/take.js +422 -569
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/union-fan-in.js +157 -231
- package/out/zql/src/ivm/union-fan-in.js.map +1 -1
- package/out/zql/src/ivm/union-fan-out.js +38 -43
- package/out/zql/src/ivm/union-fan-out.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +166 -255
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/mutate/crud.js +35 -34
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zql/src/mutate/custom.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.js +7 -11
- package/out/zql/src/mutate/custom.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js +67 -71
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/mutate/mutator.js +26 -25
- package/out/zql/src/mutate/mutator.js.map +1 -1
- package/out/zql/src/planner/planner-builder.js +134 -239
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/planner/planner-connection.js +222 -212
- package/out/zql/src/planner/planner-connection.js.map +1 -1
- package/out/zql/src/planner/planner-constraint.js +15 -7
- package/out/zql/src/planner/planner-constraint.js.map +1 -1
- package/out/zql/src/planner/planner-debug.js +199 -224
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/planner/planner-fan-in.js +146 -162
- package/out/zql/src/planner/planner-fan-in.js.map +1 -1
- package/out/zql/src/planner/planner-fan-out.js +62 -74
- package/out/zql/src/planner/planner-fan-out.js.map +1 -1
- package/out/zql/src/planner/planner-graph.js +302 -334
- package/out/zql/src/planner/planner-graph.js.map +1 -1
- package/out/zql/src/planner/planner-join.js +255 -240
- package/out/zql/src/planner/planner-join.js.map +1 -1
- package/out/zql/src/planner/planner-node.js +10 -6
- package/out/zql/src/planner/planner-node.js.map +1 -1
- package/out/zql/src/planner/planner-source.js +15 -22
- package/out/zql/src/planner/planner-source.js.map +1 -1
- package/out/zql/src/planner/planner-terminus.js +28 -28
- package/out/zql/src/planner/planner-terminus.js.map +1 -1
- package/out/zql/src/query/complete-ordering.js +37 -61
- package/out/zql/src/query/complete-ordering.js.map +1 -1
- package/out/zql/src/query/create-builder.js +14 -22
- package/out/zql/src/query/create-builder.js.map +1 -1
- package/out/zql/src/query/error.js +10 -12
- package/out/zql/src/query/error.js.map +1 -1
- package/out/zql/src/query/escape-like.js +6 -5
- package/out/zql/src/query/escape-like.js.map +1 -1
- package/out/zql/src/query/expression.js +138 -157
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/measure-push-operator.js +35 -38
- package/out/zql/src/query/measure-push-operator.js.map +1 -1
- package/out/zql/src/query/metrics-delegate.js +7 -7
- package/out/zql/src/query/metrics-delegate.js.map +1 -1
- package/out/zql/src/query/named.js +52 -51
- package/out/zql/src/query/named.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +190 -238
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +271 -405
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internals.js +16 -8
- package/out/zql/src/query/query-internals.js.map +1 -1
- package/out/zql/src/query/query-registry.js +83 -98
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/query.js +2 -0
- package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.js +30 -55
- package/out/zql/src/query/runnable-query-impl.js.map +1 -1
- package/out/zql/src/query/static-query.js +7 -14
- package/out/zql/src/query/static-query.js.map +1 -1
- package/out/zql/src/query/ttl.js +45 -67
- package/out/zql/src/query/ttl.js.map +1 -1
- package/out/zql/src/query/validate-input.js +23 -20
- package/out/zql/src/query/validate-input.js.map +1 -1
- package/out/zqlite/src/database-storage.js +99 -103
- package/out/zqlite/src/database-storage.js.map +1 -1
- package/out/zqlite/src/db.js +206 -249
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/explain-queries.js +11 -13
- package/out/zqlite/src/explain-queries.js.map +1 -1
- package/out/zqlite/src/internal/sql-inline.js +54 -37
- package/out/zqlite/src/internal/sql-inline.js.map +1 -1
- package/out/zqlite/src/internal/sql.js +17 -15
- package/out/zqlite/src/internal/sql.js.map +1 -1
- package/out/zqlite/src/internal/statement-cache.js +117 -92
- package/out/zqlite/src/internal/statement-cache.js.map +1 -1
- package/out/zqlite/src/mod.js +5 -0
- package/out/zqlite/src/query-builder.js +81 -172
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/query-delegate.js +45 -55
- package/out/zqlite/src/query-delegate.js.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +134 -124
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +92 -97
- package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
- package/out/zqlite/src/sqlite-stat-fanout.js +304 -286
- package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
- package/out/zqlite/src/table-source.js +281 -455
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +8 -7
- package/out/replicache/src/db/index-operation-enum.js +0 -7
- package/out/replicache/src/db/index-operation-enum.js.map +0 -1
- package/out/replicache/src/db/meta-type-enum.js +0 -7
- package/out/replicache/src/db/meta-type-enum.js.map +0 -1
- package/out/replicache/src/format-version-enum.js +0 -11
- package/out/replicache/src/format-version-enum.js.map +0 -1
- package/out/replicache/src/http-status-unauthorized.js +0 -5
- package/out/replicache/src/http-status-unauthorized.js.map +0 -1
- package/out/replicache/src/invoke-kind-enum.js +0 -7
- package/out/replicache/src/invoke-kind-enum.js.map +0 -1
- package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +0 -9
- package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +0 -1
- package/out/zero/package.json.js +0 -9
- package/out/zero/package.json.js.map +0 -1
- package/out/zero/src/adapters/drizzle.js.map +0 -1
- package/out/zero/src/adapters/pg.js.map +0 -1
- package/out/zero/src/adapters/postgresjs.js.map +0 -1
- package/out/zero/src/adapters/prisma.js.map +0 -1
- package/out/zero/src/analyze-query.js.map +0 -1
- package/out/zero/src/ast-to-zql.js.map +0 -1
- package/out/zero/src/bindings.js.map +0 -1
- package/out/zero/src/change-protocol/v0.js.map +0 -1
- package/out/zero/src/cli.js.map +0 -1
- package/out/zero/src/deploy-permissions.js.map +0 -1
- package/out/zero/src/expo-sqlite.js.map +0 -1
- package/out/zero/src/op-sqlite.js.map +0 -1
- package/out/zero/src/pg.js.map +0 -1
- package/out/zero/src/react.js.map +0 -1
- package/out/zero/src/server.js.map +0 -1
- package/out/zero/src/solid.js.map +0 -1
- package/out/zero/src/sqlite.js.map +0 -1
- package/out/zero/src/transform-query.js.map +0 -1
- package/out/zero/src/zero.js.map +0 -1
- package/out/zero/src/zqlite.js.map +0 -1
- package/out/zero-cache/src/db/postgres-replica-identity-enum.js +0 -11
- package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +0 -1
- package/out/zero-cache/src/db/postgres-type-class-enum.js +0 -17
- package/out/zero-cache/src/db/postgres-type-class-enum.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/error-type-enum.js +0 -9
- package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +0 -1
|
@@ -1,106 +1,58 @@
|
|
|
1
1
|
import { assert } from "../../../shared/src/asserts.js";
|
|
2
|
+
import { parse, valita_exports } from "../../../shared/src/valita.js";
|
|
2
3
|
import { must } from "../../../shared/src/must.js";
|
|
3
|
-
import { parse } from "../../../shared/src/valita.js";
|
|
4
4
|
import "../types/pg.js";
|
|
5
5
|
import { runTx } from "./run-transaction.js";
|
|
6
|
-
|
|
6
|
+
//#region ../zero-cache/src/db/migration.ts
|
|
7
|
+
/**
|
|
8
|
+
* Ensures that the schema is compatible with the current code, updating and
|
|
9
|
+
* migrating the schema if necessary.
|
|
10
|
+
*/
|
|
7
11
|
async function runSchemaMigrations(log, debugName, schemaName, db, setupMigration, incrementalMigrationMap) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (versions.dataVersion === codeVersion) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const migrations = versions.dataVersion === 0 ? (
|
|
43
|
-
// For an empty database (v0), only run the setup migration.
|
|
44
|
-
[[codeVersion, setupMigration]]
|
|
45
|
-
) : versionMigrations;
|
|
46
|
-
for (const [dest, migration] of migrations) {
|
|
47
|
-
if (versions.dataVersion < dest) {
|
|
48
|
-
log.info?.(
|
|
49
|
-
`Migrating schema from v${versions.dataVersion} to v${dest}`
|
|
50
|
-
);
|
|
51
|
-
void log.flush();
|
|
52
|
-
versions = await runMigration(
|
|
53
|
-
log,
|
|
54
|
-
schemaName,
|
|
55
|
-
tx,
|
|
56
|
-
versions,
|
|
57
|
-
dest,
|
|
58
|
-
migration
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
log.info?.(`Running ${debugName} at schema v${codeVersion}`);
|
|
64
|
-
} catch (e) {
|
|
65
|
-
log.error?.("Error in ensureSchemaMigrated", e);
|
|
66
|
-
throw e;
|
|
67
|
-
} finally {
|
|
68
|
-
void log.flush();
|
|
69
|
-
}
|
|
12
|
+
log = log.withContext("initSchema", schemaName);
|
|
13
|
+
const versionMigrations = sorted(incrementalMigrationMap);
|
|
14
|
+
assert(versionMigrations.length, `Must specify at least one version migration`);
|
|
15
|
+
assert(versionMigrations[0][0] > 0, `Versions must be non-zero positive numbers`);
|
|
16
|
+
const codeVersion = versionMigrations[versionMigrations.length - 1][0];
|
|
17
|
+
log.info?.(`Checking schema for compatibility with ${debugName} at schema v${codeVersion}`);
|
|
18
|
+
try {
|
|
19
|
+
await runTx(db, async (tx) => {
|
|
20
|
+
await tx`SELECT pg_advisory_xact_lock(hashtext(${`migrate-schema:${schemaName}`}))`;
|
|
21
|
+
let versions = await ensureVersionHistory(tx, schemaName);
|
|
22
|
+
if (codeVersion < versions.minSafeVersion) throw new Error(`Cannot run ${debugName} at schema v${codeVersion} because rollback limit is v${versions.minSafeVersion}`);
|
|
23
|
+
if (versions.dataVersion > codeVersion) {
|
|
24
|
+
log.info?.(`Data is at v${versions.dataVersion}. Resetting to v${codeVersion}`);
|
|
25
|
+
await updateVersionHistory(log, tx, schemaName, versions, codeVersion);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (versions.dataVersion === codeVersion) return;
|
|
29
|
+
const migrations = versions.dataVersion === 0 ? [[codeVersion, setupMigration]] : versionMigrations;
|
|
30
|
+
for (const [dest, migration] of migrations) if (versions.dataVersion < dest) {
|
|
31
|
+
log.info?.(`Migrating schema from v${versions.dataVersion} to v${dest}`);
|
|
32
|
+
log.flush();
|
|
33
|
+
versions = await runMigration(log, schemaName, tx, versions, dest, migration);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
log.info?.(`Running ${debugName} at schema v${codeVersion}`);
|
|
37
|
+
} catch (e) {
|
|
38
|
+
log.error?.("Error in ensureSchemaMigrated", e);
|
|
39
|
+
throw e;
|
|
40
|
+
} finally {
|
|
41
|
+
log.flush();
|
|
42
|
+
}
|
|
70
43
|
}
|
|
71
44
|
function sorted(incrementalMigrationMap) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
return versionMigrations.sort(([a], [b]) => a - b);
|
|
45
|
+
const versionMigrations = [];
|
|
46
|
+
for (const [v, m] of Object.entries(incrementalMigrationMap)) versionMigrations.push([Number(v), m]);
|
|
47
|
+
return versionMigrations.sort(([a], [b]) => a - b);
|
|
77
48
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
* in the database. A schemaVersion only moves forward; rolling back to
|
|
83
|
-
* an earlier (safe) code version does not revert schema changes that
|
|
84
|
-
* have already been applied.
|
|
85
|
-
*/
|
|
86
|
-
schemaVersion: number(),
|
|
87
|
-
/**
|
|
88
|
-
* The data version is the code version of the latest server that ran.
|
|
89
|
-
* Note that this may be less than the schemaVersion in the case that
|
|
90
|
-
* a server is rolled back to an earlier version after a schema change.
|
|
91
|
-
* In such a case, data (but not schema), may need to be re-migrated
|
|
92
|
-
* when rolling forward again.
|
|
93
|
-
*/
|
|
94
|
-
dataVersion: number(),
|
|
95
|
-
/**
|
|
96
|
-
* The minimum code version that is safe to run. This is used when
|
|
97
|
-
* a schema migration is not backwards compatible with an older version
|
|
98
|
-
* of the code.
|
|
99
|
-
*/
|
|
100
|
-
minSafeVersion: number()
|
|
49
|
+
var versionHistory = valita_exports.object({
|
|
50
|
+
schemaVersion: valita_exports.number(),
|
|
51
|
+
dataVersion: valita_exports.number(),
|
|
52
|
+
minSafeVersion: valita_exports.number()
|
|
101
53
|
});
|
|
102
54
|
async function createVersionHistoryTable(sql, schemaName) {
|
|
103
|
-
|
|
55
|
+
await sql`
|
|
104
56
|
CREATE SCHEMA IF NOT EXISTS ${sql(schemaName)};
|
|
105
57
|
CREATE TABLE IF NOT EXISTS ${sql(schemaName)}."versionHistory" (
|
|
106
58
|
"dataVersion" int NOT NULL,
|
|
@@ -113,77 +65,56 @@ async function createVersionHistoryTable(sql, schemaName) {
|
|
|
113
65
|
);`.simple();
|
|
114
66
|
}
|
|
115
67
|
async function ensureVersionHistory(sql, schemaName) {
|
|
116
|
-
|
|
68
|
+
return must(await getVersionHistory(sql, schemaName, true));
|
|
117
69
|
}
|
|
118
70
|
async function getVersionHistory(sql, schemaName, create = false) {
|
|
119
|
-
|
|
71
|
+
if ((await sql`
|
|
120
72
|
SELECT nspname, relname FROM pg_class
|
|
121
73
|
JOIN pg_namespace ON relnamespace = pg_namespace.oid
|
|
122
|
-
WHERE nspname = ${schemaName} AND relname = ${"versionHistory"}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
await createVersionHistoryTable(sql, schemaName);
|
|
126
|
-
} else {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
const rows = await sql`
|
|
74
|
+
WHERE nspname = ${schemaName} AND relname = ${"versionHistory"}`).length === 0) if (create) await createVersionHistoryTable(sql, schemaName);
|
|
75
|
+
else return null;
|
|
76
|
+
const rows = await sql`
|
|
131
77
|
SELECT "dataVersion", "schemaVersion", "minSafeVersion"
|
|
132
78
|
FROM ${sql(schemaName)}."versionHistory"`;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
79
|
+
if (rows.length === 0) return create ? {
|
|
80
|
+
schemaVersion: 0,
|
|
81
|
+
dataVersion: 0,
|
|
82
|
+
minSafeVersion: 0
|
|
83
|
+
} : null;
|
|
84
|
+
return parse(rows[0], versionHistory);
|
|
137
85
|
}
|
|
138
86
|
async function updateVersionHistory(log, sql, schemaName, prev, newVersion, minSafeVersion) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
await sql`
|
|
87
|
+
assert(newVersion > 0, "newVersion must be positive");
|
|
88
|
+
const versions = {
|
|
89
|
+
dataVersion: newVersion,
|
|
90
|
+
schemaVersion: Math.max(newVersion, prev.schemaVersion),
|
|
91
|
+
minSafeVersion: getMinSafeVersion(log, prev, minSafeVersion)
|
|
92
|
+
};
|
|
93
|
+
await sql`
|
|
147
94
|
INSERT INTO ${sql(schemaName)}."versionHistory" ${sql(versions)}
|
|
148
95
|
ON CONFLICT (lock) DO UPDATE SET ${sql(versions)}
|
|
149
96
|
`;
|
|
150
|
-
|
|
97
|
+
return versions;
|
|
151
98
|
}
|
|
152
99
|
async function runMigration(log, schemaName, tx, versions, destinationVersion, migration) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (versions.dataVersion < destinationVersion) {
|
|
157
|
-
await migration.migrateData?.(log, tx);
|
|
158
|
-
}
|
|
159
|
-
return updateVersionHistory(
|
|
160
|
-
log,
|
|
161
|
-
tx,
|
|
162
|
-
schemaName,
|
|
163
|
-
versions,
|
|
164
|
-
destinationVersion,
|
|
165
|
-
migration.minSafeVersion
|
|
166
|
-
);
|
|
100
|
+
if (versions.schemaVersion < destinationVersion) await migration.migrateSchema?.(log, tx);
|
|
101
|
+
if (versions.dataVersion < destinationVersion) await migration.migrateData?.(log, tx);
|
|
102
|
+
return updateVersionHistory(log, tx, schemaName, versions, destinationVersion, migration.minSafeVersion);
|
|
167
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Bumps the rollback limit [[toAtLeast]] the specified version.
|
|
106
|
+
* Leaves the rollback limit unchanged if it is equal or greater.
|
|
107
|
+
*/
|
|
168
108
|
function getMinSafeVersion(log, current, proposedSafeVersion) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
return current.minSafeVersion;
|
|
177
|
-
}
|
|
178
|
-
log.info?.(
|
|
179
|
-
`bumping rollback limit from ${current.minSafeVersion} to ${proposedSafeVersion}`
|
|
180
|
-
);
|
|
181
|
-
return proposedSafeVersion;
|
|
109
|
+
if (proposedSafeVersion === void 0) return current.minSafeVersion;
|
|
110
|
+
if (current.minSafeVersion >= proposedSafeVersion) {
|
|
111
|
+
log.debug?.(`rollback limit is already at ${current.minSafeVersion}, don't need to bump to ${proposedSafeVersion}`);
|
|
112
|
+
return current.minSafeVersion;
|
|
113
|
+
}
|
|
114
|
+
log.info?.(`bumping rollback limit from ${current.minSafeVersion} to ${proposedSafeVersion}`);
|
|
115
|
+
return proposedSafeVersion;
|
|
182
116
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
versionHistory
|
|
188
|
-
};
|
|
189
|
-
//# sourceMappingURL=migration.js.map
|
|
117
|
+
//#endregion
|
|
118
|
+
export { getVersionHistory, runSchemaMigrations };
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sources":["../../../../../zero-cache/src/db/migration.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type postgres from 'postgres';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport {type PostgresDB, type PostgresTransaction} from '../types/pg.ts';\nimport {runTx} from './run-transaction.ts';\n\ntype Operations = (log: LogContext, tx: PostgresTransaction) => Promise<void>;\n\n/**\n * Encapsulates the logic for setting up or upgrading to a new schema. After the\n * Migration code successfully completes, {@link runSchemaMigrations}\n * will update the schema version and commit the transaction.\n */\nexport type Migration = {\n /**\n * Perform database operations that create or alter table structure. This is\n * called at most once during lifetime of the application. If a `migrateData()`\n * operation is defined, that will be performed after `migrateSchema()` succeeds.\n */\n migrateSchema?: Operations;\n\n /**\n * Perform database operations to migrate data to the new schema. This is\n * called after `migrateSchema()` (if defined), and may be called again\n * to re-migrate data after the server was rolled back to an earlier version,\n * and rolled forward again.\n *\n * Consequently, the logic in `migrateData()` must be idempotent.\n */\n migrateData?: Operations;\n\n /**\n * Sets the `minSafeVersion` to the specified value, prohibiting running\n * any earlier code versions.\n */\n minSafeVersion?: number;\n};\n\n/**\n * Mapping of incremental migrations to move from the previous old code\n * version to next one. Versions must be non-zero.\n *\n * The schema resulting from performing incremental migrations should be\n * equivalent to that of the `setupMigration` on a blank database.\n *\n * The highest destinationVersion of this map denotes the current\n * \"code version\", and is also used as the destination version when\n * running the initial setup migration on a blank database.\n */\nexport type IncrementalMigrationMap = {\n [destinationVersion: number]: Migration;\n};\n\n/**\n * Ensures that the schema is compatible with the current code, updating and\n * migrating the schema if necessary.\n */\nexport async function runSchemaMigrations(\n log: LogContext,\n debugName: string,\n schemaName: string,\n db: PostgresDB,\n setupMigration: Migration,\n incrementalMigrationMap: IncrementalMigrationMap,\n): Promise<void> {\n log = log.withContext('initSchema', schemaName);\n\n const versionMigrations = sorted(incrementalMigrationMap);\n assert(\n versionMigrations.length,\n `Must specify at least one version migration`,\n );\n assert(\n versionMigrations[0][0] > 0,\n `Versions must be non-zero positive numbers`,\n );\n const codeVersion = versionMigrations[versionMigrations.length - 1][0];\n\n log.info?.(\n `Checking schema for compatibility with ${debugName} at schema v${codeVersion}`,\n );\n\n try {\n await runTx(db, async tx => {\n // Acquire advisory lock to prevent concurrent migrations from racing.\n // This can happen during rolling deployments when multiple pods start\n // up simultaneously. The lock auto-releases when the transaction ends.\n const lockName = `migrate-schema:${schemaName}`;\n await tx`SELECT pg_advisory_xact_lock(hashtext(${lockName}))`;\n\n let versions = await ensureVersionHistory(tx, schemaName);\n\n if (codeVersion < versions.minSafeVersion) {\n throw new Error(\n `Cannot run ${debugName} at schema v${codeVersion} because rollback limit is v${versions.minSafeVersion}`,\n );\n }\n\n if (versions.dataVersion > codeVersion) {\n log.info?.(\n `Data is at v${versions.dataVersion}. Resetting to v${codeVersion}`,\n );\n await updateVersionHistory(log, tx, schemaName, versions, codeVersion);\n return;\n }\n\n if (versions.dataVersion === codeVersion) {\n return;\n }\n\n const migrations =\n versions.dataVersion === 0\n ? // For an empty database (v0), only run the setup migration.\n ([[codeVersion, setupMigration]] as const)\n : versionMigrations;\n\n for (const [dest, migration] of migrations) {\n if (versions.dataVersion < dest) {\n log.info?.(\n `Migrating schema from v${versions.dataVersion} to v${dest}`,\n );\n void log.flush();\n versions = await runMigration(\n log,\n schemaName,\n tx,\n versions,\n dest,\n migration,\n );\n }\n }\n });\n\n log.info?.(`Running ${debugName} at schema v${codeVersion}`);\n } catch (e) {\n log.error?.('Error in ensureSchemaMigrated', e);\n throw e;\n } finally {\n void log.flush();\n }\n}\n\nfunction sorted(\n incrementalMigrationMap: IncrementalMigrationMap,\n): [number, Migration][] {\n const versionMigrations: [number, Migration][] = [];\n for (const [v, m] of Object.entries(incrementalMigrationMap)) {\n versionMigrations.push([Number(v), m]);\n }\n return versionMigrations.sort(([a], [b]) => a - b);\n}\n\n// Exposed for tests.\nexport const versionHistory = v.object({\n /**\n * The `schemaVersion` is highest code version that has ever been run\n * on the database, and is used to delineate the structure of the tables\n * in the database. A schemaVersion only moves forward; rolling back to\n * an earlier (safe) code version does not revert schema changes that\n * have already been applied.\n */\n schemaVersion: v.number(),\n\n /**\n * The data version is the code version of the latest server that ran.\n * Note that this may be less than the schemaVersion in the case that\n * a server is rolled back to an earlier version after a schema change.\n * In such a case, data (but not schema), may need to be re-migrated\n * when rolling forward again.\n */\n dataVersion: v.number(),\n\n /**\n * The minimum code version that is safe to run. This is used when\n * a schema migration is not backwards compatible with an older version\n * of the code.\n */\n minSafeVersion: v.number(),\n});\n\n// Exposed for tests.\nexport type VersionHistory = v.Infer<typeof versionHistory>;\n\n// Exposed for tests.\nexport async function createVersionHistoryTable(\n sql: postgres.Sql,\n schemaName: string,\n) {\n // Note: The `lock` column transparently ensures that at most one row exists.\n await sql`\n CREATE SCHEMA IF NOT EXISTS ${sql(schemaName)};\n CREATE TABLE IF NOT EXISTS ${sql(schemaName)}.\"versionHistory\" (\n \"dataVersion\" int NOT NULL,\n \"schemaVersion\" int NOT NULL,\n \"minSafeVersion\" int NOT NULL,\n\n lock char(1) NOT NULL CONSTRAINT DF_schema_meta_lock DEFAULT 'v',\n CONSTRAINT PK_schema_meta_lock PRIMARY KEY (lock),\n CONSTRAINT CK_schema_meta_lock CHECK (lock='v')\n );`.simple();\n}\n\nasync function ensureVersionHistory(\n sql: postgres.Sql,\n schemaName: string,\n): Promise<VersionHistory> {\n return must(await getVersionHistory(sql, schemaName, true));\n}\n\nexport async function getVersionHistory(\n sql: postgres.Sql,\n schemaName: string,\n create = false,\n): Promise<VersionHistory | null> {\n const exists = await sql`\n SELECT nspname, relname FROM pg_class\n JOIN pg_namespace ON relnamespace = pg_namespace.oid\n WHERE nspname = ${schemaName} AND relname = ${'versionHistory'}`;\n\n if (exists.length === 0) {\n if (create) {\n await createVersionHistoryTable(sql, schemaName);\n } else {\n return null;\n }\n }\n const rows = await sql`\n SELECT \"dataVersion\", \"schemaVersion\", \"minSafeVersion\"\n FROM ${sql(schemaName)}.\"versionHistory\"`;\n\n if (rows.length === 0) {\n return create\n ? {schemaVersion: 0, dataVersion: 0, minSafeVersion: 0}\n : null;\n }\n return v.parse(rows[0], versionHistory);\n}\n\nasync function updateVersionHistory(\n log: LogContext,\n sql: postgres.Sql,\n schemaName: string,\n prev: VersionHistory,\n newVersion: number,\n minSafeVersion?: number,\n): Promise<VersionHistory> {\n assert(newVersion > 0, 'newVersion must be positive');\n const versions = {\n dataVersion: newVersion,\n // The schemaVersion never moves backwards.\n schemaVersion: Math.max(newVersion, prev.schemaVersion),\n minSafeVersion: getMinSafeVersion(log, prev, minSafeVersion),\n } satisfies VersionHistory;\n\n await sql`\n INSERT INTO ${sql(schemaName)}.\"versionHistory\" ${sql(versions)}\n ON CONFLICT (lock) DO UPDATE SET ${sql(versions)}\n `;\n return versions;\n}\n\nasync function runMigration(\n log: LogContext,\n schemaName: string,\n tx: PostgresTransaction,\n versions: VersionHistory,\n destinationVersion: number,\n migration: Migration,\n): Promise<VersionHistory> {\n if (versions.schemaVersion < destinationVersion) {\n await migration.migrateSchema?.(log, tx);\n }\n if (versions.dataVersion < destinationVersion) {\n await migration.migrateData?.(log, tx);\n }\n return updateVersionHistory(\n log,\n tx,\n schemaName,\n versions,\n destinationVersion,\n migration.minSafeVersion,\n );\n}\n\n/**\n * Bumps the rollback limit [[toAtLeast]] the specified version.\n * Leaves the rollback limit unchanged if it is equal or greater.\n */\nfunction getMinSafeVersion(\n log: LogContext,\n current: VersionHistory,\n proposedSafeVersion?: number,\n): number {\n if (proposedSafeVersion === undefined) {\n return current.minSafeVersion;\n }\n if (current.minSafeVersion >= proposedSafeVersion) {\n // The rollback limit must never move backwards.\n log.debug?.(\n `rollback limit is already at ${current.minSafeVersion}, ` +\n `don't need to bump to ${proposedSafeVersion}`,\n );\n return current.minSafeVersion;\n }\n log.info?.(\n `bumping rollback limit from ${current.minSafeVersion} to ${proposedSafeVersion}`,\n );\n return proposedSafeVersion;\n}\n"],"names":["v","v.object","v.number","v.parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migration.js","names":[],"sources":["../../../../../zero-cache/src/db/migration.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type postgres from 'postgres';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport {type PostgresDB, type PostgresTransaction} from '../types/pg.ts';\nimport {runTx} from './run-transaction.ts';\n\ntype Operations = (log: LogContext, tx: PostgresTransaction) => Promise<void>;\n\n/**\n * Encapsulates the logic for setting up or upgrading to a new schema. After the\n * Migration code successfully completes, {@link runSchemaMigrations}\n * will update the schema version and commit the transaction.\n */\nexport type Migration = {\n /**\n * Perform database operations that create or alter table structure. This is\n * called at most once during lifetime of the application. If a `migrateData()`\n * operation is defined, that will be performed after `migrateSchema()` succeeds.\n */\n migrateSchema?: Operations;\n\n /**\n * Perform database operations to migrate data to the new schema. This is\n * called after `migrateSchema()` (if defined), and may be called again\n * to re-migrate data after the server was rolled back to an earlier version,\n * and rolled forward again.\n *\n * Consequently, the logic in `migrateData()` must be idempotent.\n */\n migrateData?: Operations;\n\n /**\n * Sets the `minSafeVersion` to the specified value, prohibiting running\n * any earlier code versions.\n */\n minSafeVersion?: number;\n};\n\n/**\n * Mapping of incremental migrations to move from the previous old code\n * version to next one. Versions must be non-zero.\n *\n * The schema resulting from performing incremental migrations should be\n * equivalent to that of the `setupMigration` on a blank database.\n *\n * The highest destinationVersion of this map denotes the current\n * \"code version\", and is also used as the destination version when\n * running the initial setup migration on a blank database.\n */\nexport type IncrementalMigrationMap = {\n [destinationVersion: number]: Migration;\n};\n\n/**\n * Ensures that the schema is compatible with the current code, updating and\n * migrating the schema if necessary.\n */\nexport async function runSchemaMigrations(\n log: LogContext,\n debugName: string,\n schemaName: string,\n db: PostgresDB,\n setupMigration: Migration,\n incrementalMigrationMap: IncrementalMigrationMap,\n): Promise<void> {\n log = log.withContext('initSchema', schemaName);\n\n const versionMigrations = sorted(incrementalMigrationMap);\n assert(\n versionMigrations.length,\n `Must specify at least one version migration`,\n );\n assert(\n versionMigrations[0][0] > 0,\n `Versions must be non-zero positive numbers`,\n );\n const codeVersion = versionMigrations[versionMigrations.length - 1][0];\n\n log.info?.(\n `Checking schema for compatibility with ${debugName} at schema v${codeVersion}`,\n );\n\n try {\n await runTx(db, async tx => {\n // Acquire advisory lock to prevent concurrent migrations from racing.\n // This can happen during rolling deployments when multiple pods start\n // up simultaneously. The lock auto-releases when the transaction ends.\n const lockName = `migrate-schema:${schemaName}`;\n await tx`SELECT pg_advisory_xact_lock(hashtext(${lockName}))`;\n\n let versions = await ensureVersionHistory(tx, schemaName);\n\n if (codeVersion < versions.minSafeVersion) {\n throw new Error(\n `Cannot run ${debugName} at schema v${codeVersion} because rollback limit is v${versions.minSafeVersion}`,\n );\n }\n\n if (versions.dataVersion > codeVersion) {\n log.info?.(\n `Data is at v${versions.dataVersion}. Resetting to v${codeVersion}`,\n );\n await updateVersionHistory(log, tx, schemaName, versions, codeVersion);\n return;\n }\n\n if (versions.dataVersion === codeVersion) {\n return;\n }\n\n const migrations =\n versions.dataVersion === 0\n ? // For an empty database (v0), only run the setup migration.\n ([[codeVersion, setupMigration]] as const)\n : versionMigrations;\n\n for (const [dest, migration] of migrations) {\n if (versions.dataVersion < dest) {\n log.info?.(\n `Migrating schema from v${versions.dataVersion} to v${dest}`,\n );\n void log.flush();\n versions = await runMigration(\n log,\n schemaName,\n tx,\n versions,\n dest,\n migration,\n );\n }\n }\n });\n\n log.info?.(`Running ${debugName} at schema v${codeVersion}`);\n } catch (e) {\n log.error?.('Error in ensureSchemaMigrated', e);\n throw e;\n } finally {\n void log.flush();\n }\n}\n\nfunction sorted(\n incrementalMigrationMap: IncrementalMigrationMap,\n): [number, Migration][] {\n const versionMigrations: [number, Migration][] = [];\n for (const [v, m] of Object.entries(incrementalMigrationMap)) {\n versionMigrations.push([Number(v), m]);\n }\n return versionMigrations.sort(([a], [b]) => a - b);\n}\n\n// Exposed for tests.\nexport const versionHistory = v.object({\n /**\n * The `schemaVersion` is highest code version that has ever been run\n * on the database, and is used to delineate the structure of the tables\n * in the database. A schemaVersion only moves forward; rolling back to\n * an earlier (safe) code version does not revert schema changes that\n * have already been applied.\n */\n schemaVersion: v.number(),\n\n /**\n * The data version is the code version of the latest server that ran.\n * Note that this may be less than the schemaVersion in the case that\n * a server is rolled back to an earlier version after a schema change.\n * In such a case, data (but not schema), may need to be re-migrated\n * when rolling forward again.\n */\n dataVersion: v.number(),\n\n /**\n * The minimum code version that is safe to run. This is used when\n * a schema migration is not backwards compatible with an older version\n * of the code.\n */\n minSafeVersion: v.number(),\n});\n\n// Exposed for tests.\nexport type VersionHistory = v.Infer<typeof versionHistory>;\n\n// Exposed for tests.\nexport async function createVersionHistoryTable(\n sql: postgres.Sql,\n schemaName: string,\n) {\n // Note: The `lock` column transparently ensures that at most one row exists.\n await sql`\n CREATE SCHEMA IF NOT EXISTS ${sql(schemaName)};\n CREATE TABLE IF NOT EXISTS ${sql(schemaName)}.\"versionHistory\" (\n \"dataVersion\" int NOT NULL,\n \"schemaVersion\" int NOT NULL,\n \"minSafeVersion\" int NOT NULL,\n\n lock char(1) NOT NULL CONSTRAINT DF_schema_meta_lock DEFAULT 'v',\n CONSTRAINT PK_schema_meta_lock PRIMARY KEY (lock),\n CONSTRAINT CK_schema_meta_lock CHECK (lock='v')\n );`.simple();\n}\n\nasync function ensureVersionHistory(\n sql: postgres.Sql,\n schemaName: string,\n): Promise<VersionHistory> {\n return must(await getVersionHistory(sql, schemaName, true));\n}\n\nexport async function getVersionHistory(\n sql: postgres.Sql,\n schemaName: string,\n create = false,\n): Promise<VersionHistory | null> {\n const exists = await sql`\n SELECT nspname, relname FROM pg_class\n JOIN pg_namespace ON relnamespace = pg_namespace.oid\n WHERE nspname = ${schemaName} AND relname = ${'versionHistory'}`;\n\n if (exists.length === 0) {\n if (create) {\n await createVersionHistoryTable(sql, schemaName);\n } else {\n return null;\n }\n }\n const rows = await sql`\n SELECT \"dataVersion\", \"schemaVersion\", \"minSafeVersion\"\n FROM ${sql(schemaName)}.\"versionHistory\"`;\n\n if (rows.length === 0) {\n return create\n ? {schemaVersion: 0, dataVersion: 0, minSafeVersion: 0}\n : null;\n }\n return v.parse(rows[0], versionHistory);\n}\n\nasync function updateVersionHistory(\n log: LogContext,\n sql: postgres.Sql,\n schemaName: string,\n prev: VersionHistory,\n newVersion: number,\n minSafeVersion?: number,\n): Promise<VersionHistory> {\n assert(newVersion > 0, 'newVersion must be positive');\n const versions = {\n dataVersion: newVersion,\n // The schemaVersion never moves backwards.\n schemaVersion: Math.max(newVersion, prev.schemaVersion),\n minSafeVersion: getMinSafeVersion(log, prev, minSafeVersion),\n } satisfies VersionHistory;\n\n await sql`\n INSERT INTO ${sql(schemaName)}.\"versionHistory\" ${sql(versions)}\n ON CONFLICT (lock) DO UPDATE SET ${sql(versions)}\n `;\n return versions;\n}\n\nasync function runMigration(\n log: LogContext,\n schemaName: string,\n tx: PostgresTransaction,\n versions: VersionHistory,\n destinationVersion: number,\n migration: Migration,\n): Promise<VersionHistory> {\n if (versions.schemaVersion < destinationVersion) {\n await migration.migrateSchema?.(log, tx);\n }\n if (versions.dataVersion < destinationVersion) {\n await migration.migrateData?.(log, tx);\n }\n return updateVersionHistory(\n log,\n tx,\n schemaName,\n versions,\n destinationVersion,\n migration.minSafeVersion,\n );\n}\n\n/**\n * Bumps the rollback limit [[toAtLeast]] the specified version.\n * Leaves the rollback limit unchanged if it is equal or greater.\n */\nfunction getMinSafeVersion(\n log: LogContext,\n current: VersionHistory,\n proposedSafeVersion?: number,\n): number {\n if (proposedSafeVersion === undefined) {\n return current.minSafeVersion;\n }\n if (current.minSafeVersion >= proposedSafeVersion) {\n // The rollback limit must never move backwards.\n log.debug?.(\n `rollback limit is already at ${current.minSafeVersion}, ` +\n `don't need to bump to ${proposedSafeVersion}`,\n );\n return current.minSafeVersion;\n }\n log.info?.(\n `bumping rollback limit from ${current.minSafeVersion} to ${proposedSafeVersion}`,\n );\n return proposedSafeVersion;\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=mode-enum.js.map
|
|
1
|
+
//#region ../zero-cache/src/db/mode-enum.ts
|
|
2
|
+
var SERIALIZABLE = "ISOLATION LEVEL SERIALIZABLE";
|
|
3
|
+
var READ_COMMITTED = "ISOLATION LEVEL READ COMMITTED";
|
|
4
|
+
var READONLY = "ISOLATION LEVEL REPEATABLE READ READ ONLY";
|
|
5
|
+
//#endregion
|
|
6
|
+
export { READONLY, READ_COMMITTED, SERIALIZABLE };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=mode-enum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-enum.js","sources":["../../../../../zero-cache/src/db/mode-enum.ts"],"sourcesContent":["export const SERIALIZABLE = 'ISOLATION LEVEL SERIALIZABLE';\nexport const READ_COMMITTED = 'ISOLATION LEVEL READ COMMITTED';\nexport const READONLY = 'ISOLATION LEVEL REPEATABLE READ READ ONLY';\n\nexport type SERIALIZABLE = typeof SERIALIZABLE;\nexport type READ_COMMITTED = typeof READ_COMMITTED;\nexport type READONLY = typeof READONLY;\n"],"
|
|
1
|
+
{"version":3,"file":"mode-enum.js","names":[],"sources":["../../../../../zero-cache/src/db/mode-enum.ts"],"sourcesContent":["export const SERIALIZABLE = 'ISOLATION LEVEL SERIALIZABLE';\nexport const READ_COMMITTED = 'ISOLATION LEVEL READ COMMITTED';\nexport const READONLY = 'ISOLATION LEVEL REPEATABLE READ READ ONLY';\n\nexport type SERIALIZABLE = typeof SERIALIZABLE;\nexport type READ_COMMITTED = typeof READ_COMMITTED;\nexport type READONLY = typeof READONLY;\n"],"mappings":";AAAA,IAAa,eAAe;AAC5B,IAAa,iBAAiB;AAC9B,IAAa,WAAW"}
|
|
@@ -1,56 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
92: "\\",
|
|
45
|
-
98: "\b",
|
|
46
|
-
102: "\f",
|
|
47
|
-
110: "\n",
|
|
48
|
-
114: "\r",
|
|
49
|
-
116: " ",
|
|
50
|
-
118: "\v"
|
|
1
|
+
import "node:stream";
|
|
2
|
+
//#region ../zero-cache/src/db/pg-copy.ts
|
|
3
|
+
/**
|
|
4
|
+
* Parsing a stream of tab-separated values from a Postgres `COPY` command.
|
|
5
|
+
* The object keeps state and should be reused across chunks of a stream in
|
|
6
|
+
* order to properly recognize that values are split across chunks.
|
|
7
|
+
*
|
|
8
|
+
* Note that `null` values are yielded as `null`. This object does not return
|
|
9
|
+
* the {@link NULL_BYTE} string.
|
|
10
|
+
*/
|
|
11
|
+
var TsvParser = class {
|
|
12
|
+
#currVal = "";
|
|
13
|
+
#escaped = false;
|
|
14
|
+
*parse(chunk) {
|
|
15
|
+
let l = 0;
|
|
16
|
+
let r = 0;
|
|
17
|
+
for (; r < chunk.length; r++) {
|
|
18
|
+
const ch = chunk[r];
|
|
19
|
+
if (this.#escaped) {
|
|
20
|
+
const escapedChar = ESCAPED_CHARACTERS[ch];
|
|
21
|
+
if (escapedChar === void 0) throw new Error(`Unexpected escape character \\${String.fromCharCode(ch)}`);
|
|
22
|
+
this.#currVal += escapedChar;
|
|
23
|
+
l = r + 1;
|
|
24
|
+
this.#escaped = false;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
switch (ch) {
|
|
28
|
+
case 92:
|
|
29
|
+
l < r && (this.#currVal += chunk.toString("utf8", l, r));
|
|
30
|
+
l = r + 1;
|
|
31
|
+
this.#escaped = true;
|
|
32
|
+
break;
|
|
33
|
+
case 9:
|
|
34
|
+
case 10:
|
|
35
|
+
l < r && (this.#currVal += chunk.toString("utf8", l, r));
|
|
36
|
+
l = r + 1;
|
|
37
|
+
yield this.#currVal === "\0" ? null : this.#currVal;
|
|
38
|
+
this.#currVal = "";
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
l < r && (this.#currVal += chunk.toString("utf8", l, r));
|
|
43
|
+
}
|
|
51
44
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
var ESCAPED_CHARACTERS = {
|
|
46
|
+
78: "\0",
|
|
47
|
+
92: "\\",
|
|
48
|
+
98: "\b",
|
|
49
|
+
102: "\f",
|
|
50
|
+
110: "\n",
|
|
51
|
+
114: "\r",
|
|
52
|
+
116: " ",
|
|
53
|
+
118: "\v"
|
|
55
54
|
};
|
|
56
|
-
//#
|
|
55
|
+
//#endregion
|
|
56
|
+
export { TsvParser };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=pg-copy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-copy.js","sources":["../../../../../zero-cache/src/db/pg-copy.ts"],"sourcesContent":["import {Transform} from 'node:stream';\n\n/**\n * A stream Transform that parses a Postgres `COPY ... TO` text stream into\n * individual text values. The special {@link NULL_BYTE} string is used to\n * indicate a `null` value (as the `null` value itself indicates the end of\n * the stream and cannot be pushed as an element).\n *\n * Note that the transform assumes that the next step of the pipeline\n * understands the cardinality of values per row and does not push any\n * special value when reaching the end of a row.\n */\nexport class TextTransform extends Transform {\n readonly #parser = new TsvParser();\n\n constructor() {\n super({objectMode: true});\n }\n\n _transform(\n chunk: Buffer,\n _encoding: BufferEncoding,\n callback: (e?: Error) => void,\n ) {\n try {\n for (const value of this.#parser.parse(chunk)) {\n this.push(value === null ? NULL_BYTE : value);\n }\n callback();\n } catch (e) {\n callback(e instanceof Error ? e : new Error(String(e)));\n }\n }\n}\n\n/**\n * Parsing a stream of tab-separated values from a Postgres `COPY` command.\n * The object keeps state and should be reused across chunks of a stream in\n * order to properly recognize that values are split across chunks.\n *\n * Note that `null` values are yielded as `null`. This object does not return\n * the {@link NULL_BYTE} string.\n */\nexport class TsvParser {\n #currVal: string = '';\n #escaped = false;\n\n *parse(chunk: Buffer): Iterable<string | null> {\n let l = 0;\n let r = 0;\n\n for (; r < chunk.length; r++) {\n const ch = chunk[r];\n if (this.#escaped) {\n const escapedChar = ESCAPED_CHARACTERS[ch];\n if (escapedChar === undefined) {\n throw new Error(\n `Unexpected escape character \\\\${String.fromCharCode(ch)}`,\n );\n }\n this.#currVal += escapedChar;\n l = r + 1;\n this.#escaped = false;\n continue;\n }\n switch (ch) {\n case 0x5c: // '\\'\n // flush segment\n l < r && (this.#currVal += chunk.toString('utf8', l, r));\n l = r + 1;\n this.#escaped = true;\n break;\n\n case 0x09: // '\\t'\n case 0x0a: // '\\n'\n // flush segment\n l < r && (this.#currVal += chunk.toString('utf8', l, r));\n l = r + 1;\n\n // Value is done in both cases.\n yield this.#currVal === NULL_BYTE ? null : this.#currVal;\n this.#currVal = '';\n break;\n }\n }\n // flush segment\n l < r && (this.#currVal += chunk.toString('utf8', l, r));\n }\n}\n\n// The lone NULL byte signifies that the column value is `null`.\n// (Postgres does not permit NULL bytes in TEXT values).\n//\n// Note that although NULL bytes can appear in JSON strings,\n// those will always be represented within double-quotes,\n// and thus never as a lone NULL byte.\nexport const NULL_BYTE = '\\u0000';\n\n// escaped characters used in https://www.postgresql.org/docs/current/sql-copy.html\nconst ESCAPED_CHARACTERS: Record<number, string | undefined> = {\n 0x4e: NULL_BYTE, // \\N signifies the NULL character.\n 0x5c: '\\\\',\n 0x62: '\\b',\n 0x66: '\\f',\n 0x6e: '\\n',\n 0x72: '\\r',\n 0x74: '\\t',\n 0x76: '\\v',\n} as const;\n"],"
|
|
1
|
+
{"version":3,"file":"pg-copy.js","names":["#parser","#escaped","#currVal"],"sources":["../../../../../zero-cache/src/db/pg-copy.ts"],"sourcesContent":["import {Transform} from 'node:stream';\n\n/**\n * A stream Transform that parses a Postgres `COPY ... TO` text stream into\n * individual text values. The special {@link NULL_BYTE} string is used to\n * indicate a `null` value (as the `null` value itself indicates the end of\n * the stream and cannot be pushed as an element).\n *\n * Note that the transform assumes that the next step of the pipeline\n * understands the cardinality of values per row and does not push any\n * special value when reaching the end of a row.\n */\nexport class TextTransform extends Transform {\n readonly #parser = new TsvParser();\n\n constructor() {\n super({objectMode: true});\n }\n\n _transform(\n chunk: Buffer,\n _encoding: BufferEncoding,\n callback: (e?: Error) => void,\n ) {\n try {\n for (const value of this.#parser.parse(chunk)) {\n this.push(value === null ? NULL_BYTE : value);\n }\n callback();\n } catch (e) {\n callback(e instanceof Error ? e : new Error(String(e)));\n }\n }\n}\n\n/**\n * Parsing a stream of tab-separated values from a Postgres `COPY` command.\n * The object keeps state and should be reused across chunks of a stream in\n * order to properly recognize that values are split across chunks.\n *\n * Note that `null` values are yielded as `null`. This object does not return\n * the {@link NULL_BYTE} string.\n */\nexport class TsvParser {\n #currVal: string = '';\n #escaped = false;\n\n *parse(chunk: Buffer): Iterable<string | null> {\n let l = 0;\n let r = 0;\n\n for (; r < chunk.length; r++) {\n const ch = chunk[r];\n if (this.#escaped) {\n const escapedChar = ESCAPED_CHARACTERS[ch];\n if (escapedChar === undefined) {\n throw new Error(\n `Unexpected escape character \\\\${String.fromCharCode(ch)}`,\n );\n }\n this.#currVal += escapedChar;\n l = r + 1;\n this.#escaped = false;\n continue;\n }\n switch (ch) {\n case 0x5c: // '\\'\n // flush segment\n l < r && (this.#currVal += chunk.toString('utf8', l, r));\n l = r + 1;\n this.#escaped = true;\n break;\n\n case 0x09: // '\\t'\n case 0x0a: // '\\n'\n // flush segment\n l < r && (this.#currVal += chunk.toString('utf8', l, r));\n l = r + 1;\n\n // Value is done in both cases.\n yield this.#currVal === NULL_BYTE ? null : this.#currVal;\n this.#currVal = '';\n break;\n }\n }\n // flush segment\n l < r && (this.#currVal += chunk.toString('utf8', l, r));\n }\n}\n\n// The lone NULL byte signifies that the column value is `null`.\n// (Postgres does not permit NULL bytes in TEXT values).\n//\n// Note that although NULL bytes can appear in JSON strings,\n// those will always be represented within double-quotes,\n// and thus never as a lone NULL byte.\nexport const NULL_BYTE = '\\u0000';\n\n// escaped characters used in https://www.postgresql.org/docs/current/sql-copy.html\nconst ESCAPED_CHARACTERS: Record<number, string | undefined> = {\n 0x4e: NULL_BYTE, // \\N signifies the NULL character.\n 0x5c: '\\\\',\n 0x62: '\\b',\n 0x66: '\\f',\n 0x6e: '\\n',\n 0x72: '\\r',\n 0x74: '\\t',\n 0x76: '\\v',\n} as const;\n"],"mappings":";;;;;;;;;;AA2CA,IAAa,YAAb,MAAuB;CACrB,WAAmB;CACnB,WAAW;CAEX,CAAC,MAAM,OAAwC;EAC7C,IAAI,IAAI;EACR,IAAI,IAAI;AAER,SAAO,IAAI,MAAM,QAAQ,KAAK;GAC5B,MAAM,KAAK,MAAM;AACjB,OAAI,MAAA,SAAe;IACjB,MAAM,cAAc,mBAAmB;AACvC,QAAI,gBAAgB,KAAA,EAClB,OAAM,IAAI,MACR,iCAAiC,OAAO,aAAa,GAAG,GACzD;AAEH,UAAA,WAAiB;AACjB,QAAI,IAAI;AACR,UAAA,UAAgB;AAChB;;AAEF,WAAQ,IAAR;IACE,KAAK;AAEH,SAAI,MAAM,MAAA,WAAiB,MAAM,SAAS,QAAQ,GAAG,EAAE;AACvD,SAAI,IAAI;AACR,WAAA,UAAgB;AAChB;IAEF,KAAK;IACL,KAAK;AAEH,SAAI,MAAM,MAAA,WAAiB,MAAM,SAAS,QAAQ,GAAG,EAAE;AACvD,SAAI,IAAI;AAGR,WAAM,MAAA,YAAA,OAA8B,OAAO,MAAA;AAC3C,WAAA,UAAgB;AAChB;;;AAIN,MAAI,MAAM,MAAA,WAAiB,MAAM,SAAS,QAAQ,GAAG,EAAE;;;AAa3D,IAAM,qBAAyD;CAC7D,IAAA;CACA,IAAM;CACN,IAAM;CACN,KAAM;CACN,KAAM;CACN,KAAM;CACN,KAAM;CACN,KAAM;CACP"}
|