@rocicorp/zero 0.25.0-canary.9 → 0.25.1
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/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/analyze-query/src/run-ast.d.ts +1 -1
- package/out/analyze-query/src/run-ast.d.ts.map +1 -1
- package/out/analyze-query/src/run-ast.js +10 -8
- package/out/analyze-query/src/run-ast.js.map +1 -1
- package/out/otel/src/log-options.d.ts +1 -1
- package/out/otel/src/log-options.d.ts.map +1 -1
- package/out/otel/src/log-options.js +0 -1
- package/out/otel/src/log-options.js.map +1 -1
- package/out/replicache/src/persist/idb-databases-store.d.ts +1 -0
- package/out/replicache/src/persist/idb-databases-store.d.ts.map +1 -1
- package/out/replicache/src/persist/idb-databases-store.js +13 -2
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
- package/out/shared/src/deep-merge.d.ts +6 -4
- package/out/shared/src/deep-merge.d.ts.map +1 -1
- package/out/shared/src/deep-merge.js +2 -1
- package/out/shared/src/deep-merge.js.map +1 -1
- package/out/shared/src/iterables.d.ts +0 -1
- package/out/shared/src/iterables.d.ts.map +1 -1
- package/out/shared/src/iterables.js +0 -34
- package/out/shared/src/iterables.js.map +1 -1
- package/out/shared/src/options-types.d.ts +113 -0
- package/out/shared/src/options-types.d.ts.map +1 -0
- package/out/shared/src/options.d.ts +2 -111
- package/out/shared/src/options.d.ts.map +1 -1
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/record-proxy.d.ts +13 -0
- package/out/shared/src/record-proxy.d.ts.map +1 -0
- package/out/shared/src/record-proxy.js +59 -0
- package/out/shared/src/record-proxy.js.map +1 -0
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +4 -2
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/zero/package.json.js +1 -1
- package/out/zero/src/adapters/drizzle.d.ts +1 -1
- package/out/zero/src/adapters/drizzle.d.ts.map +1 -1
- package/out/zero/src/adapters/drizzle.js +4 -1
- package/out/zero/src/bindings.d.ts +2 -0
- package/out/zero/src/bindings.d.ts.map +1 -0
- package/out/zero/src/bindings.js +27 -0
- package/out/zero/src/bindings.js.map +1 -0
- package/out/zero/src/pg.js +7 -5
- package/out/zero/src/react.js +2 -4
- package/out/zero/src/react.js.map +1 -1
- package/out/zero/src/server.js +7 -5
- package/out/zero/src/solid.js +2 -2
- package/out/zero/src/zero-cache-dev.js +11 -5
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero/src/zero.js +6 -6
- package/out/zero-cache/src/auth/read-authorizer.d.ts +1 -1
- package/out/zero-cache/src/auth/read-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +25 -17
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +40 -4
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +58 -19
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +3 -6
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +6 -3
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.d.ts.map +1 -1
- package/out/zero-cache/src/scripts/permissions.js +11 -13
- package/out/zero-cache/src/scripts/permissions.js.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts +10 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +34 -18
- 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 +2 -8
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +1 -1
- package/out/zero-cache/src/server/otel-diag-logger.js +1 -21
- package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
- package/out/zero-cache/src/server/otel-start.d.ts.map +1 -1
- package/out/zero-cache/src/server/otel-start.js +1 -5
- package/out/zero-cache/src/server/otel-start.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +7 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/analyze.d.ts +2 -2
- package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
- package/out/zero-cache/src/services/analyze.js +55 -42
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +62 -42
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.js +3 -2
- package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.js +5 -1
- 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/downstream.d.ts +2 -0
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/json.d.ts +8 -0
- package/out/zero-cache/src/services/change-source/protocol/current/json.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/json.js +19 -0
- package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current.js +3 -0
- package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +0 -2
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +0 -5
- 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 +8 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +2 -3
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/http-service.d.ts +0 -1
- package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/http-service.js +0 -4
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +3 -2
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +4 -4
- package/out/zero-cache/src/services/replicator/replication-status.d.ts +2 -0
- package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.js +14 -1
- package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
- package/out/zero-cache/src/services/run-ast.js +5 -1
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +2 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +26 -13
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +39 -15
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +4 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +31 -9
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +3 -0
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +11 -0
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +1 -1
- 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 +11 -11
- 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 +81 -27
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +23 -10
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js +31 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +2 -2
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +19 -4
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +31 -29
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/workers/connect-params.d.ts +1 -0
- package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connect-params.js +2 -0
- package/out/zero-cache/src/workers/connect-params.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +2 -0
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-client/src/client/bindings.d.ts +12 -42
- package/out/zero-client/src/client/bindings.d.ts.map +1 -1
- package/out/zero-client/src/client/connection-manager.d.ts +3 -3
- package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/connection-manager.js.map +1 -1
- package/out/zero-client/src/client/connection.d.ts.map +1 -1
- package/out/zero-client/src/client/connection.js +8 -1
- package/out/zero-client/src/client/connection.js.map +1 -1
- package/out/zero-client/src/client/crud-impl.d.ts +11 -0
- package/out/zero-client/src/client/crud-impl.d.ts.map +1 -0
- package/out/zero-client/src/client/crud-impl.js +102 -0
- package/out/zero-client/src/client/crud-impl.js.map +1 -0
- package/out/zero-client/src/client/crud.d.ts +10 -42
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.js +28 -110
- package/out/zero-client/src/client/crud.js.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +11 -6
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.js +12 -53
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.d.ts +1 -1
- package/out/zero-client/src/client/delete-clients-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.js +30 -3
- package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/error.d.ts +6 -1
- package/out/zero-client/src/client/error.d.ts.map +1 -1
- package/out/zero-client/src/client/error.js +2 -2
- package/out/zero-client/src/client/error.js.map +1 -1
- package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
- package/out/zero-client/src/client/ivm-branch.js +20 -13
- package/out/zero-client/src/client/ivm-branch.js.map +1 -1
- package/out/zero-client/src/client/make-mutate-property.d.ts +6 -9
- package/out/zero-client/src/client/make-mutate-property.d.ts.map +1 -1
- package/out/zero-client/src/client/make-mutate-property.js +5 -10
- package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.d.ts +2 -2
- package/out/zero-client/src/client/make-replicache-mutators.d.ts.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js +16 -11
- package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.d.ts +3 -2
- package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.js +16 -5
- package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
- package/out/zero-client/src/client/options.d.ts +5 -4
- package/out/zero-client/src/client/options.d.ts.map +1 -1
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero.d.ts +27 -13
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +81 -40
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.d.ts +17 -16
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-events/src/status.d.ts +1 -1
- package/out/zero-events/src/status.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.d.ts +2 -2
- package/out/zero-protocol/src/analyze-query-result.js +2 -2
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +2 -2
- package/out/zero-protocol/src/inspect-down.d.ts +6 -6
- package/out/zero-protocol/src/inspect-up.d.ts +4 -4
- package/out/zero-protocol/src/inspect-up.js +1 -1
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +1 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +1 -1
- package/out/zero-react/src/bindings.d.ts +2 -0
- package/out/zero-react/src/bindings.d.ts.map +1 -0
- package/out/zero-react/src/mod.d.ts +1 -10
- package/out/zero-react/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/{use-zero-connection-state.d.ts → use-connection-state.d.ts} +3 -3
- package/out/zero-react/src/use-connection-state.d.ts.map +1 -0
- package/out/zero-react/src/{use-zero-connection-state.js → use-connection-state.js} +3 -3
- package/out/zero-react/src/use-connection-state.js.map +1 -0
- package/out/zero-react/src/use-query.d.ts +4 -10
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-react/src/use-query.js +26 -21
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/use-zero-online.d.ts +1 -1
- package/out/zero-react/src/use-zero-online.js.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +17 -10
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.js +19 -1
- package/out/zero-react/src/zero-provider.js.map +1 -1
- package/out/zero-react/src/zero.d.ts +2 -0
- package/out/zero-react/src/zero.d.ts.map +1 -0
- package/out/zero-schema/src/compiled-permissions.d.ts +22 -2
- package/out/zero-schema/src/compiled-permissions.d.ts.map +1 -1
- package/out/zero-schema/src/compiled-permissions.js +7 -6
- package/out/zero-schema/src/compiled-permissions.js.map +1 -1
- package/out/zero-schema/src/permissions.d.ts +11 -8
- package/out/zero-schema/src/permissions.d.ts.map +1 -1
- package/out/zero-schema/src/permissions.js +2 -8
- package/out/zero-schema/src/permissions.js.map +1 -1
- package/out/zero-schema/src/schema-config.d.ts +0 -5
- package/out/zero-schema/src/schema-config.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.js +1 -1
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-server/src/custom.d.ts +41 -14
- package/out/zero-server/src/custom.d.ts.map +1 -1
- package/out/zero-server/src/custom.js +129 -37
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/mod.d.ts +1 -1
- package/out/zero-server/src/mod.d.ts.map +1 -1
- package/out/zero-server/src/process-mutations.d.ts +10 -6
- package/out/zero-server/src/process-mutations.d.ts.map +1 -1
- package/out/zero-server/src/process-mutations.js +9 -18
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/push-processor.d.ts.map +1 -1
- package/out/zero-server/src/push-processor.js +10 -8
- package/out/zero-server/src/push-processor.js.map +1 -1
- package/out/zero-server/src/queries/process-queries.d.ts +14 -2
- package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
- package/out/zero-server/src/queries/process-queries.js +18 -15
- package/out/zero-server/src/queries/process-queries.js.map +1 -1
- package/out/zero-server/src/zql-database.d.ts +6 -6
- package/out/zero-server/src/zql-database.d.ts.map +1 -1
- package/out/zero-server/src/zql-database.js +5 -17
- package/out/zero-server/src/zql-database.js.map +1 -1
- package/out/zero-solid/src/bindings.d.ts +2 -0
- package/out/zero-solid/src/bindings.d.ts.map +1 -0
- package/out/zero-solid/src/mod.d.ts +1 -8
- package/out/zero-solid/src/mod.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +3 -5
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.js +9 -6
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/{use-zero-connection-state.d.ts → use-connection-state.d.ts} +3 -3
- package/out/zero-solid/src/use-connection-state.d.ts.map +1 -0
- package/out/zero-solid/src/{use-zero-connection-state.js → use-connection-state.js} +3 -3
- package/out/zero-solid/src/use-connection-state.js.map +1 -0
- package/out/zero-solid/src/use-query.d.ts +3 -6
- package/out/zero-solid/src/use-query.d.ts.map +1 -1
- package/out/zero-solid/src/use-query.js +44 -11
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/use-zero-online.d.ts +1 -1
- package/out/zero-solid/src/use-zero-online.js.map +1 -1
- package/out/zero-solid/src/use-zero.d.ts +19 -9
- package/out/zero-solid/src/use-zero.d.ts.map +1 -1
- package/out/zero-solid/src/use-zero.js +17 -1
- package/out/zero-solid/src/use-zero.js.map +1 -1
- package/out/zero-solid/src/zero.d.ts +2 -0
- package/out/zero-solid/src/zero.d.ts.map +1 -0
- package/out/zero-types/src/default-types.d.ts +38 -0
- package/out/zero-types/src/default-types.d.ts.map +1 -0
- package/out/zero-types/src/schema.d.ts +4 -4
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +1 -13
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/error.js +1 -10
- package/out/zql/src/error.js.map +1 -1
- package/out/zql/src/ivm/array-view.d.ts +2 -2
- package/out/zql/src/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/ivm/array-view.js +4 -1
- package/out/zql/src/ivm/array-view.js.map +1 -1
- package/out/zql/src/ivm/data.d.ts +7 -2
- package/out/zql/src/ivm/data.d.ts.map +1 -1
- package/out/zql/src/ivm/data.js +0 -8
- package/out/zql/src/ivm/data.js.map +1 -1
- package/out/zql/src/ivm/exists.d.ts +6 -4
- package/out/zql/src/ivm/exists.d.ts.map +1 -1
- package/out/zql/src/ivm/exists.js +60 -91
- package/out/zql/src/ivm/exists.js.map +1 -1
- package/out/zql/src/ivm/fan-in.d.ts +5 -3
- package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/fan-in.js +12 -5
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/fan-out.d.ts +4 -2
- package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
- package/out/zql/src/ivm/fan-out.js +16 -6
- package/out/zql/src/ivm/fan-out.js.map +1 -1
- package/out/zql/src/ivm/filter-operators.d.ts +13 -11
- package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
- package/out/zql/src/ivm/filter-operators.js +27 -24
- package/out/zql/src/ivm/filter-operators.js.map +1 -1
- package/out/zql/src/ivm/filter-push.d.ts +2 -1
- package/out/zql/src/ivm/filter-push.d.ts.map +1 -1
- package/out/zql/src/ivm/filter-push.js +5 -5
- package/out/zql/src/ivm/filter-push.js.map +1 -1
- package/out/zql/src/ivm/filter.d.ts +4 -2
- package/out/zql/src/ivm/filter.d.ts.map +1 -1
- package/out/zql/src/ivm/filter.js +10 -4
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/flipped-join.d.ts +1 -2
- package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
- package/out/zql/src/ivm/flipped-join.js +133 -103
- package/out/zql/src/ivm/flipped-join.js.map +1 -1
- package/out/zql/src/ivm/join-utils.d.ts +9 -2
- package/out/zql/src/ivm/join-utils.d.ts.map +1 -1
- package/out/zql/src/ivm/join-utils.js +20 -0
- package/out/zql/src/ivm/join-utils.js.map +1 -1
- package/out/zql/src/ivm/join.d.ts +3 -16
- package/out/zql/src/ivm/join.d.ts.map +1 -1
- package/out/zql/src/ivm/join.js +62 -128
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +4 -4
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
- package/out/zql/src/ivm/memory-source.d.ts +7 -6
- package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-source.js +39 -28
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/operator.d.ts +15 -12
- package/out/zql/src/ivm/operator.d.ts.map +1 -1
- package/out/zql/src/ivm/operator.js +8 -0
- package/out/zql/src/ivm/operator.js.map +1 -1
- package/out/zql/src/ivm/push-accumulated.d.ts +2 -2
- package/out/zql/src/ivm/push-accumulated.d.ts.map +1 -1
- package/out/zql/src/ivm/push-accumulated.js +8 -8
- package/out/zql/src/ivm/push-accumulated.js.map +1 -1
- package/out/zql/src/ivm/skip.d.ts +2 -3
- package/out/zql/src/ivm/skip.d.ts.map +1 -1
- package/out/zql/src/ivm/skip.js +14 -11
- package/out/zql/src/ivm/skip.js.map +1 -1
- package/out/zql/src/ivm/source.d.ts +15 -7
- package/out/zql/src/ivm/source.d.ts.map +1 -1
- package/out/zql/src/ivm/stream.d.ts +2 -0
- package/out/zql/src/ivm/stream.d.ts.map +1 -1
- package/out/zql/src/ivm/stream.js +5 -14
- package/out/zql/src/ivm/stream.js.map +1 -1
- package/out/zql/src/ivm/take.d.ts +2 -3
- package/out/zql/src/ivm/take.d.ts.map +1 -1
- package/out/zql/src/ivm/take.js +168 -140
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/union-fan-in.d.ts +4 -4
- package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-in.js +74 -15
- package/out/zql/src/ivm/union-fan-in.js.map +1 -1
- package/out/zql/src/ivm/union-fan-out.d.ts +2 -3
- package/out/zql/src/ivm/union-fan-out.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-out.js +3 -6
- package/out/zql/src/ivm/union-fan-out.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +4 -4
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/ivm/view.d.ts +2 -2
- package/out/zql/src/ivm/view.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.d.ts +116 -0
- package/out/zql/src/mutate/crud.d.ts.map +1 -0
- package/out/zql/src/mutate/crud.js +41 -0
- package/out/zql/src/mutate/crud.js.map +1 -0
- package/out/zql/src/mutate/custom.d.ts +24 -62
- package/out/zql/src/mutate/custom.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.js +1 -5
- package/out/zql/src/mutate/custom.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts +43 -73
- package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js +25 -34
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/mutate/mutator.d.ts +60 -64
- package/out/zql/src/mutate/mutator.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator.js +8 -9
- package/out/zql/src/mutate/mutator.js.map +1 -1
- package/out/zql/src/planner/planner-builder.d.ts +2 -1
- package/out/zql/src/planner/planner-builder.d.ts.map +1 -1
- package/out/zql/src/planner/planner-builder.js +5 -5
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/planner/planner-debug.d.ts +3 -3
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/planner/planner-graph.d.ts +3 -1
- package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
- package/out/zql/src/planner/planner-graph.js +5 -5
- package/out/zql/src/planner/planner-graph.js.map +1 -1
- package/out/zql/src/planner/planner-join.d.ts.map +1 -1
- package/out/zql/src/planner/planner-join.js +3 -1
- package/out/zql/src/planner/planner-join.js.map +1 -1
- package/out/zql/src/query/create-builder.d.ts +4 -1
- package/out/zql/src/query/create-builder.d.ts.map +1 -1
- package/out/zql/src/query/create-builder.js +24 -36
- package/out/zql/src/query/create-builder.js.map +1 -1
- package/out/zql/src/query/expression.d.ts +5 -5
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/measure-push-operator.d.ts +2 -3
- package/out/zql/src/query/measure-push-operator.d.ts.map +1 -1
- package/out/zql/src/query/measure-push-operator.js +2 -5
- package/out/zql/src/query/measure-push-operator.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts +12 -6
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +132 -2
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-delegate.d.ts +6 -6
- package/out/zql/src/query/query-delegate.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +27 -28
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +41 -168
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internals.d.ts +6 -6
- package/out/zql/src/query/query-internals.d.ts.map +1 -1
- package/out/zql/src/query/query-internals.js +2 -2
- package/out/zql/src/query/query-internals.js.map +1 -1
- package/out/zql/src/query/query-registry.d.ts +108 -122
- package/out/zql/src/query/query-registry.d.ts.map +1 -1
- package/out/zql/src/query/query-registry.js +43 -53
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/query.d.ts +63 -37
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.d.ts +22 -0
- package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -0
- package/out/zql/src/query/runnable-query-impl.js +60 -0
- package/out/zql/src/query/runnable-query-impl.js.map +1 -0
- package/out/zql/src/query/schema-query.d.ts +2 -1
- package/out/zql/src/query/schema-query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.d.ts +2 -15
- package/out/zql/src/query/static-query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.js +10 -37
- package/out/zql/src/query/static-query.js.map +1 -1
- package/out/zqlite/src/internal/sql-inline.d.ts +13 -0
- package/out/zqlite/src/internal/sql-inline.d.ts.map +1 -0
- package/out/zqlite/src/internal/sql-inline.js +45 -0
- package/out/zqlite/src/internal/sql-inline.js.map +1 -0
- package/out/zqlite/src/sqlite-cost-model.d.ts.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +2 -2
- package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +10 -3
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +42 -23
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +9 -5
- package/out/zero-client/src/client/bindings.js +0 -33
- package/out/zero-client/src/client/bindings.js.map +0 -1
- package/out/zero-react/src/components/inspector.d.ts +0 -9
- package/out/zero-react/src/components/inspector.d.ts.map +0 -1
- package/out/zero-react/src/components/inspector.js +0 -38
- package/out/zero-react/src/components/inspector.js.map +0 -1
- package/out/zero-react/src/components/mark-icon.d.ts +0 -3
- package/out/zero-react/src/components/mark-icon.d.ts.map +0 -1
- package/out/zero-react/src/components/mark-icon.js +0 -28
- package/out/zero-react/src/components/mark-icon.js.map +0 -1
- package/out/zero-react/src/components/zero-inspector.d.ts +0 -8
- package/out/zero-react/src/components/zero-inspector.d.ts.map +0 -1
- package/out/zero-react/src/components/zero-inspector.js +0 -44
- package/out/zero-react/src/components/zero-inspector.js.map +0 -1
- package/out/zero-react/src/use-zero-connection-state.d.ts.map +0 -1
- package/out/zero-react/src/use-zero-connection-state.js.map +0 -1
- package/out/zero-solid/src/use-zero-connection-state.d.ts.map +0 -1
- package/out/zero-solid/src/use-zero-connection-state.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-config.d.ts","sourceRoot":"","sources":["../../../../zero-schema/src/schema-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAC;AAIhD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"schema-config.d.ts","sourceRoot":"","sources":["../../../../zero-schema/src/schema-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAC;AAIhD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAEjE,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAGnD,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;cAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAKhD,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;cAKvB,CAAC;AAGH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,YAAY,CAGhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-config.js","sources":["../../../../zero-schema/src/schema-config.ts"],"sourcesContent":["import * as v from '../../shared/src/valita.ts';\nimport {compoundKeySchema} from '../../zero-protocol/src/ast.ts';\nimport {valueTypeSchema} from '../../zero-protocol/src/client-schema.ts';\nimport {primaryKeySchema} from '../../zero-protocol/src/primary-key.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport {
|
|
1
|
+
{"version":3,"file":"schema-config.js","sources":["../../../../zero-schema/src/schema-config.ts"],"sourcesContent":["import * as v from '../../shared/src/valita.ts';\nimport {compoundKeySchema} from '../../zero-protocol/src/ast.ts';\nimport {valueTypeSchema} from '../../zero-protocol/src/client-schema.ts';\nimport {primaryKeySchema} from '../../zero-protocol/src/primary-key.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport {type PermissionsConfig} from './compiled-permissions.ts';\nimport type {Relationship, TableSchema} from './table-schema.ts';\n\nexport type SchemaConfig = {\n schema: Schema;\n permissions: PermissionsConfig;\n};\n\nconst relationshipPart = v.readonlyObject({\n sourceField: compoundKeySchema,\n destField: compoundKeySchema,\n destSchema: v.string(),\n cardinality: v.literalUnion('one', 'many'),\n});\n\nexport const relationshipSchema: v.Type<Relationship> = v.union(\n v.readonly(v.tuple([relationshipPart])),\n v.readonly(v.tuple([relationshipPart, relationshipPart])),\n);\n\nexport const schemaValueSchema = v.readonlyObject({\n type: valueTypeSchema,\n serverName: v.string().optional(),\n optional: v.boolean().optional(),\n});\n\nexport const tableSchemaSchema: v.Type<TableSchema> = v.readonlyObject({\n name: v.string(),\n serverName: v.string().optional(),\n columns: v.record(schemaValueSchema),\n primaryKey: primaryKeySchema,\n});\n\nexport const schemaSchema = v.readonlyObject({\n tables: v.record(tableSchemaSchema),\n relationships: v.record(v.record(relationshipSchema)),\n enableLegacyQueries: v.boolean().optional(),\n enableLegacyMutators: v.boolean().optional(),\n});\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isSchemaConfig(value: any): value is SchemaConfig {\n // oxlint-disable-next-line eqeqeq\n return value != null && 'schema' in value;\n}\n"],"names":["v.readonlyObject","v.string","v.literalUnion","v.union","v.readonly","v.tuple","v.boolean","v.record"],"mappings":";;;;;;AAaA,MAAM,mBAAmBA,eAAiB;AAAA,EACxC,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAYC,OAAE;AAAA,EACd,aAAaC,aAAe,OAAO,MAAM;AAC3C,CAAC;AAEM,MAAM,qBAA2CC;AAAAA,EACtDC,SAAWC,MAAQ,CAAC,gBAAgB,CAAC,CAAC;AAAA,EACtCD,SAAWC,MAAQ,CAAC,kBAAkB,gBAAgB,CAAC,CAAC;AAC1D;AAEO,MAAM,oBAAoBL,eAAiB;AAAA,EAChD,MAAM;AAAA,EACN,YAAYC,OAAE,EAAS,SAAA;AAAA,EACvB,UAAUK,QAAE,EAAU,SAAA;AACxB,CAAC;AAEM,MAAM,oBAAyCN,eAAiB;AAAA,EACrE,MAAMC,OAAE;AAAA,EACR,YAAYA,OAAE,EAAS,SAAA;AAAA,EACvB,SAASM,OAAS,iBAAiB;AAAA,EACnC,YAAY;AACd,CAAC;AAE2BP,eAAiB;AAAA,EAC3C,QAAQO,OAAS,iBAAiB;AAAA,EAClC,eAAeA,OAASA,OAAS,kBAAkB,CAAC;AAAA,EACpD,qBAAqBD,QAAE,EAAU,SAAA;AAAA,EACjC,sBAAsBA,QAAE,EAAU,SAAA;AACpC,CAAC;AAGM,SAAS,eAAe,OAAmC;AAEhE,SAAO,SAAS,QAAQ,YAAY;AACtC;"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import type { Schema } from '../../zero-types/src/schema.ts';
|
|
2
2
|
import type { ServerSchema } from '../../zero-types/src/server-schema.ts';
|
|
3
|
-
import
|
|
3
|
+
import { type CRUDExecutor, type TransactionMutate } from '../../zql/src/mutate/crud.ts';
|
|
4
|
+
import type { DBTransaction, MutateCRUD, ServerTransaction } from '../../zql/src/mutate/custom.ts';
|
|
4
5
|
import type { HumanReadable, Query, RunOptions } from '../../zql/src/query/query.ts';
|
|
5
|
-
import type {
|
|
6
|
-
interface ServerTransaction<TSchema extends Schema, TWrappedTransaction> extends TransactionBase<TSchema> {
|
|
7
|
-
readonly location: 'server';
|
|
8
|
-
readonly reason: 'authoritative';
|
|
9
|
-
readonly dbTransaction: DBTransaction<TWrappedTransaction>;
|
|
10
|
-
}
|
|
6
|
+
import type { ConditionalSchemaQuery } from '../../zql/src/query/schema-query.ts';
|
|
11
7
|
export type CustomMutatorDefs<TDBTransaction> = {
|
|
12
8
|
[namespaceOrKey: string]: CustomMutatorImpl<TDBTransaction> | CustomMutatorDefs<TDBTransaction>;
|
|
13
9
|
};
|
|
@@ -19,12 +15,43 @@ export declare class TransactionImpl<TSchema extends Schema, TWrappedTransaction
|
|
|
19
15
|
readonly dbTransaction: DBTransaction<TWrappedTransaction>;
|
|
20
16
|
readonly clientID: string;
|
|
21
17
|
readonly mutationID: number;
|
|
22
|
-
readonly mutate:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
readonly mutate: TransactionMutate<TSchema>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use {@linkcode createBuilder} with `tx.run(zql.table.where(...))` instead.
|
|
21
|
+
*/
|
|
22
|
+
readonly query: ConditionalSchemaQuery<TSchema>;
|
|
23
|
+
constructor(dbTransaction: DBTransaction<TWrappedTransaction>, clientID: string, mutationID: number, mutate: TransactionMutate<TSchema>, schema: TSchema, serverSchema: ServerSchema);
|
|
24
|
+
run<TTable extends keyof TSchema['tables'] & string, TReturn>(query: Query<TTable, TSchema, TReturn>, _options?: RunOptions): Promise<HumanReadable<TReturn>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Factory for creating MutateCRUD instances efficiently.
|
|
28
|
+
*
|
|
29
|
+
* Pre-creates the SQL-generating TableCRUD methods once from the schema,
|
|
30
|
+
* caches the serverSchema after first fetch, and only binds the transaction
|
|
31
|
+
* at transaction time.
|
|
32
|
+
*
|
|
33
|
+
* Use this when you need to create many transactions and want to avoid
|
|
34
|
+
* the overhead of re-creating CRUD methods for each one.
|
|
35
|
+
*/
|
|
36
|
+
export declare class CRUDMutatorFactory<S extends Schema> {
|
|
37
|
+
#private;
|
|
38
|
+
constructor(schema: S);
|
|
39
|
+
/**
|
|
40
|
+
* Creates a CRUDExecutor bound to the given transaction and serverSchema.
|
|
41
|
+
* Uses the pre-created TableCRUD methods from construction time.
|
|
42
|
+
*/
|
|
43
|
+
createExecutor(dbTransaction: DBTransaction<unknown>, serverSchema: ServerSchema): CRUDExecutor;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a full ServerTransaction.
|
|
46
|
+
* Fetches/caches serverSchema automatically.
|
|
47
|
+
*/
|
|
48
|
+
createTransaction<TWrappedTransaction>(dbTransaction: DBTransaction<TWrappedTransaction>, clientID: string, mutationID: number): Promise<TransactionImpl<S, TWrappedTransaction>>;
|
|
26
49
|
}
|
|
27
|
-
export declare function makeServerTransaction<TSchema extends Schema, TWrappedTransaction>(dbTransaction: DBTransaction<TWrappedTransaction>, clientID: string, mutationID: number, schema: TSchema
|
|
28
|
-
|
|
29
|
-
|
|
50
|
+
export declare function makeServerTransaction<TSchema extends Schema, TWrappedTransaction>(dbTransaction: DBTransaction<TWrappedTransaction>, clientID: string, mutationID: number, schema: TSchema): Promise<TransactionImpl<TSchema, TWrappedTransaction>>;
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Use transactions instead.
|
|
53
|
+
*
|
|
54
|
+
* Returns a curried function for backwards compatibility.
|
|
55
|
+
*/
|
|
56
|
+
export declare function makeSchemaCRUD<S extends Schema>(schema: S): (dbTransaction: DBTransaction<unknown>, serverSchema: ServerSchema) => MutateCRUD<S, true>;
|
|
30
57
|
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../zero-server/src/custom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../zero-server/src/custom.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,42 @@
|
|
|
1
1
|
import { assert } from "../../shared/src/asserts.js";
|
|
2
|
+
import { mapValues } from "../../shared/src/objects.js";
|
|
3
|
+
import { recordProxy } from "../../shared/src/record-proxy.js";
|
|
2
4
|
import { formatPgInternalConvert, sql, sqlConvertColumnArg } from "../../z2s/src/sql.js";
|
|
5
|
+
import { makeTransactionMutate, makeCRUDMutate } from "../../zql/src/mutate/crud.js";
|
|
6
|
+
import { createRunnableBuilder } from "../../zql/src/query/create-builder.js";
|
|
7
|
+
import { QueryDelegateBase } from "../../zql/src/query/query-delegate-base.js";
|
|
3
8
|
import { asQueryInternals } from "../../zql/src/query/query-internals.js";
|
|
4
9
|
import { getServerSchema } from "./schema.js";
|
|
10
|
+
class ServerTransactionQueryDelegate extends QueryDelegateBase {
|
|
11
|
+
#dbTransaction;
|
|
12
|
+
#schema;
|
|
13
|
+
#serverSchema;
|
|
14
|
+
defaultQueryComplete = true;
|
|
15
|
+
constructor(dbTransaction, schema, serverSchema) {
|
|
16
|
+
super();
|
|
17
|
+
this.#dbTransaction = dbTransaction;
|
|
18
|
+
this.#schema = schema;
|
|
19
|
+
this.#serverSchema = serverSchema;
|
|
20
|
+
}
|
|
21
|
+
getSource() {
|
|
22
|
+
throw new Error("not implemented");
|
|
23
|
+
}
|
|
24
|
+
run(query, _options) {
|
|
25
|
+
const queryInternals = asQueryInternals(query);
|
|
26
|
+
return this.#dbTransaction.runQuery(
|
|
27
|
+
queryInternals.ast,
|
|
28
|
+
queryInternals.format,
|
|
29
|
+
this.#schema,
|
|
30
|
+
this.#serverSchema
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
preload() {
|
|
34
|
+
throw new Error("preload() is not supported in server transactions");
|
|
35
|
+
}
|
|
36
|
+
materialize() {
|
|
37
|
+
throw new Error("materialize() is not supported in server transactions");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
5
40
|
class TransactionImpl {
|
|
6
41
|
location = "server";
|
|
7
42
|
reason = "authoritative";
|
|
@@ -9,17 +44,25 @@ class TransactionImpl {
|
|
|
9
44
|
clientID;
|
|
10
45
|
mutationID;
|
|
11
46
|
mutate;
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated Use {@linkcode createBuilder} with `tx.run(zql.table.where(...))` instead.
|
|
49
|
+
*/
|
|
12
50
|
query;
|
|
13
51
|
#schema;
|
|
14
52
|
#serverSchema;
|
|
15
|
-
constructor(dbTransaction, clientID, mutationID, mutate,
|
|
53
|
+
constructor(dbTransaction, clientID, mutationID, mutate, schema, serverSchema) {
|
|
16
54
|
this.dbTransaction = dbTransaction;
|
|
17
55
|
this.clientID = clientID;
|
|
18
56
|
this.mutationID = mutationID;
|
|
19
57
|
this.mutate = mutate;
|
|
20
|
-
this.query = query;
|
|
21
58
|
this.#schema = schema;
|
|
22
59
|
this.#serverSchema = serverSchema;
|
|
60
|
+
const delegate = new ServerTransactionQueryDelegate(
|
|
61
|
+
dbTransaction,
|
|
62
|
+
schema,
|
|
63
|
+
serverSchema
|
|
64
|
+
);
|
|
65
|
+
this.query = createRunnableBuilder(delegate, schema);
|
|
23
66
|
}
|
|
24
67
|
run(query, _options) {
|
|
25
68
|
const queryInternals = asQueryInternals(query);
|
|
@@ -33,50 +76,80 @@ class TransactionImpl {
|
|
|
33
76
|
}
|
|
34
77
|
const dbTxSymbol = Symbol();
|
|
35
78
|
const serverSchemaSymbol = Symbol();
|
|
36
|
-
|
|
79
|
+
class CRUDMutatorFactory {
|
|
80
|
+
#schema;
|
|
81
|
+
#tableCRUDs;
|
|
82
|
+
#serverSchema;
|
|
83
|
+
constructor(schema) {
|
|
84
|
+
this.#schema = schema;
|
|
85
|
+
this.#tableCRUDs = {};
|
|
86
|
+
for (const tableSchema of Object.values(schema.tables)) {
|
|
87
|
+
this.#tableCRUDs[tableSchema.name] = makeServerTableCRUD(tableSchema);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets the cached serverSchema, or fetches and caches it on first call.
|
|
92
|
+
*/
|
|
93
|
+
async #getOrFetchServerSchema(dbTransaction) {
|
|
94
|
+
if (!this.#serverSchema) {
|
|
95
|
+
this.#serverSchema = await getServerSchema(dbTransaction, this.#schema);
|
|
96
|
+
}
|
|
97
|
+
return this.#serverSchema;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Creates a CRUDExecutor bound to the given transaction and serverSchema.
|
|
101
|
+
* Uses the pre-created TableCRUD methods from construction time.
|
|
102
|
+
*/
|
|
103
|
+
createExecutor(dbTransaction, serverSchema) {
|
|
104
|
+
const txHolder = {
|
|
105
|
+
[dbTxSymbol]: dbTransaction,
|
|
106
|
+
[serverSchemaSymbol]: serverSchema
|
|
107
|
+
};
|
|
108
|
+
const boundCRUDs = recordProxy(
|
|
109
|
+
this.#tableCRUDs,
|
|
110
|
+
(tableCRUD) => mapValues(tableCRUD, (method) => method.bind(txHolder))
|
|
111
|
+
);
|
|
112
|
+
return (table, kind, args) => {
|
|
113
|
+
const tableCRUD = boundCRUDs[table];
|
|
114
|
+
return tableCRUD[kind](args);
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Creates a full ServerTransaction.
|
|
119
|
+
* Fetches/caches serverSchema automatically.
|
|
120
|
+
*/
|
|
121
|
+
async createTransaction(dbTransaction, clientID, mutationID) {
|
|
122
|
+
const serverSchema = await this.#getOrFetchServerSchema(dbTransaction);
|
|
123
|
+
const executor = this.createExecutor(dbTransaction, serverSchema);
|
|
124
|
+
const mutate = makeTransactionMutate(this.#schema, executor);
|
|
125
|
+
return new TransactionImpl(
|
|
126
|
+
dbTransaction,
|
|
127
|
+
clientID,
|
|
128
|
+
mutationID,
|
|
129
|
+
mutate,
|
|
130
|
+
this.#schema,
|
|
131
|
+
serverSchema
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function makeServerTransaction(dbTransaction, clientID, mutationID, schema) {
|
|
37
136
|
const serverSchema = await getServerSchema(dbTransaction, schema);
|
|
137
|
+
const executor = makeServerCRUDExecutor(schema, dbTransaction, serverSchema);
|
|
138
|
+
const mutate = makeTransactionMutate(schema, executor);
|
|
38
139
|
return new TransactionImpl(
|
|
39
140
|
dbTransaction,
|
|
40
141
|
clientID,
|
|
41
142
|
mutationID,
|
|
42
|
-
mutate
|
|
43
|
-
query,
|
|
143
|
+
mutate,
|
|
44
144
|
schema,
|
|
45
145
|
serverSchema
|
|
46
146
|
);
|
|
47
147
|
}
|
|
48
148
|
function makeSchemaCRUD(schema) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
class CRUDHandler {
|
|
54
|
-
#dbTransaction;
|
|
55
|
-
#serverSchema;
|
|
56
|
-
constructor(dbTransaction, serverSchema) {
|
|
57
|
-
this.#dbTransaction = dbTransaction;
|
|
58
|
-
this.#serverSchema = serverSchema;
|
|
59
|
-
}
|
|
60
|
-
get(target, prop) {
|
|
61
|
-
if (prop in target) {
|
|
62
|
-
return target[prop];
|
|
63
|
-
}
|
|
64
|
-
const txHolder = {
|
|
65
|
-
[dbTxSymbol]: this.#dbTransaction,
|
|
66
|
-
[serverSchemaSymbol]: this.#serverSchema
|
|
67
|
-
};
|
|
68
|
-
target[prop] = Object.fromEntries(
|
|
69
|
-
Object.entries(schemaCRUDs[prop]).map(([name, method]) => [
|
|
70
|
-
name,
|
|
71
|
-
method.bind(txHolder)
|
|
72
|
-
])
|
|
73
|
-
);
|
|
74
|
-
return target[prop];
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return (dbTransaction, serverSchema) => new Proxy(
|
|
78
|
-
{},
|
|
79
|
-
new CRUDHandler(dbTransaction, serverSchema)
|
|
149
|
+
return (dbTransaction, serverSchema) => makeCRUDMutate(
|
|
150
|
+
schema,
|
|
151
|
+
true,
|
|
152
|
+
makeServerCRUDExecutor(schema, dbTransaction, serverSchema)
|
|
80
153
|
);
|
|
81
154
|
}
|
|
82
155
|
function removeUndefined(value) {
|
|
@@ -88,7 +161,25 @@ function removeUndefined(value) {
|
|
|
88
161
|
}
|
|
89
162
|
return valueWithoutUndefined;
|
|
90
163
|
}
|
|
91
|
-
function
|
|
164
|
+
function makeServerCRUDExecutor(schema, dbTransaction, serverSchema) {
|
|
165
|
+
const tableCRUDs = {};
|
|
166
|
+
for (const tableSchema of Object.values(schema.tables)) {
|
|
167
|
+
tableCRUDs[tableSchema.name] = makeServerTableCRUD(tableSchema);
|
|
168
|
+
}
|
|
169
|
+
const txHolder = {
|
|
170
|
+
[dbTxSymbol]: dbTransaction,
|
|
171
|
+
[serverSchemaSymbol]: serverSchema
|
|
172
|
+
};
|
|
173
|
+
const boundCRUDs = recordProxy(
|
|
174
|
+
tableCRUDs,
|
|
175
|
+
(tableCRUD) => mapValues(tableCRUD, (method) => method.bind(txHolder))
|
|
176
|
+
);
|
|
177
|
+
return (table, kind, args) => {
|
|
178
|
+
const tableCRUD = boundCRUDs[table];
|
|
179
|
+
return tableCRUD[kind](args);
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function makeServerTableCRUD(schema) {
|
|
92
183
|
return {
|
|
93
184
|
async insert(value) {
|
|
94
185
|
value = removeUndefined(value);
|
|
@@ -206,6 +297,7 @@ function sqlInsertValue(value, serverColumnSchema) {
|
|
|
206
297
|
return sqlConvertColumnArg(serverColumnSchema, value, false, false);
|
|
207
298
|
}
|
|
208
299
|
export {
|
|
300
|
+
CRUDMutatorFactory,
|
|
209
301
|
TransactionImpl,
|
|
210
302
|
makeSchemaCRUD,
|
|
211
303
|
makeServerTransaction
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.js","sources":["../../../../zero-server/src/custom.ts"],"sourcesContent":["import {assert} from '../../shared/src/asserts.ts';\nimport {\n formatPgInternalConvert,\n sql,\n sqlConvertColumnArg,\n} from '../../z2s/src/sql.ts';\nimport type {TableSchema} from '../../zero-schema/src/table-schema.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport type {\n ServerColumnSchema,\n ServerSchema,\n ServerTableSchema,\n} from '../../zero-types/src/server-schema.ts';\nimport type {\n DBTransaction,\n SchemaCRUD,\n TableCRUD,\n TransactionBase,\n} from '../../zql/src/mutate/custom.ts';\nimport {asQueryInternals} from '../../zql/src/query/query-internals.ts';\nimport type {\n HumanReadable,\n Query,\n RunOptions,\n} from '../../zql/src/query/query.ts';\nimport type {SchemaQuery} from '../../zql/src/query/schema-query.ts';\nimport {getServerSchema} from './schema.ts';\n\ninterface ServerTransaction<TSchema extends Schema, TWrappedTransaction>\n extends TransactionBase<TSchema> {\n readonly location: 'server';\n readonly reason: 'authoritative';\n readonly dbTransaction: DBTransaction<TWrappedTransaction>;\n}\n\nexport type CustomMutatorDefs<TDBTransaction> = {\n [namespaceOrKey: string]:\n | CustomMutatorImpl<TDBTransaction>\n | CustomMutatorDefs<TDBTransaction>;\n};\n\nexport type CustomMutatorImpl<\n TDBTransaction,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n TArgs = any,\n Context = unknown,\n> = (tx: TDBTransaction, args: TArgs, ctx: Context) => Promise<void>;\n\nexport class TransactionImpl<TSchema extends Schema, TWrappedTransaction>\n implements ServerTransaction<TSchema, TWrappedTransaction>\n{\n readonly location = 'server';\n readonly reason = 'authoritative';\n readonly dbTransaction: DBTransaction<TWrappedTransaction>;\n readonly clientID: string;\n readonly mutationID: number;\n readonly mutate: SchemaCRUD<TSchema>;\n readonly query: SchemaQuery<TSchema>;\n readonly #schema: TSchema;\n readonly #serverSchema: ServerSchema;\n\n constructor(\n dbTransaction: DBTransaction<TWrappedTransaction>,\n clientID: string,\n mutationID: number,\n mutate: SchemaCRUD<TSchema>,\n query: SchemaQuery<TSchema>,\n schema: TSchema,\n serverSchema: ServerSchema,\n ) {\n this.dbTransaction = dbTransaction;\n this.clientID = clientID;\n this.mutationID = mutationID;\n this.mutate = mutate;\n this.query = query;\n this.#schema = schema;\n this.#serverSchema = serverSchema;\n }\n\n run<TTable extends keyof TSchema['tables'] & string, TReturn>(\n query: Query<TSchema, TTable, TReturn>,\n _options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n const queryInternals = asQueryInternals(query);\n\n // Execute the query using the database-specific executor\n return this.dbTransaction.runQuery<TReturn>(\n queryInternals.ast,\n queryInternals.format,\n this.#schema,\n this.#serverSchema,\n );\n }\n}\n\nconst dbTxSymbol = Symbol();\n\nconst serverSchemaSymbol = Symbol();\n\ntype WithHiddenTxAndSchema = {\n [dbTxSymbol]: DBTransaction<unknown>;\n [serverSchemaSymbol]: ServerSchema;\n};\n\nexport async function makeServerTransaction<\n TSchema extends Schema,\n TWrappedTransaction,\n>(\n dbTransaction: DBTransaction<TWrappedTransaction>,\n clientID: string,\n mutationID: number,\n schema: TSchema,\n mutate: (\n dbTransaction: DBTransaction<TWrappedTransaction>,\n serverSchema: ServerSchema,\n ) => SchemaCRUD<TSchema>,\n query: SchemaQuery<TSchema>,\n) {\n const serverSchema = await getServerSchema(dbTransaction, schema);\n return new TransactionImpl(\n dbTransaction,\n clientID,\n mutationID,\n mutate(dbTransaction, serverSchema),\n query,\n schema,\n serverSchema,\n );\n}\n\nexport function makeSchemaCRUD<S extends Schema>(\n schema: S,\n): (\n dbTransaction: DBTransaction<unknown>,\n serverSchema: ServerSchema,\n) => SchemaCRUD<S> {\n const schemaCRUDs: Record<string, TableCRUD<TableSchema>> = {};\n for (const tableSchema of Object.values(schema.tables)) {\n schemaCRUDs[tableSchema.name] = makeTableCRUD(tableSchema);\n }\n\n /**\n * For users with very large schemas it is expensive to re-create\n * all the CRUD mutators for each transaction. Instead, we create\n * them all once up-front and then bind them to the transaction\n * as requested.\n */\n class CRUDHandler {\n readonly #dbTransaction: DBTransaction<unknown>;\n readonly #serverSchema: ServerSchema;\n constructor(\n dbTransaction: DBTransaction<unknown>,\n serverSchema: ServerSchema,\n ) {\n this.#dbTransaction = dbTransaction;\n this.#serverSchema = serverSchema;\n }\n\n get(target: Record<string, TableCRUD<TableSchema>>, prop: string) {\n if (prop in target) {\n return target[prop];\n }\n\n const txHolder: WithHiddenTxAndSchema = {\n [dbTxSymbol]: this.#dbTransaction,\n [serverSchemaSymbol]: this.#serverSchema,\n };\n target[prop] = Object.fromEntries(\n Object.entries(schemaCRUDs[prop]).map(([name, method]) => [\n name,\n method.bind(txHolder),\n ]),\n ) as TableCRUD<TableSchema>;\n\n return target[prop];\n }\n }\n\n return (dbTransaction: DBTransaction<unknown>, serverSchema: ServerSchema) =>\n new Proxy(\n {},\n new CRUDHandler(dbTransaction, serverSchema),\n ) as SchemaCRUD<S>;\n}\n\nfunction removeUndefined<T extends Record<string, unknown>>(value: T): T {\n const valueWithoutUndefined: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n if (val !== undefined) {\n valueWithoutUndefined[key] = val;\n }\n }\n return valueWithoutUndefined as T;\n}\n\nfunction makeTableCRUD(schema: TableSchema): TableCRUD<TableSchema> {\n return {\n async insert(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n\n const targetedColumns = origAndServerNamesFor(Object.keys(value), schema);\n const stmt = formatPgInternalConvert(\n sql`INSERT INTO ${sql.ident(serverName(schema))} (${sql.join(\n targetedColumns.map(([, serverName]) => sql.ident(serverName)),\n ',',\n )}) VALUES (${sql.join(\n Object.entries(value).map(([col, v]) =>\n sqlInsertValue(v, serverTableSchema[serverNameFor(col, schema)]),\n ),\n ', ',\n )})`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n async upsert(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n const targetedColumns = origAndServerNamesFor(Object.keys(value), schema);\n const primaryKeyColumns = origAndServerNamesFor(\n schema.primaryKey,\n schema,\n );\n const stmt = formatPgInternalConvert(\n sql`INSERT INTO ${sql.ident(serverName(schema))} (${sql.join(\n targetedColumns.map(([, serverName]) => sql.ident(serverName)),\n ',',\n )}) VALUES (${sql.join(\n Object.entries(value).map(([col, val]) =>\n sqlInsertValue(val, serverTableSchema[serverNameFor(col, schema)]),\n ),\n ', ',\n )}) ON CONFLICT (${sql.join(\n primaryKeyColumns.map(([, serverName]) => sql.ident(serverName)),\n ', ',\n )}) DO UPDATE SET ${sql.join(\n Object.entries(value).map(\n ([col, val]) =>\n sql`${sql.ident(\n schema.columns[col].serverName ?? col,\n )} = ${sqlInsertValue(val, serverTableSchema[serverNameFor(col, schema)])}`,\n ),\n ', ',\n )}`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n async update(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n const targetedColumns = origAndServerNamesFor(Object.keys(value), schema);\n const stmt = formatPgInternalConvert(\n sql`UPDATE ${sql.ident(serverName(schema))} SET ${sql.join(\n targetedColumns.map(\n ([origName, serverName]) =>\n sql`${sql.ident(serverName)} = ${sqlInsertValue(value[origName], serverTableSchema[serverName])}`,\n ),\n ', ',\n )} WHERE ${primaryKeyClause(schema, serverTableSchema, value)}`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n async delete(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n const stmt = formatPgInternalConvert(\n sql`DELETE FROM ${sql.ident(\n serverName(schema),\n )} WHERE ${primaryKeyClause(schema, serverTableSchema, value)}`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n };\n}\n\nfunction serverName(x: {name: string; serverName?: string | undefined}) {\n return x.serverName ?? x.name;\n}\n\nfunction primaryKeyClause(\n schema: TableSchema,\n serverTableSchema: ServerTableSchema,\n row: Record<string, unknown>,\n) {\n const primaryKey = origAndServerNamesFor(schema.primaryKey, schema);\n return sql`${sql.join(\n primaryKey.map(\n ([origName, serverName]) =>\n sql`${sql.ident(serverName)}${maybeCastColumn(serverTableSchema[serverName])} = ${sqlValue(row[origName], serverTableSchema[serverName])}`,\n ),\n ' AND ',\n )}`;\n}\n\nfunction maybeCastColumn(col: ServerColumnSchema) {\n if (col.type === 'uuid' || col.isEnum) {\n return sql`::text`;\n }\n return sql``;\n}\n\nfunction origAndServerNamesFor(\n originalNames: readonly string[],\n schema: TableSchema,\n): [origName: string, serverName: string][] {\n return originalNames.map(\n name => [name, serverNameFor(name, schema)] as const,\n );\n}\n\nfunction serverNameFor(originalName: string, schema: TableSchema): string {\n const col = schema.columns[originalName];\n assert(\n col,\n `Column ${originalName} was not found in the Zero schema for the table ${schema.name}`,\n );\n return col.serverName ?? originalName;\n}\n\nfunction sqlValue(value: unknown, serverColumnSchema: ServerColumnSchema) {\n return sqlConvertColumnArg(serverColumnSchema, value, false, true);\n}\n\nfunction sqlInsertValue(\n value: unknown,\n serverColumnSchema: ServerColumnSchema,\n) {\n return sqlConvertColumnArg(serverColumnSchema, value, false, false);\n}\n"],"names":["serverName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"custom.js","sources":["../../../../zero-server/src/custom.ts"],"sourcesContent":["import {assert} from '../../shared/src/asserts.ts';\nimport {mapValues} from '../../shared/src/objects.ts';\nimport {recordProxy} from '../../shared/src/record-proxy.ts';\nimport {\n formatPgInternalConvert,\n sql,\n sqlConvertColumnArg,\n} from '../../z2s/src/sql.ts';\nimport type {TableSchema} from '../../zero-schema/src/table-schema.ts';\nimport type {Schema} from '../../zero-types/src/schema.ts';\nimport type {\n ServerColumnSchema,\n ServerSchema,\n ServerTableSchema,\n} from '../../zero-types/src/server-schema.ts';\nimport {\n type CRUDExecutor,\n type CRUDKind,\n makeCRUDMutate,\n makeTransactionMutate,\n type SchemaCRUD,\n type TableCRUD,\n type TransactionMutate,\n} from '../../zql/src/mutate/crud.ts';\nimport type {\n DBTransaction,\n MutateCRUD,\n ServerTransaction,\n} from '../../zql/src/mutate/custom.ts';\nimport {createRunnableBuilder} from '../../zql/src/query/create-builder.ts';\nimport {QueryDelegateBase} from '../../zql/src/query/query-delegate-base.ts';\nimport {asQueryInternals} from '../../zql/src/query/query-internals.ts';\nimport type {\n HumanReadable,\n Query,\n RunOptions,\n} from '../../zql/src/query/query.ts';\nimport type {ConditionalSchemaQuery} from '../../zql/src/query/schema-query.ts';\nimport {getServerSchema} from './schema.ts';\n\nexport type CustomMutatorDefs<TDBTransaction> = {\n [namespaceOrKey: string]:\n | CustomMutatorImpl<TDBTransaction>\n | CustomMutatorDefs<TDBTransaction>;\n};\n\nexport type CustomMutatorImpl<\n TDBTransaction,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n TArgs = any,\n Context = unknown,\n> = (tx: TDBTransaction, args: TArgs, ctx: Context) => Promise<void>;\n\n/**\n * QueryDelegate implementation for server-side transactions.\n * Extends QueryDelegateBase to satisfy the QueryDelegate interface,\n * but overrides run() to execute against Postgres and throws on\n * preload()/materialize() which don't make sense server-side.\n */\nclass ServerTransactionQueryDelegate extends QueryDelegateBase {\n readonly #dbTransaction: DBTransaction<unknown>;\n readonly #schema: Schema;\n readonly #serverSchema: ServerSchema;\n\n readonly defaultQueryComplete = true;\n\n constructor(\n dbTransaction: DBTransaction<unknown>,\n schema: Schema,\n serverSchema: ServerSchema,\n ) {\n super();\n this.#dbTransaction = dbTransaction;\n this.#schema = schema;\n this.#serverSchema = serverSchema;\n }\n\n getSource(): never {\n throw new Error('not implemented');\n }\n\n override run<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n _options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n const queryInternals = asQueryInternals(query);\n return this.#dbTransaction.runQuery<TReturn>(\n queryInternals.ast,\n queryInternals.format,\n this.#schema,\n this.#serverSchema,\n );\n }\n\n override preload(): never {\n throw new Error('preload() is not supported in server transactions');\n }\n\n override materialize(): never {\n throw new Error('materialize() is not supported in server transactions');\n }\n}\n\nexport class TransactionImpl<TSchema extends Schema, TWrappedTransaction>\n implements ServerTransaction<TSchema, TWrappedTransaction>\n{\n readonly location = 'server';\n readonly reason = 'authoritative';\n readonly dbTransaction: DBTransaction<TWrappedTransaction>;\n readonly clientID: string;\n readonly mutationID: number;\n readonly mutate: TransactionMutate<TSchema>;\n /**\n * @deprecated Use {@linkcode createBuilder} with `tx.run(zql.table.where(...))` instead.\n */\n readonly query: ConditionalSchemaQuery<TSchema>;\n\n readonly #schema: TSchema;\n readonly #serverSchema: ServerSchema;\n\n constructor(\n dbTransaction: DBTransaction<TWrappedTransaction>,\n clientID: string,\n mutationID: number,\n mutate: TransactionMutate<TSchema>,\n schema: TSchema,\n serverSchema: ServerSchema,\n ) {\n this.dbTransaction = dbTransaction;\n this.clientID = clientID;\n this.mutationID = mutationID;\n this.mutate = mutate;\n this.#schema = schema;\n this.#serverSchema = serverSchema;\n\n const delegate = new ServerTransactionQueryDelegate(\n dbTransaction,\n schema,\n serverSchema,\n );\n this.query = createRunnableBuilder(delegate, schema);\n }\n\n run<TTable extends keyof TSchema['tables'] & string, TReturn>(\n query: Query<TTable, TSchema, TReturn>,\n _options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n const queryInternals = asQueryInternals(query);\n\n // Execute the query using the database-specific executor\n return this.dbTransaction.runQuery<TReturn>(\n queryInternals.ast,\n queryInternals.format,\n this.#schema,\n this.#serverSchema,\n );\n }\n}\n\nconst dbTxSymbol = Symbol();\n\nconst serverSchemaSymbol = Symbol();\n\ntype WithHiddenTxAndSchema = {\n [dbTxSymbol]: DBTransaction<unknown>;\n [serverSchemaSymbol]: ServerSchema;\n};\n\n/**\n * Factory for creating MutateCRUD instances efficiently.\n *\n * Pre-creates the SQL-generating TableCRUD methods once from the schema,\n * caches the serverSchema after first fetch, and only binds the transaction\n * at transaction time.\n *\n * Use this when you need to create many transactions and want to avoid\n * the overhead of re-creating CRUD methods for each one.\n */\nexport class CRUDMutatorFactory<S extends Schema> {\n readonly #schema: S;\n readonly #tableCRUDs: Record<string, TableCRUD<TableSchema>>;\n #serverSchema: ServerSchema | undefined;\n\n constructor(schema: S) {\n this.#schema = schema;\n // Pre-create TableCRUD methods for each table once\n this.#tableCRUDs = {};\n for (const tableSchema of Object.values(schema.tables)) {\n this.#tableCRUDs[tableSchema.name] = makeServerTableCRUD(tableSchema);\n }\n }\n\n /**\n * Gets the cached serverSchema, or fetches and caches it on first call.\n */\n async #getOrFetchServerSchema(\n dbTransaction: DBTransaction<unknown>,\n ): Promise<ServerSchema> {\n if (!this.#serverSchema) {\n this.#serverSchema = await getServerSchema(dbTransaction, this.#schema);\n }\n return this.#serverSchema;\n }\n\n /**\n * Creates a CRUDExecutor bound to the given transaction and serverSchema.\n * Uses the pre-created TableCRUD methods from construction time.\n */\n createExecutor(\n dbTransaction: DBTransaction<unknown>,\n serverSchema: ServerSchema,\n ): CRUDExecutor {\n const txHolder: WithHiddenTxAndSchema = {\n [dbTxSymbol]: dbTransaction,\n [serverSchemaSymbol]: serverSchema,\n };\n const boundCRUDs = recordProxy(this.#tableCRUDs, tableCRUD =>\n mapValues(tableCRUD, method => method.bind(txHolder)),\n ) as unknown as SchemaCRUD<S>;\n\n return (table: string, kind: CRUDKind, args: unknown) => {\n const tableCRUD = boundCRUDs[table as keyof S['tables']];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return (tableCRUD as any)[kind](args);\n };\n }\n\n /**\n * Creates a full ServerTransaction.\n * Fetches/caches serverSchema automatically.\n */\n async createTransaction<TWrappedTransaction>(\n dbTransaction: DBTransaction<TWrappedTransaction>,\n clientID: string,\n mutationID: number,\n ): Promise<TransactionImpl<S, TWrappedTransaction>> {\n const serverSchema = await this.#getOrFetchServerSchema(dbTransaction);\n const executor = this.createExecutor(dbTransaction, serverSchema);\n const mutate = makeTransactionMutate(this.#schema, executor);\n return new TransactionImpl(\n dbTransaction,\n clientID,\n mutationID,\n mutate,\n this.#schema,\n serverSchema,\n );\n }\n}\n\nexport async function makeServerTransaction<\n TSchema extends Schema,\n TWrappedTransaction,\n>(\n dbTransaction: DBTransaction<TWrappedTransaction>,\n clientID: string,\n mutationID: number,\n schema: TSchema,\n) {\n const serverSchema = await getServerSchema(dbTransaction, schema);\n // Use the internal executor and shared function directly,\n // bypassing the validation in makeMutateCRUD/makeSchemaCRUD\n const executor = makeServerCRUDExecutor(schema, dbTransaction, serverSchema);\n const mutate = makeTransactionMutate(schema, executor);\n return new TransactionImpl(\n dbTransaction,\n clientID,\n mutationID,\n mutate,\n schema,\n serverSchema,\n );\n}\n\n/**\n * @deprecated Use transactions instead.\n *\n * Returns a curried function for backwards compatibility.\n */\nexport function makeSchemaCRUD<S extends Schema>(\n schema: S,\n): (\n dbTransaction: DBTransaction<unknown>,\n serverSchema: ServerSchema,\n) => MutateCRUD<S, true> {\n return (dbTransaction: DBTransaction<unknown>, serverSchema: ServerSchema) =>\n makeCRUDMutate(\n schema,\n true,\n makeServerCRUDExecutor(schema, dbTransaction, serverSchema),\n );\n}\n\nfunction removeUndefined<T extends Record<string, unknown>>(value: T): T {\n const valueWithoutUndefined: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n if (val !== undefined) {\n valueWithoutUndefined[key] = val;\n }\n }\n return valueWithoutUndefined as T;\n}\n\n/**\n * Creates a CRUDExecutor for server-side SQL execution.\n *\n * For users with very large schemas it is expensive to re-create\n * all the CRUD mutators for each transaction. Instead, we create\n * the SQL-generating methods once up-front and then bind them to\n * the transaction as requested.\n */\nfunction makeServerCRUDExecutor<S extends Schema>(\n schema: S,\n dbTransaction: DBTransaction<unknown>,\n serverSchema: ServerSchema,\n): CRUDExecutor {\n // Pre-create TableCRUD methods for each table (optimization for large schemas)\n const tableCRUDs: Record<string, TableCRUD<TableSchema>> = {};\n for (const tableSchema of Object.values(schema.tables)) {\n tableCRUDs[tableSchema.name] = makeServerTableCRUD(tableSchema);\n }\n\n // Bind transaction context to the methods\n const txHolder: WithHiddenTxAndSchema = {\n [dbTxSymbol]: dbTransaction,\n [serverSchemaSymbol]: serverSchema,\n };\n const boundCRUDs = recordProxy(tableCRUDs, tableCRUD =>\n mapValues(tableCRUD, method => method.bind(txHolder)),\n ) as unknown as SchemaCRUD<S>;\n\n // Return executor that dispatches to bound methods\n return (table: string, kind: CRUDKind, args: unknown) => {\n const tableCRUD = boundCRUDs[table as keyof S['tables']];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return (tableCRUD as any)[kind](args);\n };\n}\n\n/**\n * Creates SQL-generating TableCRUD methods for a table.\n * Methods use `this` context to access transaction and server schema.\n */\nfunction makeServerTableCRUD(schema: TableSchema): TableCRUD<TableSchema> {\n return {\n async insert(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n\n const targetedColumns = origAndServerNamesFor(Object.keys(value), schema);\n const stmt = formatPgInternalConvert(\n sql`INSERT INTO ${sql.ident(serverName(schema))} (${sql.join(\n targetedColumns.map(([, serverName]) => sql.ident(serverName)),\n ',',\n )}) VALUES (${sql.join(\n Object.entries(value).map(([col, v]) =>\n sqlInsertValue(v, serverTableSchema[serverNameFor(col, schema)]),\n ),\n ', ',\n )})`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n async upsert(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n const targetedColumns = origAndServerNamesFor(Object.keys(value), schema);\n const primaryKeyColumns = origAndServerNamesFor(\n schema.primaryKey,\n schema,\n );\n const stmt = formatPgInternalConvert(\n sql`INSERT INTO ${sql.ident(serverName(schema))} (${sql.join(\n targetedColumns.map(([, serverName]) => sql.ident(serverName)),\n ',',\n )}) VALUES (${sql.join(\n Object.entries(value).map(([col, val]) =>\n sqlInsertValue(val, serverTableSchema[serverNameFor(col, schema)]),\n ),\n ', ',\n )}) ON CONFLICT (${sql.join(\n primaryKeyColumns.map(([, serverName]) => sql.ident(serverName)),\n ', ',\n )}) DO UPDATE SET ${sql.join(\n Object.entries(value).map(\n ([col, val]) =>\n sql`${sql.ident(\n schema.columns[col].serverName ?? col,\n )} = ${sqlInsertValue(val, serverTableSchema[serverNameFor(col, schema)])}`,\n ),\n ', ',\n )}`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n async update(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n const targetedColumns = origAndServerNamesFor(Object.keys(value), schema);\n const stmt = formatPgInternalConvert(\n sql`UPDATE ${sql.ident(serverName(schema))} SET ${sql.join(\n targetedColumns.map(\n ([origName, serverName]) =>\n sql`${sql.ident(serverName)} = ${sqlInsertValue(value[origName], serverTableSchema[serverName])}`,\n ),\n ', ',\n )} WHERE ${primaryKeyClause(schema, serverTableSchema, value)}`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n async delete(this: WithHiddenTxAndSchema, value) {\n value = removeUndefined(value);\n const serverTableSchema = this[serverSchemaSymbol][serverName(schema)];\n const stmt = formatPgInternalConvert(\n sql`DELETE FROM ${sql.ident(\n serverName(schema),\n )} WHERE ${primaryKeyClause(schema, serverTableSchema, value)}`,\n );\n const tx = this[dbTxSymbol];\n await tx.query(stmt.text, stmt.values);\n },\n };\n}\n\nfunction serverName(x: {name: string; serverName?: string | undefined}) {\n return x.serverName ?? x.name;\n}\n\nfunction primaryKeyClause(\n schema: TableSchema,\n serverTableSchema: ServerTableSchema,\n row: Record<string, unknown>,\n) {\n const primaryKey = origAndServerNamesFor(schema.primaryKey, schema);\n return sql`${sql.join(\n primaryKey.map(\n ([origName, serverName]) =>\n sql`${sql.ident(serverName)}${maybeCastColumn(serverTableSchema[serverName])} = ${sqlValue(row[origName], serverTableSchema[serverName])}`,\n ),\n ' AND ',\n )}`;\n}\n\nfunction maybeCastColumn(col: ServerColumnSchema) {\n if (col.type === 'uuid' || col.isEnum) {\n return sql`::text`;\n }\n return sql``;\n}\n\nfunction origAndServerNamesFor(\n originalNames: readonly string[],\n schema: TableSchema,\n): [origName: string, serverName: string][] {\n return originalNames.map(\n name => [name, serverNameFor(name, schema)] as const,\n );\n}\n\nfunction serverNameFor(originalName: string, schema: TableSchema): string {\n const col = schema.columns[originalName];\n assert(\n col,\n `Column ${originalName} was not found in the Zero schema for the table ${schema.name}`,\n );\n return col.serverName ?? originalName;\n}\n\nfunction sqlValue(value: unknown, serverColumnSchema: ServerColumnSchema) {\n return sqlConvertColumnArg(serverColumnSchema, value, false, true);\n}\n\nfunction sqlInsertValue(\n value: unknown,\n serverColumnSchema: ServerColumnSchema,\n) {\n return sqlConvertColumnArg(serverColumnSchema, value, false, false);\n}\n"],"names":["serverName"],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ export * from './custom.ts';
|
|
|
4
4
|
export * from './process-mutations.ts';
|
|
5
5
|
export * from './push-processor.ts';
|
|
6
6
|
export * from './queries/process-queries.ts';
|
|
7
|
-
export { handleTransformRequest, type TransformQueryFunction, } from './queries/process-queries.ts';
|
|
7
|
+
export { handleQueryRequest, handleTransformRequest, handleGetQueriesRequest, type TransformQueryFunction, } from './queries/process-queries.ts';
|
|
8
8
|
export * from './zql-database.ts';
|
|
9
9
|
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../zero-server/src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../zero-server/src/mod.ts"],"names":[],"mappings":"AAAA,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
|
|
@@ -26,14 +26,18 @@ export interface Database<T> {
|
|
|
26
26
|
}
|
|
27
27
|
export type ExtractTransactionType<D> = D extends Database<infer T> ? T : never;
|
|
28
28
|
export type Params = v.Infer<typeof pushParamsSchema>;
|
|
29
|
-
export type TransactFn<D extends Database<ExtractTransactionType<D
|
|
30
|
-
export type TransactFnCallback<D extends Database<ExtractTransactionType<D
|
|
31
|
-
export type Parsed<D extends Database<ExtractTransactionType<D
|
|
32
|
-
transact: TransactFn<D
|
|
29
|
+
export type TransactFn<D extends Database<ExtractTransactionType<D>>> = (cb: TransactFnCallback<D>) => Promise<MutationResponse>;
|
|
30
|
+
export type TransactFnCallback<D extends Database<ExtractTransactionType<D>>> = (tx: ExtractTransactionType<D>, mutatorName: string, mutatorArgs: ReadonlyJSONValue | undefined) => Promise<void>;
|
|
31
|
+
export type Parsed<D extends Database<ExtractTransactionType<D>>> = {
|
|
32
|
+
transact: TransactFn<D>;
|
|
33
33
|
mutations: CustomMutation[];
|
|
34
34
|
};
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Use {@linkcode handleMutateRequest} instead.
|
|
37
|
+
*/
|
|
38
|
+
export declare const handleMutationRequest: typeof handleMutateRequest;
|
|
39
|
+
export declare function handleMutateRequest<D extends Database<ExtractTransactionType<D>>>(dbProvider: D, cb: (transact: TransactFn<D>, mutation: CustomMutation) => Promise<MutationResponse>, queryString: URLSearchParams | Record<string, string>, body: ReadonlyJSONValue, logLevel?: LogLevel): Promise<PushResponse>;
|
|
40
|
+
export declare function handleMutateRequest<D extends Database<ExtractTransactionType<D>>>(dbProvider: D, cb: (transact: TransactFn<D>, mutation: CustomMutation) => Promise<MutationResponse>, request: Request, logLevel?: LogLevel): Promise<PushResponse>;
|
|
37
41
|
export declare class OutOfOrderMutation extends Error {
|
|
38
42
|
constructor(clientID: string, receivedMutationID: number, lastMutationID: number | bigint);
|
|
39
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-mutations.d.ts","sourceRoot":"","sources":["../../../../zero-server/src/process-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAG3D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAC;AAWhD,OAAO,EAEL,gBAAgB,EAChB,KAAK,cAAc,EAGnB,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,0CAA0C,CAAC;AAEjF,OAAO,KAAK,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAGtE,MAAM,WAAW,wBAAwB;IACvC,sBAAsB,EAAE,MAAM,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC,CAAC;IACzE,mBAAmB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC,CAAC,EACb,QAAQ,EAAE,CACR,EAAE,EAAE,CAAC,EACL,gBAAgB,EAAE,wBAAwB,KACvC,YAAY,CAAC,CAAC,CAAC,EACpB,gBAAgB,CAAC,EAAE,wBAAwB,KACxC,OAAO,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEtD,MAAM,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"process-mutations.d.ts","sourceRoot":"","sources":["../../../../zero-server/src/process-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,17 +20,16 @@ const applicationErrorWrapper = async (fn) => {
|
|
|
20
20
|
throw wrapWithApplicationError(error);
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
const handleMutationRequest = handleMutateRequest;
|
|
24
|
+
async function handleMutateRequest(dbProvider, cb, queryStringOrRequest, bodyOrLogLevel, logLevel) {
|
|
24
25
|
const isRequestOverload = queryStringOrRequest instanceof Request;
|
|
25
26
|
let request;
|
|
26
27
|
let queryString;
|
|
27
28
|
let jsonBody;
|
|
28
|
-
let context;
|
|
29
29
|
let lc;
|
|
30
30
|
if (isRequestOverload) {
|
|
31
31
|
request = queryStringOrRequest;
|
|
32
|
-
|
|
33
|
-
const level = contextOrLogLevel ?? "info";
|
|
32
|
+
const level = bodyOrLogLevel ?? "info";
|
|
34
33
|
lc = createLogContext(level).withContext("PushProcessor");
|
|
35
34
|
const url = new URL(request.url);
|
|
36
35
|
queryString = url.searchParams;
|
|
@@ -51,8 +50,7 @@ async function handleMutationRequest(dbProvider, cb, queryStringOrRequest, bodyO
|
|
|
51
50
|
}
|
|
52
51
|
} else {
|
|
53
52
|
queryString = queryStringOrRequest;
|
|
54
|
-
jsonBody =
|
|
55
|
-
context = contextOrLogLevel;
|
|
53
|
+
jsonBody = bodyOrLogLevel;
|
|
56
54
|
const level = logLevel ?? "info";
|
|
57
55
|
lc = createLogContext(level).withContext("PushProcessor");
|
|
58
56
|
}
|
|
@@ -107,13 +105,7 @@ async function handleMutationRequest(dbProvider, cb, queryStringOrRequest, bodyO
|
|
|
107
105
|
const responses = [];
|
|
108
106
|
let processedCount = 0;
|
|
109
107
|
try {
|
|
110
|
-
const transactor = new Transactor(
|
|
111
|
-
dbProvider,
|
|
112
|
-
pushBody,
|
|
113
|
-
queryParams,
|
|
114
|
-
lc,
|
|
115
|
-
context
|
|
116
|
-
);
|
|
108
|
+
const transactor = new Transactor(dbProvider, pushBody, queryParams, lc);
|
|
117
109
|
for (const m of pushBody.mutations) {
|
|
118
110
|
assert(m.type === "custom", "Expected custom mutation");
|
|
119
111
|
lc.debug?.(
|
|
@@ -125,7 +117,7 @@ async function handleMutationRequest(dbProvider, cb, queryStringOrRequest, bodyO
|
|
|
125
117
|
mutationPhase = "transactionPending";
|
|
126
118
|
const result = await transactor.transact(
|
|
127
119
|
m,
|
|
128
|
-
(tx, name, args) => applicationErrorWrapper(() => innerCb(tx, name, args
|
|
120
|
+
(tx, name, args) => applicationErrorWrapper(() => innerCb(tx, name, args))
|
|
129
121
|
);
|
|
130
122
|
mutationPhase = "postCommit";
|
|
131
123
|
return result;
|
|
@@ -178,13 +170,11 @@ class Transactor {
|
|
|
178
170
|
#req;
|
|
179
171
|
#params;
|
|
180
172
|
#lc;
|
|
181
|
-
|
|
182
|
-
constructor(dbProvider, req, params, lc, context) {
|
|
173
|
+
constructor(dbProvider, req, params, lc) {
|
|
183
174
|
this.#dbProvider = dbProvider;
|
|
184
175
|
this.#req = req;
|
|
185
176
|
this.#params = params;
|
|
186
177
|
this.#lc = lc;
|
|
187
|
-
this.#context = context;
|
|
188
178
|
}
|
|
189
179
|
transact = async (mutation, cb) => {
|
|
190
180
|
let appError = void 0;
|
|
@@ -258,7 +248,7 @@ class Transactor {
|
|
|
258
248
|
`Executing mutator '${mutation.name}' (id=${mutation.id})`
|
|
259
249
|
);
|
|
260
250
|
try {
|
|
261
|
-
await cb(dbTx, mutation.name, mutation.args[0]
|
|
251
|
+
await cb(dbTx, mutation.name, mutation.args[0]);
|
|
262
252
|
} catch (appError2) {
|
|
263
253
|
throw wrapWithApplicationError(appError2);
|
|
264
254
|
}
|
|
@@ -360,6 +350,7 @@ class DatabaseTransactionError extends Error {
|
|
|
360
350
|
export {
|
|
361
351
|
OutOfOrderMutation,
|
|
362
352
|
getMutation,
|
|
353
|
+
handleMutateRequest,
|
|
363
354
|
handleMutationRequest
|
|
364
355
|
};
|
|
365
356
|
//# sourceMappingURL=process-mutations.js.map
|