@gaganref/confect-server 0.0.0-stage → 10.3.1-fork.10
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/CHANGELOG.md +2119 -0
- package/LICENSE +7 -0
- package/README.md +16 -2
- package/dist/ActionCtx.d.ts +10 -0
- package/dist/ActionCtx.d.ts.map +1 -0
- package/dist/ActionCtx.js +18 -0
- package/dist/ActionCtx.js.map +1 -0
- package/dist/ActionRunner.d.ts +16 -0
- package/dist/ActionRunner.d.ts.map +1 -0
- package/dist/ActionRunner.js +18 -0
- package/dist/ActionRunner.js.map +1 -0
- package/dist/AiGatewayDecisionClient.d.ts +20 -0
- package/dist/AiGatewayDecisionClient.d.ts.map +1 -0
- package/dist/AiGatewayDecisionClient.js +31 -0
- package/dist/AiGatewayDecisionClient.js.map +1 -0
- package/dist/AiGatewayDecisionModel.d.ts +24 -0
- package/dist/AiGatewayDecisionModel.d.ts.map +1 -0
- package/dist/AiGatewayDecisionModel.js +27 -0
- package/dist/AiGatewayDecisionModel.js.map +1 -0
- package/dist/AiGatewayLanguageClient.d.ts +21 -0
- package/dist/AiGatewayLanguageClient.d.ts.map +1 -0
- package/dist/AiGatewayLanguageClient.js +32 -0
- package/dist/AiGatewayLanguageClient.js.map +1 -0
- package/dist/AiGatewayLanguageModel.d.ts +95 -0
- package/dist/AiGatewayLanguageModel.d.ts.map +1 -0
- package/dist/AiGatewayLanguageModel.js +42 -0
- package/dist/AiGatewayLanguageModel.js.map +1 -0
- package/dist/Auth.d.ts +20 -0
- package/dist/Auth.d.ts.map +1 -0
- package/dist/Auth.js +31 -0
- package/dist/Auth.js.map +1 -0
- package/dist/BlobNotFoundError.d.ts +9 -0
- package/dist/BlobNotFoundError.d.ts.map +1 -0
- package/dist/BlobNotFoundError.js +13 -0
- package/dist/BlobNotFoundError.js.map +1 -0
- package/dist/Callback.d.ts +31 -0
- package/dist/Callback.d.ts.map +1 -0
- package/dist/Callback.js +182 -0
- package/dist/Callback.js.map +1 -0
- package/dist/ComponentCtx.d.ts +71 -0
- package/dist/ComponentCtx.d.ts.map +1 -0
- package/dist/ComponentCtx.js +0 -0
- package/dist/ConvexConfigProvider.d.ts +21 -0
- package/dist/ConvexConfigProvider.d.ts.map +1 -0
- package/dist/ConvexConfigProvider.js +36 -0
- package/dist/ConvexConfigProvider.js.map +1 -0
- package/dist/ConvexFunctionDefinitions.d.ts +25 -0
- package/dist/ConvexFunctionDefinitions.d.ts.map +1 -0
- package/dist/ConvexFunctionDefinitions.js +25 -0
- package/dist/ConvexFunctionDefinitions.js.map +1 -0
- package/dist/ConvexLogger.d.ts +17 -0
- package/dist/ConvexLogger.d.ts.map +1 -0
- package/dist/ConvexLogger.js +33 -0
- package/dist/ConvexLogger.js.map +1 -0
- package/dist/CronJob.d.ts +14 -0
- package/dist/CronJob.d.ts.map +1 -0
- package/dist/CronJob.js +22 -0
- package/dist/CronJob.js.map +1 -0
- package/dist/CronJobs.d.ts +22 -0
- package/dist/CronJobs.d.ts.map +1 -0
- package/dist/CronJobs.js +83 -0
- package/dist/CronJobs.js.map +1 -0
- package/dist/DataModel.d.ts +28 -0
- package/dist/DataModel.d.ts.map +1 -0
- package/dist/DataModel.js +7 -0
- package/dist/DataModel.js.map +1 -0
- package/dist/DatabaseReader.d.ts +26 -0
- package/dist/DatabaseReader.d.ts.map +1 -0
- package/dist/DatabaseReader.js +33 -0
- package/dist/DatabaseReader.js.map +1 -0
- package/dist/DatabaseSchema.d.ts +67 -0
- package/dist/DatabaseSchema.d.ts.map +1 -0
- package/dist/DatabaseSchema.js +61 -0
- package/dist/DatabaseSchema.js.map +1 -0
- package/dist/DatabaseWriter.d.ts +44 -0
- package/dist/DatabaseWriter.d.ts.map +1 -0
- package/dist/DatabaseWriter.js +47 -0
- package/dist/DatabaseWriter.js.map +1 -0
- package/dist/Document.d.ts +37 -0
- package/dist/Document.d.ts.map +1 -0
- package/dist/Document.js +54 -0
- package/dist/Document.js.map +1 -0
- package/dist/ExecutionMetadata.d.ts +13 -0
- package/dist/ExecutionMetadata.d.ts.map +1 -0
- package/dist/ExecutionMetadata.js +19 -0
- package/dist/ExecutionMetadata.js.map +1 -0
- package/dist/FunctionImpl.d.ts +39 -0
- package/dist/FunctionImpl.d.ts.map +1 -0
- package/dist/FunctionImpl.js +46 -0
- package/dist/FunctionImpl.js.map +1 -0
- package/dist/FunctionRegistryItem.d.ts +36 -0
- package/dist/FunctionRegistryItem.d.ts.map +1 -0
- package/dist/FunctionRegistryItem.js +34 -0
- package/dist/FunctionRegistryItem.js.map +1 -0
- package/dist/GroupImpl.d.ts +77 -0
- package/dist/GroupImpl.d.ts.map +1 -0
- package/dist/GroupImpl.js +81 -0
- package/dist/GroupImpl.js.map +1 -0
- package/dist/GroupRegistry.d.ts +8 -0
- package/dist/GroupRegistry.d.ts.map +1 -0
- package/dist/GroupRegistry.js +26 -0
- package/dist/GroupRegistry.js.map +1 -0
- package/dist/Handler.d.ts +47 -0
- package/dist/Handler.d.ts.map +1 -0
- package/dist/Handler.js +7 -0
- package/dist/Handler.js.map +1 -0
- package/dist/HttpRouter.d.ts +80 -0
- package/dist/HttpRouter.d.ts.map +1 -0
- package/dist/HttpRouter.js +195 -0
- package/dist/HttpRouter.js.map +1 -0
- package/dist/MiddlewareImpl.d.ts +79 -0
- package/dist/MiddlewareImpl.d.ts.map +1 -0
- package/dist/MiddlewareImpl.js +58 -0
- package/dist/MiddlewareImpl.js.map +1 -0
- package/dist/MiddlewareRegistryItem.d.ts +12 -0
- package/dist/MiddlewareRegistryItem.d.ts.map +1 -0
- package/dist/MiddlewareRegistryItem.js +15 -0
- package/dist/MiddlewareRegistryItem.js.map +1 -0
- package/dist/MutationCtx.d.ts +10 -0
- package/dist/MutationCtx.d.ts.map +1 -0
- package/dist/MutationCtx.js +18 -0
- package/dist/MutationCtx.js.map +1 -0
- package/dist/MutationRunner.d.ts +27 -0
- package/dist/MutationRunner.d.ts.map +1 -0
- package/dist/MutationRunner.js +28 -0
- package/dist/MutationRunner.js.map +1 -0
- package/dist/MutationTransactionContext.d.ts +17 -0
- package/dist/MutationTransactionContext.d.ts.map +1 -0
- package/dist/MutationTransactionContext.js +20 -0
- package/dist/MutationTransactionContext.js.map +1 -0
- package/dist/OrderedQuery.d.ts +32 -0
- package/dist/OrderedQuery.d.ts.map +1 -0
- package/dist/OrderedQuery.js +36 -0
- package/dist/OrderedQuery.js.map +1 -0
- package/dist/QueryCtx.d.ts +10 -0
- package/dist/QueryCtx.d.ts.map +1 -0
- package/dist/QueryCtx.js +18 -0
- package/dist/QueryCtx.js.map +1 -0
- package/dist/QueryInitializer.d.ts +75 -0
- package/dist/QueryInitializer.d.ts.map +1 -0
- package/dist/QueryInitializer.js +105 -0
- package/dist/QueryInitializer.js.map +1 -0
- package/dist/QueryRunner.d.ts +46 -0
- package/dist/QueryRunner.d.ts.map +1 -0
- package/dist/QueryRunner.js +30 -0
- package/dist/QueryRunner.js.map +1 -0
- package/dist/QueryStream.d.ts +678 -0
- package/dist/QueryStream.d.ts.map +1 -0
- package/dist/QueryStream.js +943 -0
- package/dist/QueryStream.js.map +1 -0
- package/dist/QueryStreamCursor.d.ts +39 -0
- package/dist/QueryStreamCursor.d.ts.map +1 -0
- package/dist/QueryStreamCursor.js +52 -0
- package/dist/QueryStreamCursor.js.map +1 -0
- package/dist/QueryStreamIndexPrefix.d.ts +48 -0
- package/dist/QueryStreamIndexPrefix.d.ts.map +1 -0
- package/dist/QueryStreamIndexPrefix.js +38 -0
- package/dist/QueryStreamIndexPrefix.js.map +1 -0
- package/dist/QueryStreamIndexRange.d.ts +193 -0
- package/dist/QueryStreamIndexRange.d.ts.map +1 -0
- package/dist/QueryStreamIndexRange.js +241 -0
- package/dist/QueryStreamIndexRange.js.map +1 -0
- package/dist/QueryStreamKey.d.ts +64 -0
- package/dist/QueryStreamKey.d.ts.map +1 -0
- package/dist/QueryStreamKey.js +69 -0
- package/dist/QueryStreamKey.js.map +1 -0
- package/dist/QueryStreamKeyBounds.d.ts +136 -0
- package/dist/QueryStreamKeyBounds.d.ts.map +1 -0
- package/dist/QueryStreamKeyBounds.js +208 -0
- package/dist/QueryStreamKeyBounds.js.map +1 -0
- package/dist/QueryStreamKeyLabels.d.ts +27 -0
- package/dist/QueryStreamKeyLabels.d.ts.map +1 -0
- package/dist/QueryStreamKeyLabels.js +22 -0
- package/dist/QueryStreamKeyLabels.js.map +1 -0
- package/dist/QueryStreamKeyLayout.d.ts +179 -0
- package/dist/QueryStreamKeyLayout.d.ts.map +1 -0
- package/dist/QueryStreamKeyLayout.js +167 -0
- package/dist/QueryStreamKeyLayout.js.map +1 -0
- package/dist/QueryStreamKeyValues.d.ts +40 -0
- package/dist/QueryStreamKeyValues.d.ts.map +1 -0
- package/dist/QueryStreamKeyValues.js +57 -0
- package/dist/QueryStreamKeyValues.js.map +1 -0
- package/dist/QueryStreamOrderDirection.d.ts +24 -0
- package/dist/QueryStreamOrderDirection.d.ts.map +1 -0
- package/dist/QueryStreamOrderDirection.js +11 -0
- package/dist/QueryStreamOrderDirection.js.map +1 -0
- package/dist/QueryStreamPagination.d.ts +264 -0
- package/dist/QueryStreamPagination.d.ts.map +1 -0
- package/dist/QueryStreamPagination.js +172 -0
- package/dist/QueryStreamPagination.js.map +1 -0
- package/dist/QueryStreamReadBudget.d.ts +63 -0
- package/dist/QueryStreamReadBudget.d.ts.map +1 -0
- package/dist/QueryStreamReadBudget.js +81 -0
- package/dist/QueryStreamReadBudget.js.map +1 -0
- package/dist/QueryTransactionContext.d.ts +16 -0
- package/dist/QueryTransactionContext.d.ts.map +1 -0
- package/dist/QueryTransactionContext.js +17 -0
- package/dist/QueryTransactionContext.js.map +1 -0
- package/dist/RegisteredConvexFunction.d.ts +359 -0
- package/dist/RegisteredConvexFunction.d.ts.map +1 -0
- package/dist/RegisteredConvexFunction.js +154 -0
- package/dist/RegisteredConvexFunction.js.map +1 -0
- package/dist/RegisteredFunction.d.ts +143 -0
- package/dist/RegisteredFunction.d.ts.map +1 -0
- package/dist/RegisteredFunction.js +125 -0
- package/dist/RegisteredFunction.js.map +1 -0
- package/dist/RegisteredFunctions.d.ts +57 -0
- package/dist/RegisteredFunctions.d.ts.map +1 -0
- package/dist/RegisteredFunctions.js +32 -0
- package/dist/RegisteredFunctions.js.map +1 -0
- package/dist/RegisteredNodeFunction.d.ts +11 -0
- package/dist/RegisteredNodeFunction.d.ts.map +1 -0
- package/dist/RegisteredNodeFunction.js +45 -0
- package/dist/RegisteredNodeFunction.js.map +1 -0
- package/dist/Registry.d.ts +12 -0
- package/dist/Registry.d.ts.map +1 -0
- package/dist/Registry.js +17 -0
- package/dist/Registry.js.map +1 -0
- package/dist/RegistryItems.d.ts +21 -0
- package/dist/RegistryItems.d.ts.map +1 -0
- package/dist/RegistryItems.js +27 -0
- package/dist/RegistryItems.js.map +1 -0
- package/dist/RequestMetadata.d.ts +12 -0
- package/dist/RequestMetadata.d.ts.map +1 -0
- package/dist/RequestMetadata.js +16 -0
- package/dist/RequestMetadata.js.map +1 -0
- package/dist/ResolvedMiddleware.d.ts +24 -0
- package/dist/ResolvedMiddleware.d.ts.map +1 -0
- package/dist/ResolvedMiddleware.js +34 -0
- package/dist/ResolvedMiddleware.js.map +1 -0
- package/dist/Scheduler.d.ts +31 -0
- package/dist/Scheduler.d.ts.map +1 -0
- package/dist/Scheduler.js +35 -0
- package/dist/Scheduler.js.map +1 -0
- package/dist/Storage.d.ts +22 -0
- package/dist/Storage.d.ts.map +1 -0
- package/dist/Storage.js +27 -0
- package/dist/Storage.js.map +1 -0
- package/dist/StorageActionWriter.d.ts +35 -0
- package/dist/StorageActionWriter.d.ts.map +1 -0
- package/dist/StorageActionWriter.js +24 -0
- package/dist/StorageActionWriter.js.map +1 -0
- package/dist/StorageReader.d.ts +26 -0
- package/dist/StorageReader.d.ts.map +1 -0
- package/dist/StorageReader.js +22 -0
- package/dist/StorageReader.js.map +1 -0
- package/dist/StorageWriter.d.ts +29 -0
- package/dist/StorageWriter.d.ts.map +1 -0
- package/dist/StorageWriter.js +24 -0
- package/dist/StorageWriter.js.map +1 -0
- package/dist/Table.d.ts +274 -0
- package/dist/Table.d.ts.map +1 -0
- package/dist/Table.js +70 -0
- package/dist/Table.js.map +1 -0
- package/dist/TableInfo.d.ts +44 -0
- package/dist/TableInfo.d.ts.map +1 -0
- package/dist/TableInfo.js +7 -0
- package/dist/TableInfo.js.map +1 -0
- package/dist/TransactionMetadata.d.ts +12 -0
- package/dist/TransactionMetadata.d.ts.map +1 -0
- package/dist/TransactionMetadata.js +16 -0
- package/dist/TransactionMetadata.js.map +1 -0
- package/dist/VectorSearch.d.ts +23 -0
- package/dist/VectorSearch.d.ts.map +1 -0
- package/dist/VectorSearch.js +17 -0
- package/dist/VectorSearch.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/internal/AiGatewayDecisionClient.d.ts +7 -0
- package/dist/internal/AiGatewayDecisionClient.d.ts.map +1 -0
- package/dist/internal/AiGatewayDecisionClient.js +19 -0
- package/dist/internal/AiGatewayDecisionClient.js.map +1 -0
- package/dist/internal/AiGatewayLanguageClient.d.ts +7 -0
- package/dist/internal/AiGatewayLanguageClient.d.ts.map +1 -0
- package/dist/internal/AiGatewayLanguageClient.js +19 -0
- package/dist/internal/AiGatewayLanguageClient.js.map +1 -0
- package/dist/internal/AiGatewayServiceToken.d.ts +46 -0
- package/dist/internal/AiGatewayServiceToken.d.ts.map +1 -0
- package/dist/internal/AiGatewayServiceToken.js +62 -0
- package/dist/internal/AiGatewayServiceToken.js.map +1 -0
- package/dist/internal/constants.d.ts +2 -0
- package/dist/internal/constants.d.ts.map +1 -0
- package/dist/internal/constants.js +6 -0
- package/dist/internal/constants.js.map +1 -0
- package/dist/internal/utils.d.ts +13 -0
- package/dist/internal/utils.d.ts.map +1 -0
- package/dist/internal/utils.js +50 -0
- package/dist/internal/utils.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +1 -0
- package/package.json +68 -3
- package/src/ActionCtx.ts +45 -0
- package/src/ActionRunner.ts +36 -0
- package/src/AiGatewayDecisionClient.ts +40 -0
- package/src/AiGatewayDecisionModel.ts +46 -0
- package/src/AiGatewayLanguageClient.ts +41 -0
- package/src/AiGatewayLanguageModel.ts +61 -0
- package/src/Auth.ts +51 -0
- package/src/BlobNotFoundError.ts +12 -0
- package/src/Callback.ts +313 -0
- package/src/ComponentCtx.ts +192 -0
- package/src/ConvexConfigProvider.ts +39 -0
- package/src/ConvexFunctionDefinitions.ts +91 -0
- package/src/ConvexLogger.ts +43 -0
- package/src/CronJob.ts +42 -0
- package/src/CronJobs.ts +165 -0
- package/src/DataModel.ts +81 -0
- package/src/DatabaseReader.ts +118 -0
- package/src/DatabaseSchema.ts +139 -0
- package/src/DatabaseWriter.ts +232 -0
- package/src/Document.ts +146 -0
- package/src/ExecutionMetadata.ts +26 -0
- package/src/FunctionImpl.ts +96 -0
- package/src/FunctionRegistryItem.ts +85 -0
- package/src/GroupImpl.ts +167 -0
- package/src/GroupRegistry.ts +41 -0
- package/src/Handler.ts +191 -0
- package/src/HttpRouter.ts +388 -0
- package/src/MiddlewareImpl.ts +247 -0
- package/src/MiddlewareRegistryItem.ts +21 -0
- package/src/MutationCtx.ts +45 -0
- package/src/MutationRunner.ts +66 -0
- package/src/MutationTransactionContext.ts +48 -0
- package/src/OrderedQuery.ts +136 -0
- package/src/QueryCtx.ts +45 -0
- package/src/QueryInitializer.ts +537 -0
- package/src/QueryRunner.ts +91 -0
- package/src/QueryStream.ts +2476 -0
- package/src/QueryStreamCursor.ts +99 -0
- package/src/QueryStreamIndexPrefix.ts +79 -0
- package/src/QueryStreamIndexRange.ts +489 -0
- package/src/QueryStreamKey.ts +118 -0
- package/src/QueryStreamKeyBounds.ts +395 -0
- package/src/QueryStreamKeyLabels.ts +56 -0
- package/src/QueryStreamKeyLayout.ts +382 -0
- package/src/QueryStreamKeyValues.ts +112 -0
- package/src/QueryStreamOrderDirection.ts +29 -0
- package/src/QueryStreamPagination.ts +357 -0
- package/src/QueryStreamReadBudget.ts +167 -0
- package/src/QueryTransactionContext.ts +37 -0
- package/src/RegisteredConvexFunction.ts +415 -0
- package/src/RegisteredFunction.ts +391 -0
- package/src/RegisteredFunctions.ts +88 -0
- package/src/RegisteredNodeFunction.ts +120 -0
- package/src/Registry.ts +17 -0
- package/src/RegistryItems.ts +40 -0
- package/src/RequestMetadata.ts +20 -0
- package/src/ResolvedMiddleware.ts +70 -0
- package/src/Scheduler.ts +85 -0
- package/src/Storage.ts +37 -0
- package/src/StorageActionWriter.ts +59 -0
- package/src/StorageReader.ts +59 -0
- package/src/StorageWriter.ts +58 -0
- package/src/Table.ts +156 -0
- package/src/TableInfo.ts +106 -0
- package/src/TransactionMetadata.ts +20 -0
- package/src/VectorSearch.ts +75 -0
- package/src/index.ts +87 -0
- package/src/internal/AiGatewayDecisionClient.ts +16 -0
- package/src/internal/AiGatewayLanguageClient.ts +16 -0
- package/src/internal/AiGatewayServiceToken.ts +129 -0
- package/src/internal/constants.ts +1 -0
- package/src/internal/utils.ts +89 -0
- package/src/node.ts +1 -0
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
import type * as IdScope from "@confect/core/IdScope";
|
|
2
|
+
import type {
|
|
3
|
+
OrderedQuery as ConvexOrderedQuery,
|
|
4
|
+
QueryInitializer as ConvexQueryInitializer,
|
|
5
|
+
DocumentByInfo,
|
|
6
|
+
GenericTableIndexes,
|
|
7
|
+
Indexes,
|
|
8
|
+
IndexRange,
|
|
9
|
+
IndexRangeBuilder,
|
|
10
|
+
NamedIndex,
|
|
11
|
+
NamedSearchIndex,
|
|
12
|
+
NamedTableInfo,
|
|
13
|
+
Query,
|
|
14
|
+
SearchFilter,
|
|
15
|
+
SearchFilterBuilder,
|
|
16
|
+
SearchIndexes,
|
|
17
|
+
} from "convex/server";
|
|
18
|
+
import type { GenericId } from "convex/values";
|
|
19
|
+
import { pipe } from "effect/Function";
|
|
20
|
+
import * as Array from "effect/Array";
|
|
21
|
+
import * as Effect from "effect/Effect";
|
|
22
|
+
import * as Option from "effect/Option";
|
|
23
|
+
import * as Predicate from "effect/Predicate";
|
|
24
|
+
import type { ReadonlyRecord } from "effect/Record";
|
|
25
|
+
import * as Result from "effect/Result";
|
|
26
|
+
import * as Schema from "effect/Schema";
|
|
27
|
+
import type {
|
|
28
|
+
BaseDatabaseReader,
|
|
29
|
+
IndexFieldTypesForEq,
|
|
30
|
+
} from "@confect/core/Types";
|
|
31
|
+
import type * as DataModel from "./DataModel.js";
|
|
32
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
33
|
+
import * as Document from "./Document.js";
|
|
34
|
+
import * as OrderedQuery from "./OrderedQuery.js";
|
|
35
|
+
import * as QueryStream from "./QueryStream.js";
|
|
36
|
+
import type * as QueryStreamKeyLabels from "./QueryStreamKeyLabels.js";
|
|
37
|
+
import * as QueryStreamIndexRange from "./QueryStreamIndexRange.js";
|
|
38
|
+
import type { QueryStreamOrderDirection as OrderDirection } from "./QueryStreamOrderDirection.js";
|
|
39
|
+
import type * as Table from "./Table.js";
|
|
40
|
+
|
|
41
|
+
type ConvexTableInfoFor<
|
|
42
|
+
DataModel_ extends DataModel.AnyWithProps,
|
|
43
|
+
TableName extends DataModel.TableNames<DataModel_>,
|
|
44
|
+
> = DataModel.TableInfoWithName<DataModel_, TableName>;
|
|
45
|
+
|
|
46
|
+
type TableInfoFor<
|
|
47
|
+
DataModel_ extends DataModel.AnyWithProps,
|
|
48
|
+
TableName extends DataModel.TableNames<DataModel_>,
|
|
49
|
+
> = DataModel.TableInfoWithName_<DataModel_, TableName>;
|
|
50
|
+
|
|
51
|
+
export interface QueryInitializer<
|
|
52
|
+
DataModel_ extends DataModel.AnyWithProps,
|
|
53
|
+
TableName extends DataModel.TableNames<DataModel_>,
|
|
54
|
+
Doc = DataModel.DocumentWithName<DataModel_, TableName>,
|
|
55
|
+
TargetKind extends DatabaseSchema.Target["kind"] = "app",
|
|
56
|
+
> {
|
|
57
|
+
readonly get: {
|
|
58
|
+
(
|
|
59
|
+
id: DataModel.Id<DataModel_, TableName>,
|
|
60
|
+
): Effect.Effect<Doc, Document.DocumentDecodeError | GetByIdFailure>;
|
|
61
|
+
<
|
|
62
|
+
IndexName extends keyof Indexes<
|
|
63
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
64
|
+
>,
|
|
65
|
+
>(
|
|
66
|
+
indexName: IndexName,
|
|
67
|
+
...indexFieldValues: IndexFieldTypesForEq<
|
|
68
|
+
DataModel.ToConvex<DataModel_>,
|
|
69
|
+
TableName,
|
|
70
|
+
Indexes<ConvexTableInfoFor<DataModel_, TableName>>[IndexName]
|
|
71
|
+
>
|
|
72
|
+
): Effect.Effect<Doc, Document.DocumentDecodeError | GetByIndexFailure>;
|
|
73
|
+
};
|
|
74
|
+
readonly index: {
|
|
75
|
+
<
|
|
76
|
+
IndexName extends keyof Indexes<
|
|
77
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
78
|
+
>,
|
|
79
|
+
>(
|
|
80
|
+
indexName: IndexName,
|
|
81
|
+
indexRange?: (
|
|
82
|
+
q: IndexRangeBuilder<
|
|
83
|
+
TableInfoFor<DataModel_, TableName>["convexDocument"],
|
|
84
|
+
NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
|
|
85
|
+
>,
|
|
86
|
+
) => IndexRange,
|
|
87
|
+
order?: OrderDirection,
|
|
88
|
+
): OrderedQuery.OrderedQuery<
|
|
89
|
+
TableInfoFor<DataModel_, TableName>,
|
|
90
|
+
Doc,
|
|
91
|
+
TargetKind
|
|
92
|
+
>;
|
|
93
|
+
<
|
|
94
|
+
IndexName extends keyof Indexes<
|
|
95
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
96
|
+
>,
|
|
97
|
+
>(
|
|
98
|
+
indexName: IndexName,
|
|
99
|
+
order?: OrderDirection,
|
|
100
|
+
): OrderedQuery.OrderedQuery<
|
|
101
|
+
TableInfoFor<DataModel_, TableName>,
|
|
102
|
+
Doc,
|
|
103
|
+
TargetKind
|
|
104
|
+
>;
|
|
105
|
+
};
|
|
106
|
+
readonly search: <
|
|
107
|
+
IndexName extends keyof SearchIndexes<
|
|
108
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
109
|
+
>,
|
|
110
|
+
>(
|
|
111
|
+
indexName: IndexName,
|
|
112
|
+
searchFilter: (
|
|
113
|
+
q: SearchFilterBuilder<
|
|
114
|
+
DocumentByInfo<ConvexTableInfoFor<DataModel_, TableName>>,
|
|
115
|
+
NamedSearchIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
|
|
116
|
+
>,
|
|
117
|
+
) => SearchFilter,
|
|
118
|
+
) => OrderedQuery.OrderedQuery<
|
|
119
|
+
TableInfoFor<DataModel_, TableName>,
|
|
120
|
+
Doc,
|
|
121
|
+
TargetKind
|
|
122
|
+
>;
|
|
123
|
+
/**
|
|
124
|
+
* EXPERIMENTAL—stream-first querying (see `notes/stream-based-querying.md`).
|
|
125
|
+
*
|
|
126
|
+
* Like `index`, but returns a {@link QueryStream.QueryStream}: a genuine
|
|
127
|
+
* Effect `Stream` of documents in index order that stays mergeable and
|
|
128
|
+
* paginable.
|
|
129
|
+
*
|
|
130
|
+
* In SQL terms: an index range scan—`SELECT * FROM table WHERE <range> ORDER
|
|
131
|
+
* BY <index fields> [DESC]`; `eq` calls are the equality predicates, the
|
|
132
|
+
* bound calls are the range predicates. The value is a reusable description
|
|
133
|
+
* of a query: each run re-runs the index query. * The typed range builder
|
|
134
|
+
* consumes `eq`-pinned fields from the index's field tuple at the type level,
|
|
135
|
+
* so the stream's visible label type is exactly the fields that still vary
|
|
136
|
+
* (the `ORDER BY` columns left after the equality predicates). The order
|
|
137
|
+
* direction is part of the type too: omitted, it is `"asc"`; a literal is
|
|
138
|
+
* tracked as that literal, and a value known only at runtime as the union.
|
|
139
|
+
* The order parameter is either absent or a direction—never `undefined`—so
|
|
140
|
+
* the type can't claim a literal the runtime default would contradict.
|
|
141
|
+
*/
|
|
142
|
+
readonly stream: {
|
|
143
|
+
<
|
|
144
|
+
IndexName extends keyof Indexes<
|
|
145
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
146
|
+
> &
|
|
147
|
+
string,
|
|
148
|
+
Range extends QueryStreamIndexRange.QueryStreamIndexRange,
|
|
149
|
+
>(
|
|
150
|
+
indexName: IndexName,
|
|
151
|
+
indexRange: (
|
|
152
|
+
q: QueryStreamIndexRange.Builder<
|
|
153
|
+
TableInfoFor<DataModel_, TableName>["convexDocument"],
|
|
154
|
+
NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
|
|
155
|
+
>,
|
|
156
|
+
) => Range,
|
|
157
|
+
): QueryStream.QueryStream<
|
|
158
|
+
Doc,
|
|
159
|
+
QueryStreamKeyLabels.QueryStreamKeyLabels<
|
|
160
|
+
QueryStreamIndexRange.Remaining<Range>
|
|
161
|
+
>,
|
|
162
|
+
"asc",
|
|
163
|
+
Document.DocumentDecodeError,
|
|
164
|
+
never
|
|
165
|
+
>;
|
|
166
|
+
<
|
|
167
|
+
IndexName extends keyof Indexes<
|
|
168
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
169
|
+
> &
|
|
170
|
+
string,
|
|
171
|
+
Range extends QueryStreamIndexRange.QueryStreamIndexRange,
|
|
172
|
+
Direction extends OrderDirection,
|
|
173
|
+
>(
|
|
174
|
+
indexName: IndexName,
|
|
175
|
+
indexRange: (
|
|
176
|
+
q: QueryStreamIndexRange.Builder<
|
|
177
|
+
TableInfoFor<DataModel_, TableName>["convexDocument"],
|
|
178
|
+
NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
|
|
179
|
+
>,
|
|
180
|
+
) => Range,
|
|
181
|
+
order: Direction,
|
|
182
|
+
): QueryStream.QueryStream<
|
|
183
|
+
Doc,
|
|
184
|
+
QueryStreamKeyLabels.QueryStreamKeyLabels<
|
|
185
|
+
QueryStreamIndexRange.Remaining<Range>
|
|
186
|
+
>,
|
|
187
|
+
Direction,
|
|
188
|
+
Document.DocumentDecodeError,
|
|
189
|
+
never
|
|
190
|
+
>;
|
|
191
|
+
<
|
|
192
|
+
IndexName extends keyof Indexes<
|
|
193
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
194
|
+
> &
|
|
195
|
+
string,
|
|
196
|
+
>(
|
|
197
|
+
indexName: IndexName,
|
|
198
|
+
): QueryStream.QueryStream<
|
|
199
|
+
Doc,
|
|
200
|
+
QueryStreamKeyLabels.QueryStreamKeyLabels<
|
|
201
|
+
NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
|
|
202
|
+
>,
|
|
203
|
+
"asc",
|
|
204
|
+
Document.DocumentDecodeError,
|
|
205
|
+
never
|
|
206
|
+
>;
|
|
207
|
+
<
|
|
208
|
+
IndexName extends keyof Indexes<
|
|
209
|
+
ConvexTableInfoFor<DataModel_, TableName>
|
|
210
|
+
> &
|
|
211
|
+
string,
|
|
212
|
+
Direction extends OrderDirection,
|
|
213
|
+
>(
|
|
214
|
+
indexName: IndexName,
|
|
215
|
+
order: Direction,
|
|
216
|
+
): QueryStream.QueryStream<
|
|
217
|
+
Doc,
|
|
218
|
+
QueryStreamKeyLabels.QueryStreamKeyLabels<
|
|
219
|
+
NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
|
|
220
|
+
>,
|
|
221
|
+
Direction,
|
|
222
|
+
Document.DocumentDecodeError,
|
|
223
|
+
never
|
|
224
|
+
>;
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export function make<
|
|
229
|
+
Tables extends Table.AnyWithProps,
|
|
230
|
+
TableName extends Table.Name<Tables>,
|
|
231
|
+
>(
|
|
232
|
+
convexDatabaseReader: BaseDatabaseReader<
|
|
233
|
+
DataModel.ToConvex<DataModel.FromTables<Tables>>
|
|
234
|
+
>,
|
|
235
|
+
table: Table.WithName<Tables, TableName> & { readonly scope: IdScope.App },
|
|
236
|
+
): QueryInitializer<DataModel.FromTables<Tables>, TableName>;
|
|
237
|
+
export function make<
|
|
238
|
+
Tables extends Table.AnyWithProps,
|
|
239
|
+
TableName extends Table.Name<Tables>,
|
|
240
|
+
>(
|
|
241
|
+
convexDatabaseReader: BaseDatabaseReader<
|
|
242
|
+
DataModel.ToConvex<DataModel.FromTables<Tables>>
|
|
243
|
+
>,
|
|
244
|
+
table: Table.WithName<Tables, TableName>,
|
|
245
|
+
): QueryInitializer<
|
|
246
|
+
DataModel.FromTables<Tables>,
|
|
247
|
+
TableName,
|
|
248
|
+
DataModel.DocumentWithName<DataModel.FromTables<Tables>, TableName>,
|
|
249
|
+
Table.Scope<Table.WithName<Tables, TableName>> extends IdScope.App
|
|
250
|
+
? "app"
|
|
251
|
+
: "component"
|
|
252
|
+
>;
|
|
253
|
+
export function make<
|
|
254
|
+
Tables extends Table.AnyWithProps,
|
|
255
|
+
TableName extends Table.Name<Tables>,
|
|
256
|
+
>(
|
|
257
|
+
convexDatabaseReader: BaseDatabaseReader<
|
|
258
|
+
DataModel.ToConvex<DataModel.FromTables<Tables>>
|
|
259
|
+
>,
|
|
260
|
+
table: Table.WithName<Tables, TableName>,
|
|
261
|
+
): QueryInitializer<
|
|
262
|
+
DataModel.FromTables<Tables>,
|
|
263
|
+
TableName,
|
|
264
|
+
DataModel.DocumentWithName<DataModel.FromTables<Tables>, TableName>,
|
|
265
|
+
DatabaseSchema.Target["kind"]
|
|
266
|
+
> {
|
|
267
|
+
const tableName = table.tableName;
|
|
268
|
+
type DataModel_ = DataModel.FromTables<Tables>;
|
|
269
|
+
type ConvexDataModel_ = DataModel.ToConvex<DataModel_>;
|
|
270
|
+
type ThisQueryInitializer = QueryInitializer<
|
|
271
|
+
DataModel_,
|
|
272
|
+
TableName,
|
|
273
|
+
DataModel.DocumentWithName<DataModel_, TableName>,
|
|
274
|
+
DatabaseSchema.Target["kind"]
|
|
275
|
+
>;
|
|
276
|
+
type QueryInitializerFunction<
|
|
277
|
+
FunctionName extends keyof ThisQueryInitializer,
|
|
278
|
+
> = ThisQueryInitializer[FunctionName];
|
|
279
|
+
|
|
280
|
+
const getByIndex = <
|
|
281
|
+
IndexName extends keyof Indexes<
|
|
282
|
+
DataModel.TableInfoWithName<DataModel_, TableName>
|
|
283
|
+
>,
|
|
284
|
+
>(
|
|
285
|
+
indexName: IndexName,
|
|
286
|
+
indexFieldValues: IndexFieldTypesForEq<
|
|
287
|
+
DataModel.ToConvex<DataModel_>,
|
|
288
|
+
TableName,
|
|
289
|
+
Indexes<DataModel.TableInfoWithName<DataModel_, TableName>>[IndexName]
|
|
290
|
+
>,
|
|
291
|
+
): Effect.Effect<
|
|
292
|
+
DataModel.DocumentWithName<DataModel_, TableName>,
|
|
293
|
+
Document.DocumentDecodeError | GetByIndexFailure
|
|
294
|
+
> => {
|
|
295
|
+
const indexFieldPaths: GenericTableIndexes[keyof GenericTableIndexes] = (
|
|
296
|
+
table.indexes as GenericTableIndexes
|
|
297
|
+
)[indexName as keyof GenericTableIndexes]!;
|
|
298
|
+
|
|
299
|
+
return pipe(
|
|
300
|
+
Effect.promise(() =>
|
|
301
|
+
convexDatabaseReader
|
|
302
|
+
.query(tableName)
|
|
303
|
+
.withIndex(indexName, (q) =>
|
|
304
|
+
Array.reduce(
|
|
305
|
+
indexFieldValues,
|
|
306
|
+
q,
|
|
307
|
+
(q_, v, i) => q_.eq(indexFieldPaths[i] as any, v as any) as any,
|
|
308
|
+
),
|
|
309
|
+
)
|
|
310
|
+
.unique(),
|
|
311
|
+
),
|
|
312
|
+
Effect.andThen((value) =>
|
|
313
|
+
Effect.fromResult(
|
|
314
|
+
Result.fromNullishOr(
|
|
315
|
+
value,
|
|
316
|
+
() =>
|
|
317
|
+
new GetByIndexFailure({
|
|
318
|
+
tableName,
|
|
319
|
+
indexName: indexName as string,
|
|
320
|
+
indexFieldValues,
|
|
321
|
+
}),
|
|
322
|
+
),
|
|
323
|
+
),
|
|
324
|
+
),
|
|
325
|
+
Effect.andThen(Document.decode(table)),
|
|
326
|
+
);
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
const get: QueryInitializerFunction<"get"> = ((
|
|
330
|
+
...args: Parameters<QueryInitializerFunction<"get">>
|
|
331
|
+
) => {
|
|
332
|
+
if (args.length === 1) {
|
|
333
|
+
const id = args[0] as GenericId<TableName>;
|
|
334
|
+
|
|
335
|
+
return getById<Tables, TableName>(convexDatabaseReader, table)(id);
|
|
336
|
+
} else {
|
|
337
|
+
const [indexName, ...indexFieldValues] = args;
|
|
338
|
+
|
|
339
|
+
return getByIndex(
|
|
340
|
+
indexName as keyof Indexes<
|
|
341
|
+
DataModel.TableInfoWithName<DataModel_, TableName>
|
|
342
|
+
>,
|
|
343
|
+
indexFieldValues,
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
}) as QueryInitializerFunction<"get">;
|
|
347
|
+
|
|
348
|
+
const index: QueryInitializerFunction<"index"> = <
|
|
349
|
+
IndexName extends keyof Indexes<
|
|
350
|
+
DataModel.TableInfoWithName<DataModel_, TableName>
|
|
351
|
+
>,
|
|
352
|
+
>(
|
|
353
|
+
indexName: IndexName,
|
|
354
|
+
indexRangeOrOrder?:
|
|
355
|
+
| ((
|
|
356
|
+
q: IndexRangeBuilder<
|
|
357
|
+
DataModel.TableInfoWithName_<
|
|
358
|
+
DataModel_,
|
|
359
|
+
TableName
|
|
360
|
+
>["convexDocument"],
|
|
361
|
+
NamedIndex<
|
|
362
|
+
DataModel.TableInfoWithName<DataModel_, TableName>,
|
|
363
|
+
IndexName
|
|
364
|
+
>
|
|
365
|
+
>,
|
|
366
|
+
) => IndexRange)
|
|
367
|
+
| OrderDirection,
|
|
368
|
+
order?: OrderDirection,
|
|
369
|
+
) => {
|
|
370
|
+
const {
|
|
371
|
+
applyWithIndex,
|
|
372
|
+
applyOrder,
|
|
373
|
+
}: {
|
|
374
|
+
applyWithIndex: (
|
|
375
|
+
queryInitializer: ConvexQueryInitializer<
|
|
376
|
+
NamedTableInfo<ConvexDataModel_, TableName>
|
|
377
|
+
>,
|
|
378
|
+
) => Query<NamedTableInfo<ConvexDataModel_, TableName>>;
|
|
379
|
+
applyOrder: (
|
|
380
|
+
query: Query<NamedTableInfo<ConvexDataModel_, TableName>>,
|
|
381
|
+
) => ConvexOrderedQuery<NamedTableInfo<ConvexDataModel_, TableName>>;
|
|
382
|
+
} =
|
|
383
|
+
indexRangeOrOrder === undefined
|
|
384
|
+
? {
|
|
385
|
+
applyWithIndex: (q) => q.withIndex(indexName),
|
|
386
|
+
applyOrder: (q) => q.order("asc"),
|
|
387
|
+
}
|
|
388
|
+
: typeof indexRangeOrOrder === "function"
|
|
389
|
+
? order === undefined
|
|
390
|
+
? {
|
|
391
|
+
applyWithIndex: (q) =>
|
|
392
|
+
q.withIndex(indexName, indexRangeOrOrder),
|
|
393
|
+
applyOrder: (q) => q.order("asc"),
|
|
394
|
+
}
|
|
395
|
+
: {
|
|
396
|
+
applyWithIndex: (q) =>
|
|
397
|
+
q.withIndex(indexName, indexRangeOrOrder),
|
|
398
|
+
applyOrder: (q) => q.order(order),
|
|
399
|
+
}
|
|
400
|
+
: {
|
|
401
|
+
applyWithIndex: (q) => q.withIndex(indexName),
|
|
402
|
+
applyOrder: (q) => q.order(indexRangeOrOrder),
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
const orderedQuery = pipe(
|
|
406
|
+
convexDatabaseReader.query(tableName),
|
|
407
|
+
applyWithIndex,
|
|
408
|
+
applyOrder,
|
|
409
|
+
);
|
|
410
|
+
|
|
411
|
+
return OrderedQuery.make(orderedQuery, table);
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
const stream: QueryInitializerFunction<"stream"> = ((
|
|
415
|
+
indexName: string,
|
|
416
|
+
indexRangeOrOrder?:
|
|
417
|
+
| ((
|
|
418
|
+
q: QueryStreamIndexRange.Builder<any, any>,
|
|
419
|
+
) => QueryStreamIndexRange.QueryStreamIndexRange)
|
|
420
|
+
| OrderDirection,
|
|
421
|
+
maybeOrder?: OrderDirection,
|
|
422
|
+
) => {
|
|
423
|
+
const orderDirection = Predicate.isString(indexRangeOrOrder)
|
|
424
|
+
? indexRangeOrOrder
|
|
425
|
+
: (maybeOrder ?? "asc");
|
|
426
|
+
|
|
427
|
+
// Without a range callback, the leaf scans the entire index.
|
|
428
|
+
const indexRange = Predicate.isFunction(indexRangeOrOrder)
|
|
429
|
+
? indexRangeOrOrder(QueryStreamIndexRange.builder())
|
|
430
|
+
: QueryStreamIndexRange.builder();
|
|
431
|
+
|
|
432
|
+
// The type-level field tuple appends the `_creationTime` tiebreaker, but
|
|
433
|
+
// the runtime `table.indexes` record stores only the declared fields—append it here.
|
|
434
|
+
const indexFieldPaths: ReadonlyArray<string> =
|
|
435
|
+
indexName === "by_id"
|
|
436
|
+
? ["_id"]
|
|
437
|
+
: indexName === "by_creation_time"
|
|
438
|
+
? ["_creationTime"]
|
|
439
|
+
: pipe(
|
|
440
|
+
Option.fromUndefinedOr(
|
|
441
|
+
(
|
|
442
|
+
table.indexes as ReadonlyRecord<string, ReadonlyArray<string>>
|
|
443
|
+
)[indexName],
|
|
444
|
+
),
|
|
445
|
+
// An unknown index name is a defect, not an empty field list:
|
|
446
|
+
// silently empty fields would make key extraction and range
|
|
447
|
+
// splitting target the wrong fields.
|
|
448
|
+
Option.getOrThrowWith(
|
|
449
|
+
() =>
|
|
450
|
+
new Error(
|
|
451
|
+
`QueryInitializer.stream: table "${tableName}" has no index named "${indexName}"`,
|
|
452
|
+
),
|
|
453
|
+
),
|
|
454
|
+
Array.append("_creationTime"),
|
|
455
|
+
);
|
|
456
|
+
|
|
457
|
+
return QueryStream.fromReflection({
|
|
458
|
+
reader: convexDatabaseReader as QueryStream.ReflectionReader,
|
|
459
|
+
table,
|
|
460
|
+
indexName,
|
|
461
|
+
indexFieldPaths,
|
|
462
|
+
indexRange,
|
|
463
|
+
orderDirection,
|
|
464
|
+
});
|
|
465
|
+
}) as QueryInitializerFunction<"stream">;
|
|
466
|
+
|
|
467
|
+
const search: QueryInitializerFunction<"search"> = (
|
|
468
|
+
indexName,
|
|
469
|
+
searchFilter,
|
|
470
|
+
) =>
|
|
471
|
+
OrderedQuery.make(
|
|
472
|
+
convexDatabaseReader
|
|
473
|
+
.query(tableName)
|
|
474
|
+
.withSearchIndex(indexName, searchFilter),
|
|
475
|
+
table,
|
|
476
|
+
);
|
|
477
|
+
|
|
478
|
+
return {
|
|
479
|
+
get,
|
|
480
|
+
index,
|
|
481
|
+
search,
|
|
482
|
+
stream,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
export const getById =
|
|
487
|
+
<Tables extends Table.AnyWithProps, TableName extends Table.Name<Tables>>(
|
|
488
|
+
convexDatabaseReader: BaseDatabaseReader<
|
|
489
|
+
DataModel.ToConvex<DataModel.FromTables<Tables>>
|
|
490
|
+
>,
|
|
491
|
+
table: Table.WithName<Tables, TableName>,
|
|
492
|
+
) =>
|
|
493
|
+
(id: GenericId<TableName>) =>
|
|
494
|
+
pipe(
|
|
495
|
+
Effect.promise(() => convexDatabaseReader.get(id)),
|
|
496
|
+
Effect.andThen((value) =>
|
|
497
|
+
Effect.fromResult(
|
|
498
|
+
Result.fromNullishOr(
|
|
499
|
+
value,
|
|
500
|
+
() => new GetByIdFailure({ tableName: table.tableName, id }),
|
|
501
|
+
),
|
|
502
|
+
),
|
|
503
|
+
),
|
|
504
|
+
Effect.andThen(Document.decode(table)),
|
|
505
|
+
);
|
|
506
|
+
|
|
507
|
+
export class GetByIdFailure extends Schema.TaggedError<GetByIdFailure>()(
|
|
508
|
+
"GetByIdFailure",
|
|
509
|
+
{
|
|
510
|
+
id: Schema.String,
|
|
511
|
+
tableName: Schema.String,
|
|
512
|
+
},
|
|
513
|
+
) {
|
|
514
|
+
override get message(): string {
|
|
515
|
+
return Document.documentErrorMessage({
|
|
516
|
+
id: this.id,
|
|
517
|
+
tableName: this.tableName,
|
|
518
|
+
message: "not found",
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
export class GetByIndexFailure extends Schema.TaggedError<GetByIndexFailure>()(
|
|
524
|
+
"GetByIndexFailure",
|
|
525
|
+
{
|
|
526
|
+
tableName: Schema.String,
|
|
527
|
+
indexName: Schema.String,
|
|
528
|
+
indexFieldValues: Schema.Array(Schema.Unknown),
|
|
529
|
+
},
|
|
530
|
+
) {
|
|
531
|
+
override get message(): string {
|
|
532
|
+
return `No documents found in table '${this.tableName}' with index '${this.indexName}' and field values '${JSON.stringify(
|
|
533
|
+
this.indexFieldValues,
|
|
534
|
+
(_key, value) => (typeof value === "bigint" ? value.toString() : value),
|
|
535
|
+
)}'`;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import * as Ref from "@confect/core/Ref";
|
|
2
|
+
import type { GenericActionCtx } from "convex/server";
|
|
3
|
+
import * as Context from "effect/Context";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import type * as Schema from "effect/Schema";
|
|
7
|
+
import * as MutationTransactionContext from "./MutationTransactionContext.js";
|
|
8
|
+
import * as QueryTransactionContext from "./QueryTransactionContext.js";
|
|
9
|
+
|
|
10
|
+
export type Options = MutationTransactionContext.QueryOptions;
|
|
11
|
+
|
|
12
|
+
const run = Effect.fn("QueryRunner.runQuery")(
|
|
13
|
+
<A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => effect,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
const make = (nativeRunQuery: GenericActionCtx<any>["runQuery"]) => {
|
|
17
|
+
function runQuery<Query extends Ref.AnyQuery>(
|
|
18
|
+
query: Query,
|
|
19
|
+
...args: [...Ref.OptionalArgs<Query>, options?: undefined]
|
|
20
|
+
): Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | Schema.SchemaError>;
|
|
21
|
+
function runQuery<Query extends Ref.AnyQuery>(
|
|
22
|
+
query: Query,
|
|
23
|
+
args: Ref.Args<Query>,
|
|
24
|
+
options:
|
|
25
|
+
| (QueryTransactionContext.Options & {
|
|
26
|
+
readonly useStaleSnapshot?: never;
|
|
27
|
+
})
|
|
28
|
+
| undefined,
|
|
29
|
+
): Effect.Effect<
|
|
30
|
+
Ref.Returns<Query>,
|
|
31
|
+
Ref.Error<Query> | Schema.SchemaError,
|
|
32
|
+
QueryTransactionContext.QueryTransactionContext
|
|
33
|
+
>;
|
|
34
|
+
function runQuery<Query extends Ref.AnyQuery>(
|
|
35
|
+
query: Query,
|
|
36
|
+
args: Ref.Args<Query>,
|
|
37
|
+
options: Options & { readonly useStaleSnapshot: boolean },
|
|
38
|
+
): Effect.Effect<
|
|
39
|
+
Ref.Returns<Query>,
|
|
40
|
+
Ref.Error<Query> | Schema.SchemaError,
|
|
41
|
+
MutationTransactionContext.MutationTransactionContext
|
|
42
|
+
>;
|
|
43
|
+
function runQuery<Query extends Ref.AnyQuery>(
|
|
44
|
+
query: Query,
|
|
45
|
+
args: Ref.Args<Query>,
|
|
46
|
+
options: Options | undefined,
|
|
47
|
+
): Effect.Effect<
|
|
48
|
+
Ref.Returns<Query>,
|
|
49
|
+
Ref.Error<Query> | Schema.SchemaError,
|
|
50
|
+
| QueryTransactionContext.QueryTransactionContext
|
|
51
|
+
| MutationTransactionContext.MutationTransactionContext
|
|
52
|
+
>;
|
|
53
|
+
function runQuery<Query extends Ref.AnyQuery>(
|
|
54
|
+
query: Query,
|
|
55
|
+
args?: Ref.Args<Query>,
|
|
56
|
+
options?: Options,
|
|
57
|
+
): Effect.Effect<
|
|
58
|
+
Ref.Returns<Query>,
|
|
59
|
+
Ref.Error<Query> | Schema.SchemaError,
|
|
60
|
+
| QueryTransactionContext.QueryTransactionContext
|
|
61
|
+
| MutationTransactionContext.MutationTransactionContext
|
|
62
|
+
> {
|
|
63
|
+
return run(
|
|
64
|
+
Effect.gen(function* () {
|
|
65
|
+
const actualArgs = (args ?? {}) as Ref.Args<Query>;
|
|
66
|
+
if (options?.useStaleSnapshot !== undefined) {
|
|
67
|
+
const controls =
|
|
68
|
+
yield* MutationTransactionContext.MutationTransactionContext;
|
|
69
|
+
return yield* controls.runQuery(query, actualArgs, options);
|
|
70
|
+
}
|
|
71
|
+
if (options !== undefined) {
|
|
72
|
+
const controls =
|
|
73
|
+
yield* QueryTransactionContext.QueryTransactionContext;
|
|
74
|
+
return yield* controls.runQuery(query, actualArgs, options);
|
|
75
|
+
}
|
|
76
|
+
return yield* Ref.runWithCodec(query, actualArgs, (ref, encodedArgs) =>
|
|
77
|
+
nativeRunQuery(ref, encodedArgs),
|
|
78
|
+
);
|
|
79
|
+
}),
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
return { runQuery };
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const QueryRunner = Context.Service<ReturnType<typeof make>>(
|
|
86
|
+
"@confect/server/QueryRunner",
|
|
87
|
+
);
|
|
88
|
+
export type QueryRunner = typeof QueryRunner.Identifier;
|
|
89
|
+
|
|
90
|
+
export const layer = (runQuery: GenericActionCtx<any>["runQuery"]) =>
|
|
91
|
+
Layer.succeed(QueryRunner, make(runQuery));
|