@rocicorp/zero 0.25.0-canary.2 → 0.25.0-canary.3
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 +27 -38
- package/out/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/ast-to-zql/src/bin.js.map +1 -1
- package/out/{chunk-ZZXMKAAG.js → chunk-5H7WNLPK.js} +2 -2
- package/out/chunk-HYS7YLNL.js +575 -0
- package/out/chunk-HYS7YLNL.js.map +7 -0
- package/out/{chunk-COKJ5W7V.js → chunk-IWL6EEA6.js} +10134 -10131
- package/out/chunk-IWL6EEA6.js.map +7 -0
- package/out/{chunk-TJFNGO7E.js → chunk-JKP7HDC6.js} +15 -53
- package/out/chunk-JKP7HDC6.js.map +7 -0
- package/out/{chunk-ECUMGQGC.js → chunk-RYFBHAD4.js} +17 -4
- package/out/chunk-RYFBHAD4.js.map +7 -0
- package/out/chunk-SRLXXPNB.js +495 -0
- package/out/chunk-SRLXXPNB.js.map +7 -0
- package/out/{chunk-EZM3XBAB.js → chunk-U2KJIWVC.js} +47 -2
- package/out/chunk-U2KJIWVC.js.map +7 -0
- package/out/expo-sqlite.js +4 -4
- package/out/{inspector-IU2HG74I.js → inspector-GP3CBZRU.js} +1 -1
- package/out/inspector-GP3CBZRU.js.map +7 -0
- package/out/{lazy-inspector-OXIFYSSQ.js → lazy-inspector-4CO3DXP5.js} +9 -8
- package/out/lazy-inspector-4CO3DXP5.js.map +7 -0
- package/out/op-sqlite.js +3 -3
- package/out/react-native.js +4 -4
- package/out/react.js +22 -27
- package/out/react.js.map +2 -2
- package/out/replicache/src/kv/sqlite-store.d.ts +7 -1
- package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-options.d.ts +3 -2
- package/out/replicache/src/replicache-options.d.ts.map +1 -1
- package/out/replicache/src/sqlite.d.ts +1 -1
- package/out/replicache/src/sqlite.d.ts.map +1 -1
- package/out/shared/src/error.js +5 -5
- package/out/shared/src/error.js.map +1 -1
- package/out/solid.js +11 -9
- package/out/solid.js.map +2 -2
- package/out/sqlite.js +5 -3
- package/out/z2s/src/compiler.d.ts +2 -2
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/z2s/src/sql.d.ts +1 -1
- package/out/z2s/src/sql.d.ts.map +1 -1
- package/out/zero/package.json +3 -2
- package/out/zero-cache/src/auth/load-permissions.d.ts +1 -1
- package/out/zero-cache/src/auth/load-permissions.d.ts.map +1 -1
- package/out/zero-cache/src/auth/load-permissions.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 +36 -12
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
- package/out/zero-cache/src/custom/fetch.js +5 -4
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.d.ts +3 -3
- package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.js +6 -7
- package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.d.ts +1 -1
- package/out/zero-cache/src/scripts/permissions.d.ts.map +1 -1
- package/out/zero-cache/src/scripts/permissions.js +2 -2
- package/out/zero-cache/src/scripts/permissions.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 +7 -10
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/analyze.d.ts +2 -6
- package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
- package/out/zero-cache/src/services/analyze.js +4 -3
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +2 -3
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +15 -15
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts +16 -0
- package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js +52 -0
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +15 -1
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +2 -2
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +16 -11
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +2 -0
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js +7 -8
- package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
- package/out/zero-cache/src/services/run-ast.js +1 -0
- package/out/zero-cache/src/services/run-ast.js.map +1 -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 +41 -14
- 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.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +5 -4
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +81 -2
- 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 +24 -2
- 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.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +4 -2
- 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 +25 -0
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -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 +30 -5
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -1
- package/out/zero-cache/src/types/error-with-level.js +8 -3
- package/out/zero-cache/src/types/error-with-level.js.map +1 -1
- package/out/zero-client/src/client/bindings.d.ts +42 -0
- package/out/zero-client/src/client/bindings.d.ts.map +1 -0
- package/out/zero-client/src/client/client-error-kind-enum.d.ts +12 -12
- package/out/zero-client/src/client/client-error-kind-enum.d.ts.map +1 -1
- package/out/zero-client/src/client/connection-manager.d.ts +8 -9
- package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/context.d.ts +12 -10
- package/out/zero-client/src/client/context.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.d.ts +1 -1
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +39 -16
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/error.d.ts +23 -11
- package/out/zero-client/src/client/error.d.ts.map +1 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts.map +1 -1
- package/out/zero-client/src/client/inspector/inspector.d.ts +3 -2
- package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +4 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.d.ts +10 -2
- package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.d.ts +16 -0
- package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -0
- package/out/zero-client/src/client/options.d.ts +37 -7
- package/out/zero-client/src/client/options.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.d.ts +9 -2
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-log-context.d.ts +3 -3
- package/out/zero-client/src/client/zero-log-context.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +3 -3
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-rep.d.ts +5 -4
- package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +88 -18
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/mod.d.ts +14 -9
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-client/src/types/query-result.d.ts +5 -4
- package/out/zero-client/src/types/query-result.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.d.ts +1 -0
- package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.js +1 -0
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/application-error.d.ts +2 -8
- package/out/zero-protocol/src/application-error.d.ts.map +1 -1
- package/out/zero-protocol/src/application-error.js +3 -0
- package/out/zero-protocol/src/application-error.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +1 -0
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.d.ts +3 -0
- package/out/zero-protocol/src/inspect-down.d.ts.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 +2 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-react/src/components/inspector.d.ts +1 -1
- package/out/zero-react/src/components/inspector.d.ts.map +1 -1
- package/out/zero-react/src/components/zero-inspector.d.ts +1 -1
- package/out/zero-react/src/components/zero-inspector.d.ts.map +1 -1
- package/out/zero-react/src/mod.d.ts +1 -1
- package/out/zero-react/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/use-query.d.ts +7 -6
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +7 -7
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.d.ts +1 -3
- package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
- package/out/zero-schema/src/permissions.d.ts +1 -1
- package/out/zero-schema/src/permissions.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.d.ts +1 -1
- package/out/zero-schema/src/schema-config.d.ts.map +1 -1
- package/out/zero-server/src/adapters/drizzle.d.ts +2 -2
- package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
- package/out/zero-server/src/adapters/drizzle.js +4 -0
- package/out/zero-server/src/adapters/drizzle.js.map +1 -1
- package/out/zero-server/src/adapters/pg.d.ts +8 -3
- package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
- package/out/zero-server/src/adapters/pg.js +4 -0
- package/out/zero-server/src/adapters/pg.js.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.d.ts +8 -3
- package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.js +4 -0
- package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
- package/out/zero-server/src/custom.d.ts +11 -8
- package/out/zero-server/src/custom.d.ts.map +1 -1
- package/out/zero-server/src/custom.js +15 -3
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/mod.d.ts +0 -1
- package/out/zero-server/src/mod.d.ts.map +1 -1
- package/out/zero-server/src/mod.js +0 -1
- package/out/zero-server/src/mod.js.map +1 -1
- package/out/zero-server/src/pg-query-executor.d.ts +11 -0
- package/out/zero-server/src/pg-query-executor.d.ts.map +1 -0
- package/out/zero-server/src/pg-query-executor.js +17 -0
- package/out/zero-server/src/pg-query-executor.js.map +1 -0
- package/out/zero-server/src/process-mutations.d.ts +2 -1
- package/out/zero-server/src/process-mutations.d.ts.map +1 -1
- package/out/zero-server/src/process-mutations.js +1 -1
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/queries/process-queries.d.ts +4 -4
- package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
- package/out/zero-server/src/queries/process-queries.js +5 -3
- package/out/zero-server/src/queries/process-queries.js.map +1 -1
- package/out/zero-server/src/schema.d.ts +2 -2
- package/out/zero-server/src/schema.d.ts.map +1 -1
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-server/src/zql-database.d.ts +6 -3
- package/out/zero-server/src/zql-database.d.ts.map +1 -1
- package/out/zero-server/src/zql-database.js +17 -19
- package/out/zero-server/src/zql-database.js.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +1 -1
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/use-query.d.ts +4 -4
- package/out/zero-solid/src/use-query.d.ts.map +1 -1
- package/out/zero-solid/src/use-zero.d.ts +7 -7
- package/out/zero-solid/src/use-zero.d.ts.map +1 -1
- package/out/zero-types/src/server-schema.d.ts.map +1 -0
- package/out/zero-types/src/server-schema.js.map +1 -0
- package/out/zero.js +29 -14
- package/out/zql/src/builder/builder.d.ts +6 -0
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +1 -1
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/debug-delegate.d.ts +4 -0
- package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
- package/out/zql/src/builder/debug-delegate.js +17 -0
- package/out/zql/src/builder/debug-delegate.js.map +1 -1
- package/out/zql/src/ivm/view.d.ts +3 -2
- package/out/zql/src/ivm/view.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.d.ts +13 -8
- package/out/zql/src/mutate/custom.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.js.map +1 -1
- package/out/zql/src/planner/planner-builder.d.ts.map +1 -1
- package/out/zql/src/planner/planner-builder.js +27 -2
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/planner/planner-graph.js +1 -1
- package/out/zql/src/planner/planner-graph.js.map +1 -1
- package/out/zql/src/planner/planner-join.d.ts +1 -1
- package/out/zql/src/planner/planner-join.d.ts.map +1 -1
- package/out/zql/src/planner/planner-join.js +9 -5
- package/out/zql/src/planner/planner-join.js.map +1 -1
- package/out/zql/src/query/chained-query.d.ts +35 -0
- package/out/zql/src/query/chained-query.d.ts.map +1 -0
- package/out/zql/src/query/chained-query.js +66 -0
- package/out/zql/src/query/chained-query.js.map +1 -0
- package/out/zql/src/query/define-query.d.ts +51 -0
- package/out/zql/src/query/define-query.d.ts.map +1 -0
- package/out/zql/src/query/define-query.js +53 -0
- package/out/zql/src/query/define-query.js.map +1 -0
- package/out/zql/src/query/named.d.ts +18 -7
- package/out/zql/src/query/named.d.ts.map +1 -1
- package/out/zql/src/query/named.js +38 -20
- package/out/zql/src/query/named.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts +122 -0
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -0
- package/out/zql/src/query/query-delegate-base.js +136 -0
- package/out/zql/src/query/query-delegate-base.js.map +1 -0
- package/out/zql/src/query/query-delegate.d.ts +29 -4
- package/out/zql/src/query/query-delegate.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +27 -48
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +155 -175
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internals.d.ts +70 -0
- package/out/zql/src/query/query-internals.d.ts.map +1 -0
- package/out/zql/src/query/query-internals.js +21 -0
- package/out/zql/src/query/query-internals.js.map +1 -0
- package/out/zql/src/query/query.d.ts +26 -243
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/query.js +0 -1
- package/out/zql/src/query/query.js.map +1 -1
- package/out/zql/src/query/root-named-query.d.ts +33 -0
- package/out/zql/src/query/root-named-query.d.ts.map +1 -0
- package/out/zql/src/query/root-named-query.js +95 -0
- package/out/zql/src/query/root-named-query.js.map +1 -0
- package/out/zql/src/query/static-query.d.ts +5 -14
- package/out/zql/src/query/static-query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.js +7 -17
- package/out/zql/src/query/static-query.js.map +1 -1
- package/out/zqlite/src/db.d.ts +2 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +2 -0
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/query-delegate.d.ts +6 -20
- package/out/zqlite/src/query-delegate.d.ts.map +1 -1
- package/out/zqlite/src/query-delegate.js +5 -29
- package/out/zqlite/src/query-delegate.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +16 -0
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +3 -2
- package/out/chunk-ASRS2LFV.js +0 -35
- package/out/chunk-ASRS2LFV.js.map +0 -7
- package/out/chunk-COKJ5W7V.js.map +0 -7
- package/out/chunk-ECUMGQGC.js.map +0 -7
- package/out/chunk-EZM3XBAB.js.map +0 -7
- package/out/chunk-TJFNGO7E.js.map +0 -7
- package/out/chunk-YWU2DZ23.js +0 -372
- package/out/chunk-YWU2DZ23.js.map +0 -7
- package/out/inspector-IU2HG74I.js.map +0 -7
- package/out/lazy-inspector-OXIFYSSQ.js.map +0 -7
- package/out/zero-client/src/client/on-error.d.ts +0 -15
- package/out/zero-client/src/client/on-error.d.ts.map +0 -1
- package/out/zero-schema/src/builder/relationship-builder.js +0 -24
- package/out/zero-schema/src/builder/relationship-builder.js.map +0 -1
- package/out/zero-schema/src/builder/schema-builder.js +0 -78
- package/out/zero-schema/src/builder/schema-builder.js.map +0 -1
- package/out/zero-schema/src/builder/table-builder.js +0 -128
- package/out/zero-schema/src/builder/table-builder.js.map +0 -1
- package/out/zero-schema/src/server-schema.d.ts.map +0 -1
- package/out/zero-schema/src/server-schema.js.map +0 -1
- package/out/zero-server/src/query.d.ts +0 -22
- package/out/zero-server/src/query.d.ts.map +0 -1
- package/out/zero-server/src/query.js +0 -61
- package/out/zero-server/src/query.js.map +0 -1
- /package/out/{chunk-ZZXMKAAG.js.map → chunk-5H7WNLPK.js.map} +0 -0
- /package/out/{zero-schema → zero-types}/src/server-schema.d.ts +0 -0
- /package/out/{zero-schema → zero-types}/src/server-schema.js +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
IDBDatabasesStore,
|
|
2
3
|
throwIfStoreClosed,
|
|
3
4
|
throwIfTransactionClosed
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-HYS7YLNL.js";
|
|
5
6
|
import {
|
|
6
7
|
deepFreeze
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-U2KJIWVC.js";
|
|
8
9
|
|
|
9
10
|
// ../replicache/src/kv/sqlite-store.ts
|
|
10
11
|
import { RWLock } from "@rocicorp/lock";
|
|
@@ -211,10 +212,22 @@ function dropStore(name, createDelegate) {
|
|
|
211
212
|
tempDelegate.destroy();
|
|
212
213
|
return Promise.resolve();
|
|
213
214
|
}
|
|
215
|
+
async function dropAllProviderDatabases(storeProvider) {
|
|
216
|
+
const idbDatabasesStore = new IDBDatabasesStore(storeProvider.create);
|
|
217
|
+
const databases = await idbDatabasesStore.getDatabases();
|
|
218
|
+
const dbNames = Object.values(databases).map((db) => db.name);
|
|
219
|
+
await Promise.all(
|
|
220
|
+
dbNames.map(async (name) => {
|
|
221
|
+
await storeProvider.drop(name);
|
|
222
|
+
await idbDatabasesStore.deleteDatabases([name]);
|
|
223
|
+
})
|
|
224
|
+
);
|
|
225
|
+
}
|
|
214
226
|
|
|
215
227
|
export {
|
|
216
228
|
SQLiteStore,
|
|
217
229
|
clearAllNamedStoresForTesting,
|
|
218
|
-
dropStore
|
|
230
|
+
dropStore,
|
|
231
|
+
dropAllProviderDatabases
|
|
219
232
|
};
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
233
|
+
//# sourceMappingURL=chunk-RYFBHAD4.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../replicache/src/kv/sqlite-store.ts"],
|
|
4
|
+
"sourcesContent": ["import {RWLock} from '@rocicorp/lock';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {deepFreeze} from '../frozen-json.ts';\nimport {IDBDatabasesStore} from '../persist/idb-databases-store.ts';\nimport type {Read, Store, StoreProvider, Write} from './store.ts';\nimport {\n throwIfStoreClosed,\n throwIfTransactionClosed,\n} from './throw-if-closed.ts';\n\n/**\n * A SQLite prepared statement.\n *\n * `run` executes the statement with optional parameters.\n * `all` executes the statement and returns the result rows.\n * `finalize` releases the statement.\n */\nexport interface PreparedStatement {\n firstValue(params: string[]): Promise<unknown>;\n exec(params: string[]): Promise<void>;\n}\n\nexport interface SQLiteDatabase {\n /**\n * Close the database connection.\n */\n close(): void;\n\n /**\n * Destroy or delete the database (e.g. delete file).\n */\n destroy(): void;\n\n /**\n * Prepare a SQL string, returning a statement you can execute.\n * E.g. `const stmt = db.prepare(\"SELECT * FROM todos WHERE id=?\");`\n */\n prepare(sql: string): PreparedStatement;\n\n // for PRAGMA statements, schema creation and transaction control.\n execSync(sql: string): void;\n}\n\nexport type CreateSQLiteDatabase = (\n filename: string,\n opts?: SQLiteStoreOptions,\n) => SQLiteDatabase;\n\n/**\n * SQLite-based implementation of the Store interface using a configurable delegate.\n * Supports shared connections between multiple store instances with the same name,\n * providing efficient resource utilization and proper transaction isolation.\n * Uses parameterized queries for safety and performance.\n */\nexport class SQLiteStore implements Store {\n readonly #filename: string;\n readonly #entry: StoreEntry;\n\n #closed = false;\n\n constructor(\n name: string,\n create: CreateSQLiteDatabase,\n opts?: SQLiteStoreOptions,\n ) {\n this.#filename = safeFilename(name);\n this.#entry = getOrCreateEntry(name, create, opts);\n }\n\n async read(): Promise<Read> {\n throwIfStoreClosed(this);\n\n const entry = this.#entry;\n const {db, lock, preparedStatements} = entry;\n const release = await lock.read();\n\n // Start shared read transaction if this is the first reader\n // This ensures consistent reads across all concurrent readers\n if (entry.activeReaders === 0) {\n db.execSync('BEGIN');\n }\n entry.activeReaders++;\n\n return new SQLiteStoreRead(() => {\n entry.activeReaders--;\n // Commit shared read transaction when last reader finishes\n if (entry.activeReaders === 0) {\n db.execSync('COMMIT');\n }\n release();\n }, preparedStatements);\n }\n\n async write(): Promise<Write> {\n throwIfStoreClosed(this);\n\n const {lock, db, preparedStatements} = this.#entry;\n const release = await lock.write();\n\n // At this point, RWLock guarantees no active readers\n // The last reader would have already committed the shared transaction\n\n db.execSync('BEGIN IMMEDIATE');\n\n return new SQLiteWrite(release, db, preparedStatements);\n }\n\n async close(): Promise<void> {\n if (this.#closed) {\n return;\n }\n\n const {lock, db} = this.#entry;\n // Wait for all readers and writers to finish.\n const writeRelease = await lock.write();\n\n // Handle reference counting for shared stores - only close database\n // when this is the last store instance using it\n decrementStoreRefCount(this.#filename, db);\n\n this.#closed = true;\n writeRelease();\n }\n\n get closed(): boolean {\n return this.#closed;\n }\n}\n\nexport function safeFilename(name: string): string {\n return name.replace(/[^a-zA-Z0-9]/g, '_');\n}\n\nexport type PreparedStatements = {\n has: PreparedStatement;\n get: PreparedStatement;\n put: PreparedStatement;\n del: PreparedStatement;\n};\n\nexport interface SQLiteStoreOptions {\n // Common options\n busyTimeout?: number;\n journalMode?: 'WAL' | 'DELETE';\n synchronous?: 'NORMAL' | 'FULL';\n readUncommitted?: boolean;\n}\n\n/**\n * Common database setup logic shared between expo-sqlite and op-sqlite implementations.\n * Configures SQLite pragmas, creates the entry table, and prepares common statements.\n */\n\nexport function setupDatabase(\n delegate: SQLiteDatabase,\n opts?: SQLiteStoreOptions,\n): PreparedStatements {\n // Configure SQLite pragmas for optimal performance\n delegate.execSync(`PRAGMA busy_timeout = ${opts?.busyTimeout ?? 200}`);\n delegate.execSync(`PRAGMA journal_mode = '${opts?.journalMode ?? 'WAL'}'`);\n delegate.execSync(`PRAGMA synchronous = '${opts?.synchronous ?? 'NORMAL'}'`);\n delegate.execSync(\n `PRAGMA read_uncommitted = ${Boolean(opts?.readUncommitted)}`,\n );\n\n // Create the entry table\n delegate.execSync(`\n CREATE TABLE IF NOT EXISTS entry (\n key TEXT PRIMARY KEY, \n value TEXT NOT NULL\n ) WITHOUT ROWID\n `);\n\n // Prepare common statements\n return {\n has: delegate.prepare(`SELECT 1 FROM entry WHERE key = ? LIMIT 1`),\n get: delegate.prepare('SELECT value FROM entry WHERE key = ?'),\n put: delegate.prepare(\n 'INSERT OR REPLACE INTO entry (key, value) VALUES (?, ?)',\n ),\n del: delegate.prepare('DELETE FROM entry WHERE key = ?'),\n };\n}\n\nexport class SQLiteStoreRead implements Read {\n #release: () => void;\n #closed = false;\n #preparedStatements: PreparedStatements;\n\n constructor(release: () => void, preparedStatements: PreparedStatements) {\n this.#release = release;\n this.#preparedStatements = preparedStatements;\n }\n\n async has(key: string): Promise<boolean> {\n throwIfTransactionClosed(this);\n const value = await this.#preparedStatements.has.firstValue([key]);\n return value !== undefined;\n }\n\n async get(key: string): Promise<ReadonlyJSONValue | undefined> {\n throwIfTransactionClosed(this);\n const value = await this.#preparedStatements.get.firstValue([key]);\n if (!value) {\n return undefined;\n }\n\n const parsedValue = JSON.parse(value as string) as ReadonlyJSONValue;\n return deepFreeze(parsedValue);\n }\n\n release(): void {\n if (!this.#closed) {\n this.#closed = true;\n this.#release();\n }\n }\n\n get closed(): boolean {\n return this.#closed;\n }\n}\n\nexport class SQLiteWrite implements Write {\n readonly #release: () => void;\n readonly #dbDelegate: SQLiteDatabase;\n readonly #preparedStatements: PreparedStatements;\n #committed = false;\n #closed = false;\n\n constructor(\n release: () => void,\n dbDelegate: SQLiteDatabase,\n preparedStatements: PreparedStatements,\n ) {\n this.#release = release;\n this.#dbDelegate = dbDelegate;\n this.#preparedStatements = preparedStatements;\n }\n\n async has(key: string): Promise<boolean> {\n throwIfTransactionClosed(this);\n const value = await this.#preparedStatements.has.firstValue([key]);\n return value !== undefined;\n }\n\n async get(key: string): Promise<ReadonlyJSONValue | undefined> {\n throwIfTransactionClosed(this);\n const value = await this.#preparedStatements.get.firstValue([key]);\n if (!value) {\n return undefined;\n }\n\n const parsedValue = JSON.parse(value as string) as ReadonlyJSONValue;\n return deepFreeze(parsedValue);\n }\n\n async put(key: string, value: ReadonlyJSONValue): Promise<void> {\n throwIfTransactionClosed(this);\n await this.#preparedStatements.put.exec([key, JSON.stringify(value)]);\n }\n\n async del(key: string): Promise<void> {\n throwIfTransactionClosed(this);\n await this.#preparedStatements.del.exec([key]);\n }\n\n // oxlint-disable-next-line require-await\n async commit(): Promise<void> {\n throwIfTransactionClosed(this);\n this.#dbDelegate.execSync('COMMIT');\n this.#committed = true;\n }\n\n release(): void {\n if (!this.#closed) {\n this.#closed = true;\n\n if (!this.#committed) {\n this.#dbDelegate.execSync('ROLLBACK');\n }\n\n this.#release();\n }\n }\n\n get closed(): boolean {\n return this.#closed;\n }\n}\n\ntype StoreEntry = {\n readonly lock: RWLock;\n readonly db: SQLiteDatabase;\n refCount: number;\n activeReaders: number;\n preparedStatements: PreparedStatements;\n};\n\n// Global map to share database connections between multiple store instances with the same name\nconst stores = new Map<string, StoreEntry>();\n\n/**\n * Gets an existing store entry or creates a new one if it doesn't exist.\n * This implements the shared connection pattern where multiple stores with the same\n * name share the same database connection, lock, and delegate.\n */\nfunction getOrCreateEntry(\n name: string,\n create: (filename: string, opts?: SQLiteStoreOptions) => SQLiteDatabase,\n opts?: SQLiteStoreOptions,\n): StoreEntry {\n const filename = safeFilename(name);\n const entry = stores.get(filename);\n\n if (entry) {\n entry.refCount++;\n return entry;\n }\n\n const dbDelegate = create(filename, opts);\n const preparedStatements = setupDatabase(dbDelegate, opts);\n\n const lock = new RWLock();\n\n const newEntry: StoreEntry = {\n lock,\n db: dbDelegate,\n refCount: 1,\n activeReaders: 0,\n preparedStatements,\n };\n stores.set(filename, newEntry);\n return newEntry;\n}\n\n/**\n * Decrements the reference count for a shared store and cleans up resources\n * when the last reference is released.\n */\n\nfunction decrementStoreRefCount(\n filename: string,\n dbDelegate: SQLiteDatabase,\n): void {\n const entry = stores.get(filename);\n if (entry) {\n entry.refCount--;\n if (entry.refCount <= 0) {\n dbDelegate.close();\n stores.delete(filename);\n }\n }\n}\nexport function clearAllNamedStoresForTesting(): void {\n for (const entry of stores.values()) {\n entry.db.close();\n }\n stores.clear();\n}\n\nexport function dropStore(\n name: string,\n createDelegate: (\n filename: string,\n opts?: SQLiteStoreOptions,\n ) => SQLiteDatabase,\n): Promise<void> {\n const filename = safeFilename(name);\n const entry = stores.get(filename);\n if (entry) {\n entry.db.close();\n stores.delete(filename);\n }\n\n // Create a temporary delegate to handle database deletion\n const tempDelegate = createDelegate(filename);\n tempDelegate.destroy();\n\n return Promise.resolve();\n}\n\n/**\n * Drops all databases associated with a store provider.\n *\n * TEMPORARY: Only used for testing.\n */\nexport async function dropAllProviderDatabases(\n storeProvider: StoreProvider,\n): Promise<void> {\n const idbDatabasesStore = new IDBDatabasesStore(storeProvider.create);\n\n const databases = await idbDatabasesStore.getDatabases();\n const dbNames = Object.values(databases).map(db => db.name);\n\n await Promise.all(\n dbNames.map(async name => {\n await storeProvider.drop(name);\n await idbDatabasesStore.deleteDatabases([name]);\n }),\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractQuery,
|
|
3
|
+
ExpressionBuilder,
|
|
4
|
+
clientToServer,
|
|
5
|
+
defaultFormat,
|
|
6
|
+
queryWithContext
|
|
7
|
+
} from "./chunk-IWL6EEA6.js";
|
|
8
|
+
import {
|
|
9
|
+
mapCondition,
|
|
10
|
+
toStaticParam
|
|
11
|
+
} from "./chunk-JKP7HDC6.js";
|
|
12
|
+
import {
|
|
13
|
+
assert
|
|
14
|
+
} from "./chunk-U2KJIWVC.js";
|
|
15
|
+
|
|
16
|
+
// ../zero-schema/src/builder/relationship-builder.ts
|
|
17
|
+
function relationships(table2, cb) {
|
|
18
|
+
const relationships2 = cb({ many, one });
|
|
19
|
+
return {
|
|
20
|
+
name: table2.schema.name,
|
|
21
|
+
relationships: relationships2
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function many(...args) {
|
|
25
|
+
return args.map((arg) => ({
|
|
26
|
+
sourceField: arg.sourceField,
|
|
27
|
+
destField: arg.destField,
|
|
28
|
+
destSchema: arg.destSchema.schema.name,
|
|
29
|
+
cardinality: "many"
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
function one(...args) {
|
|
33
|
+
return args.map((arg) => ({
|
|
34
|
+
sourceField: arg.sourceField,
|
|
35
|
+
destField: arg.destField,
|
|
36
|
+
destSchema: arg.destSchema.schema.name,
|
|
37
|
+
cardinality: "one"
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ../zql/src/query/static-query.ts
|
|
42
|
+
var StaticQuery = class _StaticQuery extends AbstractQuery {
|
|
43
|
+
constructor(schema, tableName, ast, format, system = "permissions", customQueryID, currentJunction) {
|
|
44
|
+
super(
|
|
45
|
+
schema,
|
|
46
|
+
tableName,
|
|
47
|
+
ast,
|
|
48
|
+
format,
|
|
49
|
+
system,
|
|
50
|
+
customQueryID,
|
|
51
|
+
currentJunction,
|
|
52
|
+
(tableName2, ast2, format2, _customQueryID, _currentJunction) => new _StaticQuery(
|
|
53
|
+
schema,
|
|
54
|
+
tableName2,
|
|
55
|
+
ast2,
|
|
56
|
+
format2,
|
|
57
|
+
system,
|
|
58
|
+
customQueryID,
|
|
59
|
+
currentJunction
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
expressionBuilder() {
|
|
64
|
+
return new ExpressionBuilder(this._exists);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// ../zero-schema/src/permissions.ts
|
|
69
|
+
var ANYONE_CAN = [
|
|
70
|
+
(_, eb) => eb.and()
|
|
71
|
+
];
|
|
72
|
+
var ANYONE_CAN_DO_ANYTHING = {
|
|
73
|
+
row: {
|
|
74
|
+
select: ANYONE_CAN,
|
|
75
|
+
insert: ANYONE_CAN,
|
|
76
|
+
update: {
|
|
77
|
+
preMutation: ANYONE_CAN,
|
|
78
|
+
postMutation: ANYONE_CAN
|
|
79
|
+
},
|
|
80
|
+
delete: ANYONE_CAN
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var NOBODY_CAN = [];
|
|
84
|
+
async function definePermissions(schema, definer) {
|
|
85
|
+
const expressionBuilders = {};
|
|
86
|
+
for (const name of Object.keys(schema.tables)) {
|
|
87
|
+
expressionBuilders[name] = new StaticQuery(
|
|
88
|
+
schema,
|
|
89
|
+
name,
|
|
90
|
+
{ table: name },
|
|
91
|
+
defaultFormat
|
|
92
|
+
).expressionBuilder();
|
|
93
|
+
}
|
|
94
|
+
const config = await definer();
|
|
95
|
+
return compilePermissions(schema, config, expressionBuilders);
|
|
96
|
+
}
|
|
97
|
+
function compilePermissions(schema, authz, expressionBuilders) {
|
|
98
|
+
if (!authz) {
|
|
99
|
+
return void 0;
|
|
100
|
+
}
|
|
101
|
+
const nameMapper = clientToServer(schema.tables);
|
|
102
|
+
const ret = { tables: {} };
|
|
103
|
+
for (const [tableName, tableConfig] of Object.entries(authz)) {
|
|
104
|
+
const serverName = schema.tables[tableName].serverName ?? tableName;
|
|
105
|
+
ret.tables[serverName] = {
|
|
106
|
+
row: compileRowConfig(
|
|
107
|
+
nameMapper,
|
|
108
|
+
tableName,
|
|
109
|
+
tableConfig.row,
|
|
110
|
+
expressionBuilders[tableName]
|
|
111
|
+
),
|
|
112
|
+
cell: compileCellConfig(
|
|
113
|
+
nameMapper,
|
|
114
|
+
tableName,
|
|
115
|
+
tableConfig.cell,
|
|
116
|
+
expressionBuilders[tableName]
|
|
117
|
+
)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return ret;
|
|
121
|
+
}
|
|
122
|
+
function compileRowConfig(clientToServer2, tableName, rowRules, expressionBuilder) {
|
|
123
|
+
if (!rowRules) {
|
|
124
|
+
return void 0;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
select: compileRules(
|
|
128
|
+
clientToServer2,
|
|
129
|
+
tableName,
|
|
130
|
+
rowRules.select,
|
|
131
|
+
expressionBuilder
|
|
132
|
+
),
|
|
133
|
+
insert: compileRules(
|
|
134
|
+
clientToServer2,
|
|
135
|
+
tableName,
|
|
136
|
+
rowRules.insert,
|
|
137
|
+
expressionBuilder
|
|
138
|
+
),
|
|
139
|
+
update: {
|
|
140
|
+
preMutation: compileRules(
|
|
141
|
+
clientToServer2,
|
|
142
|
+
tableName,
|
|
143
|
+
rowRules.update?.preMutation,
|
|
144
|
+
expressionBuilder
|
|
145
|
+
),
|
|
146
|
+
postMutation: compileRules(
|
|
147
|
+
clientToServer2,
|
|
148
|
+
tableName,
|
|
149
|
+
rowRules.update?.postMutation,
|
|
150
|
+
expressionBuilder
|
|
151
|
+
)
|
|
152
|
+
},
|
|
153
|
+
delete: compileRules(
|
|
154
|
+
clientToServer2,
|
|
155
|
+
tableName,
|
|
156
|
+
rowRules.delete,
|
|
157
|
+
expressionBuilder
|
|
158
|
+
)
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function compileRules(clientToServer2, tableName, rules, expressionBuilder) {
|
|
162
|
+
if (!rules) {
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
return rules.map((rule) => {
|
|
166
|
+
const cond = rule(authDataRef, expressionBuilder);
|
|
167
|
+
return ["allow", mapCondition(cond, tableName, clientToServer2)];
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function compileCellConfig(clientToServer2, tableName, cellRules, expressionBuilder) {
|
|
171
|
+
if (!cellRules) {
|
|
172
|
+
return void 0;
|
|
173
|
+
}
|
|
174
|
+
const ret = {};
|
|
175
|
+
for (const [columnName, rules] of Object.entries(cellRules)) {
|
|
176
|
+
ret[columnName] = {
|
|
177
|
+
select: compileRules(
|
|
178
|
+
clientToServer2,
|
|
179
|
+
tableName,
|
|
180
|
+
rules.select,
|
|
181
|
+
expressionBuilder
|
|
182
|
+
),
|
|
183
|
+
insert: compileRules(
|
|
184
|
+
clientToServer2,
|
|
185
|
+
tableName,
|
|
186
|
+
rules.insert,
|
|
187
|
+
expressionBuilder
|
|
188
|
+
),
|
|
189
|
+
update: {
|
|
190
|
+
preMutation: compileRules(
|
|
191
|
+
clientToServer2,
|
|
192
|
+
tableName,
|
|
193
|
+
rules.update?.preMutation,
|
|
194
|
+
expressionBuilder
|
|
195
|
+
),
|
|
196
|
+
postMutation: compileRules(
|
|
197
|
+
clientToServer2,
|
|
198
|
+
tableName,
|
|
199
|
+
rules.update?.postMutation,
|
|
200
|
+
expressionBuilder
|
|
201
|
+
)
|
|
202
|
+
},
|
|
203
|
+
delete: compileRules(
|
|
204
|
+
clientToServer2,
|
|
205
|
+
tableName,
|
|
206
|
+
rules.delete,
|
|
207
|
+
expressionBuilder
|
|
208
|
+
)
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return ret;
|
|
212
|
+
}
|
|
213
|
+
var CallTracker = class _CallTracker {
|
|
214
|
+
#anchor;
|
|
215
|
+
#path;
|
|
216
|
+
constructor(anchor, path) {
|
|
217
|
+
this.#anchor = anchor;
|
|
218
|
+
this.#path = path;
|
|
219
|
+
}
|
|
220
|
+
get(target, prop) {
|
|
221
|
+
if (prop === toStaticParam) {
|
|
222
|
+
return target[toStaticParam];
|
|
223
|
+
}
|
|
224
|
+
assert(typeof prop === "string");
|
|
225
|
+
const path = [...this.#path, prop];
|
|
226
|
+
return new Proxy(
|
|
227
|
+
{
|
|
228
|
+
[toStaticParam]: () => staticParam(this.#anchor, path)
|
|
229
|
+
},
|
|
230
|
+
new _CallTracker(this.#anchor, path)
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
function baseTracker(anchor) {
|
|
235
|
+
return new Proxy(
|
|
236
|
+
{
|
|
237
|
+
[toStaticParam]: () => {
|
|
238
|
+
throw new Error("no JWT field specified");
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
new CallTracker(anchor, [])
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
var authDataRef = baseTracker("authData");
|
|
245
|
+
var preMutationRowRef = baseTracker("preMutationRow");
|
|
246
|
+
function staticParam(anchorClass, field) {
|
|
247
|
+
return {
|
|
248
|
+
type: "static",
|
|
249
|
+
anchor: anchorClass,
|
|
250
|
+
// for backwards compatibility
|
|
251
|
+
field: field.length === 1 ? field[0] : field
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// ../zql/src/query/chained-query.ts
|
|
256
|
+
var ChainedQuery = class _ChainedQuery {
|
|
257
|
+
#parent;
|
|
258
|
+
#chainFn;
|
|
259
|
+
#q;
|
|
260
|
+
constructor(parent, chainFn) {
|
|
261
|
+
this.#parent = parent;
|
|
262
|
+
this.#chainFn = chainFn;
|
|
263
|
+
}
|
|
264
|
+
withContext(ctx) {
|
|
265
|
+
if (this.#q) {
|
|
266
|
+
return this.#q;
|
|
267
|
+
}
|
|
268
|
+
const parentQuery = this.#parent.withContext(ctx);
|
|
269
|
+
this.#q = this.#chainFn(parentQuery);
|
|
270
|
+
return this.#q;
|
|
271
|
+
}
|
|
272
|
+
#withChain(fn) {
|
|
273
|
+
return new _ChainedQuery(
|
|
274
|
+
this,
|
|
275
|
+
fn
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
// Query interface methods
|
|
279
|
+
one() {
|
|
280
|
+
return this.#withChain((q) => q.one());
|
|
281
|
+
}
|
|
282
|
+
whereExists(relationship, cbOrOptions, options) {
|
|
283
|
+
if (typeof cbOrOptions === "function") {
|
|
284
|
+
return this.#withChain(
|
|
285
|
+
(q) => q.whereExists(
|
|
286
|
+
relationship,
|
|
287
|
+
cbOrOptions,
|
|
288
|
+
options
|
|
289
|
+
)
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
return this.#withChain(
|
|
293
|
+
(q) => q.whereExists(relationship, cbOrOptions)
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
related(relationship, cb) {
|
|
297
|
+
if (cb) {
|
|
298
|
+
return this.#withChain(
|
|
299
|
+
(q) => q.related(
|
|
300
|
+
relationship,
|
|
301
|
+
cb
|
|
302
|
+
)
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
return this.#withChain(
|
|
306
|
+
(q) => q.related(relationship)
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
where(fieldOrExpressionFactory, opOrValue, value) {
|
|
310
|
+
if (typeof fieldOrExpressionFactory === "function") {
|
|
311
|
+
return this.#withChain((q) => q.where(fieldOrExpressionFactory));
|
|
312
|
+
}
|
|
313
|
+
if (value !== void 0) {
|
|
314
|
+
return this.#withChain(
|
|
315
|
+
(q) => (
|
|
316
|
+
// Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility
|
|
317
|
+
q.where(fieldOrExpressionFactory, opOrValue, value)
|
|
318
|
+
)
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
return this.#withChain(
|
|
322
|
+
(q) => (
|
|
323
|
+
// Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility
|
|
324
|
+
q.where(fieldOrExpressionFactory, opOrValue)
|
|
325
|
+
)
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
start(row, opts) {
|
|
329
|
+
return this.#withChain((q) => q.start(row, opts));
|
|
330
|
+
}
|
|
331
|
+
limit(limit) {
|
|
332
|
+
return this.#withChain((q) => q.limit(limit));
|
|
333
|
+
}
|
|
334
|
+
orderBy(field, direction) {
|
|
335
|
+
return this.#withChain((q) => q.orderBy(field, direction));
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
// ../zql/src/query/root-named-query.ts
|
|
340
|
+
var RootNamedQuery = class {
|
|
341
|
+
#name;
|
|
342
|
+
#input;
|
|
343
|
+
#func;
|
|
344
|
+
#validator;
|
|
345
|
+
#cachedQuery;
|
|
346
|
+
constructor(name, func, input, validator) {
|
|
347
|
+
this.#name = name;
|
|
348
|
+
this.#func = func;
|
|
349
|
+
this.#input = input;
|
|
350
|
+
this.#validator = validator;
|
|
351
|
+
}
|
|
352
|
+
withContext(ctx) {
|
|
353
|
+
if (this.#cachedQuery) {
|
|
354
|
+
return this.#cachedQuery;
|
|
355
|
+
}
|
|
356
|
+
let output;
|
|
357
|
+
if (!this.#validator) {
|
|
358
|
+
output = this.#input;
|
|
359
|
+
} else {
|
|
360
|
+
const result = this.#validator["~standard"].validate(this.#input);
|
|
361
|
+
if (result instanceof Promise) {
|
|
362
|
+
throw new Error(
|
|
363
|
+
`Async validators are not supported. Query name ${this.#name}`
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
if (result.issues) {
|
|
367
|
+
throw new Error(
|
|
368
|
+
`Validation failed for query ${this.#name}: ${result.issues.map((issue) => issue.message).join(", ")}`
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
output = result.value;
|
|
372
|
+
}
|
|
373
|
+
this.#cachedQuery = queryWithContext(
|
|
374
|
+
this.#func({ ctx, args: output }),
|
|
375
|
+
ctx
|
|
376
|
+
).nameAndArgs(
|
|
377
|
+
this.#name,
|
|
378
|
+
this.#input === void 0 ? [] : [this.#input]
|
|
379
|
+
);
|
|
380
|
+
return this.#cachedQuery;
|
|
381
|
+
}
|
|
382
|
+
#withChain(fn) {
|
|
383
|
+
return new ChainedQuery(
|
|
384
|
+
this,
|
|
385
|
+
fn
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
// Query interface methods
|
|
389
|
+
one() {
|
|
390
|
+
return this.#withChain((q) => q.one());
|
|
391
|
+
}
|
|
392
|
+
whereExists(relationship, cbOrOptions, options) {
|
|
393
|
+
if (typeof cbOrOptions === "function") {
|
|
394
|
+
return this.#withChain(
|
|
395
|
+
(q) => q.whereExists(
|
|
396
|
+
relationship,
|
|
397
|
+
cbOrOptions,
|
|
398
|
+
options
|
|
399
|
+
)
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
return this.#withChain(
|
|
403
|
+
(q) => q.whereExists(relationship, cbOrOptions)
|
|
404
|
+
);
|
|
405
|
+
}
|
|
406
|
+
related(relationship, cb) {
|
|
407
|
+
if (cb) {
|
|
408
|
+
return this.#withChain(
|
|
409
|
+
(q) => q.related(
|
|
410
|
+
relationship,
|
|
411
|
+
cb
|
|
412
|
+
)
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
return this.#withChain(
|
|
416
|
+
(q) => q.related(relationship)
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
where(fieldOrExpressionFactory, opOrValue, value) {
|
|
420
|
+
if (typeof fieldOrExpressionFactory === "function") {
|
|
421
|
+
return this.#withChain((q) => q.where(fieldOrExpressionFactory));
|
|
422
|
+
}
|
|
423
|
+
if (value !== void 0) {
|
|
424
|
+
return this.#withChain(
|
|
425
|
+
(q) => (
|
|
426
|
+
// Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility
|
|
427
|
+
q.where(fieldOrExpressionFactory, opOrValue, value)
|
|
428
|
+
)
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
return this.#withChain(
|
|
432
|
+
(q) => (
|
|
433
|
+
// Cast to bypass TypeScript's strict type checking - this proxy method needs runtime flexibility
|
|
434
|
+
q.where(fieldOrExpressionFactory, opOrValue)
|
|
435
|
+
)
|
|
436
|
+
);
|
|
437
|
+
}
|
|
438
|
+
start(row, opts) {
|
|
439
|
+
return this.#withChain((q) => q.start(row, opts));
|
|
440
|
+
}
|
|
441
|
+
limit(limit) {
|
|
442
|
+
return this.#withChain((q) => q.limit(limit));
|
|
443
|
+
}
|
|
444
|
+
orderBy(field, direction) {
|
|
445
|
+
return this.#withChain((q) => q.orderBy(field, direction));
|
|
446
|
+
}
|
|
447
|
+
get customQueryID() {
|
|
448
|
+
return {
|
|
449
|
+
name: this.#name,
|
|
450
|
+
args: this.#input === void 0 ? [] : [this.#input]
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
// ../zql/src/query/define-query.ts
|
|
456
|
+
function defineQuery(name, optionsOrQueryFn, queryFn) {
|
|
457
|
+
let defineOptions;
|
|
458
|
+
let actualQueryFn;
|
|
459
|
+
if (typeof optionsOrQueryFn === "function") {
|
|
460
|
+
defineOptions = void 0;
|
|
461
|
+
actualQueryFn = optionsOrQueryFn;
|
|
462
|
+
} else {
|
|
463
|
+
defineOptions = optionsOrQueryFn;
|
|
464
|
+
actualQueryFn = queryFn;
|
|
465
|
+
}
|
|
466
|
+
const f = ((args) => new RootNamedQuery(
|
|
467
|
+
name,
|
|
468
|
+
actualQueryFn,
|
|
469
|
+
args,
|
|
470
|
+
defineOptions?.validator
|
|
471
|
+
));
|
|
472
|
+
f.queryName = name;
|
|
473
|
+
return f;
|
|
474
|
+
}
|
|
475
|
+
function defineQueryWithContextType() {
|
|
476
|
+
return defineQuery;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// ../zql/src/query/escape-like.ts
|
|
480
|
+
function escapeLike(val) {
|
|
481
|
+
return val.replace(/[%_]/g, "\\$&");
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
export {
|
|
485
|
+
relationships,
|
|
486
|
+
ANYONE_CAN,
|
|
487
|
+
ANYONE_CAN_DO_ANYTHING,
|
|
488
|
+
NOBODY_CAN,
|
|
489
|
+
definePermissions,
|
|
490
|
+
RootNamedQuery,
|
|
491
|
+
defineQuery,
|
|
492
|
+
defineQueryWithContextType,
|
|
493
|
+
escapeLike
|
|
494
|
+
};
|
|
495
|
+
//# sourceMappingURL=chunk-SRLXXPNB.js.map
|