@gaganref/confect-server 0.0.0-stage → 10.3.1-fork.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/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,167 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { hasPrefix, make as make$1 } from "./QueryStreamKeyLabels.js";
|
|
3
|
+
import { identity } from "effect/Function";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
import * as Array from "effect/Array";
|
|
6
|
+
import * as Result from "effect/Result";
|
|
7
|
+
import * as Data from "effect/Data";
|
|
8
|
+
import * as Equivalence_ from "effect/Equivalence";
|
|
9
|
+
//#region src/QueryStreamKeyLayout.ts
|
|
10
|
+
var QueryStreamKeyLayout_exports = /* @__PURE__ */ __exportAll({
|
|
11
|
+
Equivalence: () => Equivalence,
|
|
12
|
+
InvalidEqualityPrefixError: () => InvalidEqualityPrefixError,
|
|
13
|
+
InvalidLabelPrefixError: () => InvalidLabelPrefixError,
|
|
14
|
+
KeyLayoutMismatchError: () => KeyLayoutMismatchError,
|
|
15
|
+
LabelCountMismatchError: () => LabelCountMismatchError,
|
|
16
|
+
concat: () => concat,
|
|
17
|
+
format: () => format,
|
|
18
|
+
fromIndex: () => fromIndex,
|
|
19
|
+
positions: () => positions,
|
|
20
|
+
rename: () => rename,
|
|
21
|
+
resolvePrefix: () => resolvePrefix,
|
|
22
|
+
runtimeWidth: () => runtimeWidth,
|
|
23
|
+
validateEquivalence: () => validateEquivalence,
|
|
24
|
+
visibleLabels: () => visibleLabels
|
|
25
|
+
});
|
|
26
|
+
const Position = Data.taggedEnum();
|
|
27
|
+
const TypeId = "@confect/server/QueryStreamKeyLayout";
|
|
28
|
+
const make = (positions) => ({ [TypeId]: {
|
|
29
|
+
_Labels: identity,
|
|
30
|
+
positions
|
|
31
|
+
} });
|
|
32
|
+
/**
|
|
33
|
+
* The runtime positions, including implicit ID tiebreakers.
|
|
34
|
+
*
|
|
35
|
+
* @experimental
|
|
36
|
+
*/
|
|
37
|
+
const positions = (self) => self[TypeId].positions;
|
|
38
|
+
/**
|
|
39
|
+
* The equality prefix cannot select a whole number of source field paths.
|
|
40
|
+
*
|
|
41
|
+
* @experimental
|
|
42
|
+
*/
|
|
43
|
+
var InvalidEqualityPrefixError = class extends Data.TaggedError("InvalidEqualityPrefixError") {
|
|
44
|
+
get message() {
|
|
45
|
+
return `QueryStreamKeyLayout.fromIndex: invalid equality prefix length (${this.eqCount}) for ${this.fieldPaths.length} field paths`;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* The requested labels do not form a prefix of the layout's visible labels.
|
|
50
|
+
*
|
|
51
|
+
* @experimental
|
|
52
|
+
*/
|
|
53
|
+
var InvalidLabelPrefixError = class extends Data.TaggedError("InvalidLabelPrefixError") {
|
|
54
|
+
get message() {
|
|
55
|
+
return `Labels ([${Array.join(this.prefixKeyLabels, ", ")}]) must be a prefix of the ordering labels ([${Array.join(this.keyLabels, ", ")}])`;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The replacement labels cannot fill exactly the layout's visible positions.
|
|
60
|
+
*
|
|
61
|
+
* @experimental
|
|
62
|
+
*/
|
|
63
|
+
var LabelCountMismatchError = class extends Data.TaggedError("LabelCountMismatchError") {
|
|
64
|
+
get message() {
|
|
65
|
+
return `Replacement labels ([${Array.join(this.replacementKeyLabels, ", ")}]) must have as many labels as the ordering labels ([${Array.join(this.keyLabels, ", ")}])`;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
function fromIndex(fieldPaths, eqCount = 0) {
|
|
69
|
+
if (!Number.isInteger(eqCount) || eqCount < 0 || eqCount > fieldPaths.length) return Result.fail(new InvalidEqualityPrefixError({
|
|
70
|
+
fieldPaths,
|
|
71
|
+
eqCount
|
|
72
|
+
}));
|
|
73
|
+
const visible = Array.map(Array.drop(fieldPaths, eqCount), (label) => Position.Visible({ label }));
|
|
74
|
+
const keyPositions = Option.exists(Array.last(fieldPaths), (fieldPath) => fieldPath === "_id") ? visible : Array.append(visible, Position.ImplicitId());
|
|
75
|
+
return Result.succeed(make(keyPositions));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Concatenate layouts without losing component tiebreakers.
|
|
79
|
+
*
|
|
80
|
+
* @experimental
|
|
81
|
+
*/
|
|
82
|
+
const concat = (self, that) => make(Array.appendAll(positions(self), positions(that)));
|
|
83
|
+
/**
|
|
84
|
+
* Format visible labels and implicit IDs for diagnostics.
|
|
85
|
+
*
|
|
86
|
+
* @experimental
|
|
87
|
+
*/
|
|
88
|
+
const format = (self) => {
|
|
89
|
+
const tokens = Array.map(positions(self), Position.$match({
|
|
90
|
+
Visible: ({ label }) => JSON.stringify(label),
|
|
91
|
+
ImplicitId: () => "<implicit _id>"
|
|
92
|
+
}));
|
|
93
|
+
return `[${Array.join(tokens, ", ")}]`;
|
|
94
|
+
};
|
|
95
|
+
function visibleLabels(self) {
|
|
96
|
+
return make$1(Array.filterMap(positions(self), Position.$match({
|
|
97
|
+
Visible: ({ label }) => Result.succeed(label),
|
|
98
|
+
ImplicitId: () => Result.failVoid
|
|
99
|
+
})));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Number of positions in an element's runtime key.
|
|
103
|
+
*
|
|
104
|
+
* @experimental
|
|
105
|
+
*/
|
|
106
|
+
const runtimeWidth = (self) => positions(self).length;
|
|
107
|
+
const visiblePositions = (self) => Array.filterMap(positions(self), (position, index) => Position.$is("Visible")(position) ? Result.succeed(index) : Result.failVoid);
|
|
108
|
+
const PositionsEquivalence = Equivalence_.Array((self, that) => Position.$match(self, {
|
|
109
|
+
Visible: ({ label }) => Position.$is("Visible")(that) && label === that.label,
|
|
110
|
+
ImplicitId: () => Position.$is("ImplicitId")(that)
|
|
111
|
+
}));
|
|
112
|
+
/**
|
|
113
|
+
* @experimental
|
|
114
|
+
*/
|
|
115
|
+
const Equivalence = Equivalence_.mapInput(PositionsEquivalence, positions);
|
|
116
|
+
/**
|
|
117
|
+
* @experimental
|
|
118
|
+
*/
|
|
119
|
+
var KeyLayoutMismatchError = class extends Data.TaggedError("KeyLayoutMismatchError") {
|
|
120
|
+
get message() {
|
|
121
|
+
return `Key layout (${format(this.actualKeyLayout)}) does not match the expected layout (${format(this.expectedKeyLayout)})`;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* @experimental
|
|
126
|
+
*/
|
|
127
|
+
const validateEquivalence = (expectedKeyLayout, actualKeyLayout) => Equivalence(expectedKeyLayout, actualKeyLayout) ? Result.succeed(void 0) : Result.fail(new KeyLayoutMismatchError({
|
|
128
|
+
expectedKeyLayout,
|
|
129
|
+
actualKeyLayout
|
|
130
|
+
}));
|
|
131
|
+
/**
|
|
132
|
+
* Parse a visible label prefix and resolve its runtime width. Implicit IDs
|
|
133
|
+
* before the last selected label are included; implicit IDs after it are not.
|
|
134
|
+
*
|
|
135
|
+
* @experimental
|
|
136
|
+
*/
|
|
137
|
+
const resolvePrefix = (self, prefixKeyLabels) => {
|
|
138
|
+
const keyLabels = visibleLabels(self);
|
|
139
|
+
if (!hasPrefix(keyLabels, prefixKeyLabels)) return Result.fail(new InvalidLabelPrefixError({
|
|
140
|
+
keyLabels,
|
|
141
|
+
prefixKeyLabels
|
|
142
|
+
}));
|
|
143
|
+
return Result.succeed(Option.match(Array.get(visiblePositions(self), prefixKeyLabels.length - 1), {
|
|
144
|
+
onNone: () => 0,
|
|
145
|
+
onSome: (position) => position + 1
|
|
146
|
+
}));
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Relabel visible positions, preserving every implicit ID.
|
|
150
|
+
*
|
|
151
|
+
* @experimental
|
|
152
|
+
*/
|
|
153
|
+
const rename = (self, replacementKeyLabels) => {
|
|
154
|
+
const [consumed, renamed] = Array.mapAccum(positions(self), 0, (index, position) => Position.$match(position, {
|
|
155
|
+
ImplicitId: () => [index, Option.some(position)],
|
|
156
|
+
Visible: () => [index + 1, Option.map(Array.get(replacementKeyLabels, index), (label) => Position.Visible({ label }))]
|
|
157
|
+
}));
|
|
158
|
+
const parsed = consumed === replacementKeyLabels.length ? Option.all(renamed) : Option.none();
|
|
159
|
+
return Result.fromOption(Option.map(parsed, make), () => new LabelCountMismatchError({
|
|
160
|
+
keyLabels: visibleLabels(self),
|
|
161
|
+
replacementKeyLabels
|
|
162
|
+
}));
|
|
163
|
+
};
|
|
164
|
+
//#endregion
|
|
165
|
+
export { Equivalence, InvalidEqualityPrefixError, InvalidLabelPrefixError, KeyLayoutMismatchError, LabelCountMismatchError, QueryStreamKeyLayout_exports, concat, format, fromIndex, positions, rename, resolvePrefix, runtimeWidth, validateEquivalence, visibleLabels };
|
|
166
|
+
|
|
167
|
+
//# sourceMappingURL=QueryStreamKeyLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyLayout.js","names":["QueryStreamKeyLabels.make","QueryStreamKeyLabels.hasPrefix"],"sources":["../src/QueryStreamKeyLayout.ts"],"sourcesContent":["import * as Array from \"effect/Array\";\nimport * as Data from \"effect/Data\";\nimport * as Equivalence_ from \"effect/Equivalence\";\nimport { identity } from \"effect/Function\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport type * as Types from \"effect/Types\";\n\nimport * as QueryStreamKeyLabels from \"./QueryStreamKeyLabels\";\n\n/**\n * One runtime position of a stream key. Explicit IDs and their aliases are\n * visible; implicit ID tiebreakers have no label. Empty keys have no\n * positions.\n *\n * @experimental\n */\nexport type Position = Data.TaggedEnum<{\n Visible: { readonly label: string };\n ImplicitId: {};\n}>;\n\nconst Position = Data.taggedEnum<Position>();\nconst TypeId = \"@confect/server/QueryStreamKeyLayout\";\n\n/**\n * Describes the positions in a stream's keys: their sequence, their labels, and\n * where implicit document-ID tiebreakers occur. Every element has its own key\n * values; the stream has one shared layout.\n *\n * For example, labels `[\"text\", \"_creationTime\"]` describe the labeled\n * positions in a key such as `[\"apple\", 1, \"n1\"]`. Its layout also records the\n * final implicit ID position. Joined layouts retain each component's ID, so\n * their labels alone do not describe every key position.\n *\n * Layouts are compatible when they have the same total width, labels in the\n * same positions, and implicit-ID positions. Direction is separate. Layouts\n * contain no key values, value-type schemas, table identity, or equality-pinned\n * values. Labels start as index field paths but may be renamed. An explicit ID,\n * such as in `by_id`, has a label.\n *\n * Reuse a stream's `keyLayout` with `empty` or `flatMap`'s `innerKeyLayout`.\n * Creating a stream to obtain its layout does not read documents. The\n * `KeyLabels` parameter tracks only labels; implicit-ID positions are checked\n * at runtime. Normally this type is inferred from the source stream.\n *\n * @experimental\n */\nexport interface QueryStreamKeyLayout<\n out KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels =\n QueryStreamKeyLabels.QueryStreamKeyLabels,\n> {\n readonly [TypeId]: {\n readonly _Labels: Types.Covariant<KeyLabels>;\n readonly positions: ReadonlyArray<Position>;\n };\n}\n\n// Private construction keeps the visible label witness with the operations\n// that derive it from index fields, concatenation, or renaming.\nconst make = <KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels>(\n positions: ReadonlyArray<Position>,\n): QueryStreamKeyLayout<KeyLabels> => ({\n [TypeId]: { _Labels: identity, positions },\n});\n\n/**\n * The runtime positions, including implicit ID tiebreakers.\n *\n * @experimental\n */\nexport const positions = (\n self: QueryStreamKeyLayout,\n): ReadonlyArray<Position> => self[TypeId].positions;\n\n/**\n * The source field paths remaining after an equality prefix.\n *\n * @experimental\n */\nexport type RemainingFieldPaths<\n FieldPaths extends ReadonlyArray<string>,\n Count extends number,\n> = Count extends unknown ? DropPrefix<FieldPaths, Count> : never;\n\ntype DropPrefix<\n FieldPaths extends ReadonlyArray<string>,\n Count extends number,\n Prefix extends ReadonlyArray<unknown> = [],\n> = number extends Count\n ? ReadonlyArray<string>\n : Prefix[\"length\"] extends Count\n ? Types.Mutable<FieldPaths>\n : FieldPaths extends readonly [\n string,\n ...infer TailFieldPaths extends ReadonlyArray<string>,\n ]\n ? DropPrefix<TailFieldPaths, Count, readonly [...Prefix, unknown]>\n : FieldPaths extends readonly []\n ? []\n : ReadonlyArray<string>;\n\n/**\n * The equality prefix cannot select a whole number of source field paths.\n *\n * @experimental\n */\nexport class InvalidEqualityPrefixError extends Data.TaggedError(\n \"InvalidEqualityPrefixError\",\n)<{\n readonly fieldPaths: ReadonlyArray<string>;\n readonly eqCount: number;\n}> {\n override get message(): string {\n return `QueryStreamKeyLayout.fromIndex: invalid equality prefix length (${this.eqCount}) for ${this.fieldPaths.length} field paths`;\n }\n}\n\n/**\n * The requested labels do not form a prefix of the layout's visible labels.\n *\n * @experimental\n */\nexport class InvalidLabelPrefixError extends Data.TaggedError(\n \"InvalidLabelPrefixError\",\n)<{\n readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n readonly prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n}> {\n override get message(): string {\n return `Labels ([${Array.join(this.prefixKeyLabels, \", \")}]) must be a prefix of the ordering labels ([${Array.join(this.keyLabels, \", \")}])`;\n }\n}\n\n/**\n * The replacement labels cannot fill exactly the layout's visible positions.\n *\n * @experimental\n */\nexport class LabelCountMismatchError extends Data.TaggedError(\n \"LabelCountMismatchError\",\n)<{\n readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n readonly replacementKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n}> {\n override get message(): string {\n return `Replacement labels ([${Array.join(this.replacementKeyLabels, \", \")}]) must have as many labels as the ordering labels ([${Array.join(this.keyLabels, \", \")}])`;\n }\n}\n\n/**\n * Construct a scan layout from the original index field paths, before equality\n * pinning. Only an ID absent from the end of that original key is implicit.\n * Pinning every field of `by_id` produces a zero-width layout; pinning every\n * visible field of another index leaves its implicit ID. Invalid equality\n * prefix lengths return `InvalidEqualityPrefixError`.\n *\n * @experimental\n */\nexport function fromIndex<const FieldPaths extends ReadonlyArray<string>>(\n fieldPaths: FieldPaths,\n): Result.Result<\n QueryStreamKeyLayout<QueryStreamKeyLabels.QueryStreamKeyLabels<FieldPaths>>,\n InvalidEqualityPrefixError\n>;\n/**\n * @experimental\n */\nexport function fromIndex<\n const FieldPaths extends ReadonlyArray<string>,\n const Count extends number,\n>(\n fieldPaths: FieldPaths,\n eqCount: Count,\n): Result.Result<\n QueryStreamKeyLayout<\n QueryStreamKeyLabels.QueryStreamKeyLabels<\n RemainingFieldPaths<FieldPaths, Count>\n >\n >,\n InvalidEqualityPrefixError\n>;\nexport function fromIndex(\n fieldPaths: ReadonlyArray<string>,\n eqCount = 0,\n): Result.Result<QueryStreamKeyLayout, InvalidEqualityPrefixError> {\n if (\n !Number.isInteger(eqCount) ||\n eqCount < 0 ||\n eqCount > fieldPaths.length\n ) {\n return Result.fail(new InvalidEqualityPrefixError({ fieldPaths, eqCount }));\n }\n const visible = Array.map(Array.drop(fieldPaths, eqCount), (label) =>\n Position.Visible({ label }),\n );\n const keyPositions = Option.exists(\n Array.last(fieldPaths),\n (fieldPath) => fieldPath === \"_id\",\n )\n ? visible\n : Array.append(visible, Position.ImplicitId());\n return Result.succeed(make(keyPositions));\n}\n\n/**\n * Concatenate layouts without losing component tiebreakers.\n *\n * @experimental\n */\nexport const concat = <\n LeftKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n RightKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n>(\n self: QueryStreamKeyLayout<LeftKeyLabels>,\n that: QueryStreamKeyLayout<RightKeyLabels>,\n): QueryStreamKeyLayout<\n QueryStreamKeyLabels.Concat<LeftKeyLabels, RightKeyLabels>\n> => make(Array.appendAll(positions(self), positions(that)));\n\n/**\n * Format visible labels and implicit IDs for diagnostics.\n *\n * @experimental\n */\nexport const format = (self: QueryStreamKeyLayout): string => {\n const tokens = Array.map(\n positions(self),\n Position.$match({\n Visible: ({ label }) => JSON.stringify(label),\n ImplicitId: () => \"<implicit _id>\",\n }),\n );\n return `[${Array.join(tokens, \", \")}]`;\n};\n\n/**\n * The labels available to `distinct` and `renameKey`.\n *\n * @experimental\n */\nexport function visibleLabels<\n KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n>(self: QueryStreamKeyLayout<KeyLabels>): KeyLabels;\nexport function visibleLabels(\n self: QueryStreamKeyLayout,\n): QueryStreamKeyLabels.QueryStreamKeyLabels {\n return QueryStreamKeyLabels.make(\n Array.filterMap(\n positions(self),\n Position.$match({\n Visible: ({ label }) => Result.succeed(label),\n ImplicitId: () => Result.failVoid,\n }),\n ),\n );\n}\n\n/**\n * Number of positions in an element's runtime key.\n *\n * @experimental\n */\nexport const runtimeWidth = (self: QueryStreamKeyLayout): number =>\n positions(self).length;\n\n// Runtime offsets of visible labels, used to resolve label prefixes.\nconst visiblePositions = (self: QueryStreamKeyLayout): ReadonlyArray<number> =>\n Array.filterMap(positions(self), (position, index) =>\n Position.$is(\"Visible\")(position) ? Result.succeed(index) : Result.failVoid,\n );\n\nconst PositionsEquivalence = Equivalence_.Array<Position>((self, that) =>\n Position.$match(self, {\n Visible: ({ label }) =>\n Position.$is(\"Visible\")(that) && label === that.label,\n ImplicitId: () => Position.$is(\"ImplicitId\")(that),\n }),\n);\n\n/**\n * @experimental\n */\nexport const Equivalence: Equivalence_.Equivalence<QueryStreamKeyLayout> =\n Equivalence_.mapInput(PositionsEquivalence, positions);\n\n/**\n * @experimental\n */\nexport class KeyLayoutMismatchError extends Data.TaggedError(\n \"KeyLayoutMismatchError\",\n)<{\n readonly expectedKeyLayout: QueryStreamKeyLayout;\n readonly actualKeyLayout: QueryStreamKeyLayout;\n}> {\n override get message(): string {\n return `Key layout (${format(this.actualKeyLayout)}) does not match the expected layout (${format(this.expectedKeyLayout)})`;\n }\n}\n\n/**\n * @experimental\n */\nexport const validateEquivalence = (\n expectedKeyLayout: QueryStreamKeyLayout,\n actualKeyLayout: QueryStreamKeyLayout,\n): Result.Result<void, KeyLayoutMismatchError> =>\n Equivalence(expectedKeyLayout, actualKeyLayout)\n ? Result.succeed(undefined)\n : Result.fail(\n new KeyLayoutMismatchError({ expectedKeyLayout, actualKeyLayout }),\n );\n\n/**\n * Parse a visible label prefix and resolve its runtime width. Implicit IDs\n * before the last selected label are included; implicit IDs after it are not.\n *\n * @experimental\n */\nexport const resolvePrefix = (\n self: QueryStreamKeyLayout,\n prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels,\n): Result.Result<number, InvalidLabelPrefixError> => {\n const keyLabels = visibleLabels(self);\n if (!QueryStreamKeyLabels.hasPrefix(keyLabels, prefixKeyLabels)) {\n return Result.fail(\n new InvalidLabelPrefixError({ keyLabels, prefixKeyLabels }),\n );\n }\n return Result.succeed(\n Option.match(\n Array.get(visiblePositions(self), prefixKeyLabels.length - 1),\n {\n onNone: () => 0,\n onSome: (position) => position + 1,\n },\n ),\n );\n};\n\n/**\n * Relabel visible positions, preserving every implicit ID.\n *\n * @experimental\n */\nexport const rename = <\n ReplacementKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n>(\n self: QueryStreamKeyLayout,\n replacementKeyLabels: ReplacementKeyLabels,\n): Result.Result<\n QueryStreamKeyLayout<ReplacementKeyLabels>,\n LabelCountMismatchError\n> => {\n const [consumed, renamed] = Array.mapAccum(\n positions(self),\n 0,\n (index, position): readonly [number, Option.Option<Position>] =>\n Position.$match(position, {\n ImplicitId: () => [index, Option.some(position)] as const,\n Visible: () =>\n [\n index + 1,\n Option.map(Array.get(replacementKeyLabels, index), (label) =>\n Position.Visible({ label }),\n ),\n ] as const,\n }),\n );\n const parsed =\n consumed === replacementKeyLabels.length\n ? Option.all(renamed)\n : Option.none();\n return Result.fromOption(\n Option.map(parsed, make<ReplacementKeyLabels>),\n () =>\n new LabelCountMismatchError({\n keyLabels: visibleLabels(self),\n replacementKeyLabels,\n }),\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Value } from "convex/values";
|
|
2
|
+
import * as Order_ from "effect/Order";
|
|
3
|
+
import type * as Record from "effect/Record";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import type * as QueryStreamOrderDirection from "./QueryStreamOrderDirection";
|
|
6
|
+
declare const KeyValue: Schema.decodeTo<Schema.declare<Value | undefined, Value | undefined>, Schema.Codec<Schema.Json, Schema.Json, never, never>, never, never>;
|
|
7
|
+
/**
|
|
8
|
+
* @experimental
|
|
9
|
+
*/
|
|
10
|
+
export type KeyValue = typeof KeyValue.Type;
|
|
11
|
+
/**
|
|
12
|
+
* @experimental
|
|
13
|
+
*/
|
|
14
|
+
export declare const QueryStreamKeyValues: Schema.$Array<Schema.decodeTo<Schema.declare<Value | undefined, Value | undefined>, Schema.Codec<Schema.Json, Schema.Json, never, never>, never, never>>;
|
|
15
|
+
/**
|
|
16
|
+
* @experimental
|
|
17
|
+
*/
|
|
18
|
+
export type QueryStreamKeyValues = typeof QueryStreamKeyValues.Type;
|
|
19
|
+
/**
|
|
20
|
+
* `Order` over Convex values, matching Convex's index ordering—a wrapper around
|
|
21
|
+
* the canonical `compareValues` from `convex/values` (type rank first, then
|
|
22
|
+
* within the type, including UTF-8 string order and NaN bit-level ordering).
|
|
23
|
+
*
|
|
24
|
+
* @experimental
|
|
25
|
+
*/
|
|
26
|
+
export declare const ValueOrder: Order_.Order<KeyValue>;
|
|
27
|
+
/**
|
|
28
|
+
* Compare key values in the requested direction. Ascending order is
|
|
29
|
+
* lexicographic by `ValueOrder`, then by length, matching Convex array values;
|
|
30
|
+
* descending order reverses it.
|
|
31
|
+
*
|
|
32
|
+
* @experimental
|
|
33
|
+
*/
|
|
34
|
+
export declare const Order: (orderDirection: QueryStreamOrderDirection.QueryStreamOrderDirection) => Order_.Order<QueryStreamKeyValues>;
|
|
35
|
+
/**
|
|
36
|
+
* @experimental
|
|
37
|
+
*/
|
|
38
|
+
export declare const extract: (encoded: Record.ReadonlyRecord<string, unknown>, keyPaths: ReadonlyArray<ReadonlyArray<string>>) => QueryStreamKeyValues;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=QueryStreamKeyValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyValues.d.ts","sourceRoot":"","sources":["../src/QueryStreamKeyValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,KAAK,yBAAyB,MAAM,6BAA6B,CAAC;AAG9E,QAAA,MAAM,QAAQ,2IAmCb,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,oBAAoB,0JAAyB,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAEpE;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAE7C,CAAC;AAKF;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,mBACA,yBAAyB,CAAC,yBAAyB,KAClE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CACyB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,OAAO,YACT,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,YACrC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAC7C,oBAUwB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import { compareValues, convexToJson, jsonToConvex } from "convex/values";
|
|
5
|
+
import * as Array from "effect/Array";
|
|
6
|
+
import * as Order_ from "effect/Order";
|
|
7
|
+
import * as Result from "effect/Result";
|
|
8
|
+
import * as SchemaIssue from "effect/SchemaIssue";
|
|
9
|
+
import * as SchemaGetter from "effect/SchemaGetter";
|
|
10
|
+
//#region src/QueryStreamKeyValues.ts
|
|
11
|
+
var QueryStreamKeyValues_exports = /* @__PURE__ */ __exportAll({
|
|
12
|
+
Order: () => Order,
|
|
13
|
+
QueryStreamKeyValues: () => QueryStreamKeyValues,
|
|
14
|
+
ValueOrder: () => ValueOrder,
|
|
15
|
+
extract: () => extract
|
|
16
|
+
});
|
|
17
|
+
const UNDEFINED_SENTINEL = { $undefined: true };
|
|
18
|
+
const KeyValue = Schema.Json.pipe(Schema.decodeTo(Schema.declare((value) => value === void 0 || Result.isSuccess(Result.try(() => convexToJson(value)))), {
|
|
19
|
+
decode: SchemaGetter.transformEffect((value, options) => Effect.try({
|
|
20
|
+
try: () => Result.match(Schema.decodeUnknownResult(Schema.Struct({ $undefined: Schema.Literal(true) }), { onExcessProperty: "error" })(value), {
|
|
21
|
+
onSuccess: () => void 0,
|
|
22
|
+
onFailure: () => jsonToConvex(value)
|
|
23
|
+
}),
|
|
24
|
+
catch: () => new SchemaIssue.InvalidValue({ message: "Invalid Convex key value" }, value, options)
|
|
25
|
+
})),
|
|
26
|
+
encode: SchemaGetter.transform((value) => value === void 0 ? UNDEFINED_SENTINEL : convexToJson(value))
|
|
27
|
+
}));
|
|
28
|
+
/**
|
|
29
|
+
* @experimental
|
|
30
|
+
*/
|
|
31
|
+
const QueryStreamKeyValues = Schema.Array(KeyValue);
|
|
32
|
+
/**
|
|
33
|
+
* `Order` over Convex values, matching Convex's index ordering—a wrapper around
|
|
34
|
+
* the canonical `compareValues` from `convex/values` (type rank first, then
|
|
35
|
+
* within the type, including UTF-8 string order and NaN bit-level ordering).
|
|
36
|
+
*
|
|
37
|
+
* @experimental
|
|
38
|
+
*/
|
|
39
|
+
const ValueOrder = Order_.make((self, that) => Math.sign(compareValues(self, that)));
|
|
40
|
+
const AscendingOrder = Order_.Array(ValueOrder);
|
|
41
|
+
const DescendingOrder = Order_.flip(AscendingOrder);
|
|
42
|
+
/**
|
|
43
|
+
* Compare key values in the requested direction. Ascending order is
|
|
44
|
+
* lexicographic by `ValueOrder`, then by length, matching Convex array values;
|
|
45
|
+
* descending order reverses it.
|
|
46
|
+
*
|
|
47
|
+
* @experimental
|
|
48
|
+
*/
|
|
49
|
+
const Order = (orderDirection) => orderDirection === "asc" ? AscendingOrder : DescendingOrder;
|
|
50
|
+
/**
|
|
51
|
+
* @experimental
|
|
52
|
+
*/
|
|
53
|
+
const extract = (encoded, keyPaths) => Array.map(keyPaths, (path) => Array.reduce(path, encoded, (value, segment) => value?.[segment]));
|
|
54
|
+
//#endregion
|
|
55
|
+
export { Order, QueryStreamKeyValues, QueryStreamKeyValues_exports, ValueOrder, extract };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=QueryStreamKeyValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyValues.js","names":[],"sources":["../src/QueryStreamKeyValues.ts"],"sourcesContent":["import {\n convexToJson,\n jsonToConvex,\n compareValues,\n type Value,\n} from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport * as Order_ from \"effect/Order\";\nimport type * as Record from \"effect/Record\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaGetter from \"effect/SchemaGetter\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport type * as QueryStreamOrderDirection from \"./QueryStreamOrderDirection\";\n\nconst UNDEFINED_SENTINEL = { $undefined: true } as const;\nconst KeyValue = Schema.Json.pipe(\n Schema.decodeTo(\n Schema.declare<Value | undefined>(\n (value): value is Value | undefined =>\n value === undefined ||\n Result.isSuccess(Result.try(() => convexToJson(value as Value))),\n ),\n {\n decode: SchemaGetter.transformEffect((value, options) =>\n Effect.try({\n try: () =>\n Result.match(\n Schema.decodeUnknownResult(\n Schema.Struct({ $undefined: Schema.Literal(true) }),\n { onExcessProperty: \"error\" },\n )(value),\n {\n onSuccess: () => undefined,\n onFailure: () =>\n jsonToConvex(value as Parameters<typeof jsonToConvex>[0]),\n },\n ),\n catch: () =>\n new SchemaIssue.InvalidValue(\n { message: \"Invalid Convex key value\" },\n value,\n options,\n ),\n }),\n ),\n encode: SchemaGetter.transform((value) =>\n value === undefined ? UNDEFINED_SENTINEL : convexToJson(value),\n ),\n },\n ),\n);\n\n/**\n * @experimental\n */\nexport type KeyValue = typeof KeyValue.Type;\n\n/**\n * @experimental\n */\nexport const QueryStreamKeyValues = Schema.Array(KeyValue);\n\n/**\n * @experimental\n */\nexport type QueryStreamKeyValues = typeof QueryStreamKeyValues.Type;\n\n/**\n * `Order` over Convex values, matching Convex's index ordering—a wrapper around\n * the canonical `compareValues` from `convex/values` (type rank first, then\n * within the type, including UTF-8 string order and NaN bit-level ordering).\n *\n * @experimental\n */\nexport const ValueOrder: Order_.Order<KeyValue> = Order_.make(\n (self, that) => Math.sign(compareValues(self, that)) as -1 | 0 | 1,\n);\n\nconst AscendingOrder = Order_.Array(ValueOrder);\nconst DescendingOrder = Order_.flip(AscendingOrder);\n\n/**\n * Compare key values in the requested direction. Ascending order is\n * lexicographic by `ValueOrder`, then by length, matching Convex array values;\n * descending order reverses it.\n *\n * @experimental\n */\nexport const Order = (\n orderDirection: QueryStreamOrderDirection.QueryStreamOrderDirection,\n): Order_.Order<QueryStreamKeyValues> =>\n orderDirection === \"asc\" ? AscendingOrder : DescendingOrder;\n\n/**\n * @experimental\n */\nexport const extract = (\n encoded: Record.ReadonlyRecord<string, unknown>,\n keyPaths: ReadonlyArray<ReadonlyArray<string>>,\n): QueryStreamKeyValues =>\n Array.map(keyPaths, (path) =>\n Array.reduce(\n path,\n encoded as unknown,\n (value, segment) =>\n (value as Record.ReadonlyRecord<string, unknown> | undefined)?.[\n segment\n ],\n ),\n ) as QueryStreamKeyValues;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAM,qBAAqB,EAAE,YAAY,KAAK;AAC9C,MAAM,WAAW,OAAO,KAAK,KAC3B,OAAO,SACL,OAAO,SACJ,UACC,UAAU,KAAA,KACV,OAAO,UAAU,OAAO,UAAU,aAAa,KAAc,CAAC,CAAC,CACnE,GACA;CACE,QAAQ,aAAa,iBAAiB,OAAO,YAC3C,OAAO,IAAI;EACT,WACE,OAAO,MACL,OAAO,oBACL,OAAO,OAAO,EAAE,YAAY,OAAO,QAAQ,IAAI,EAAE,CAAC,GAClD,EAAE,kBAAkB,QAAQ,CAC9B,CAAC,CAAC,KAAK,GACP;GACE,iBAAiB,KAAA;GACjB,iBACE,aAAa,KAA2C;EAC5D,CACF;EACF,aACE,IAAI,YAAY,aACd,EAAE,SAAS,2BAA2B,GACtC,OACA,OACF;CACJ,CAAC,CACH;CACA,QAAQ,aAAa,WAAW,UAC9B,UAAU,KAAA,IAAY,qBAAqB,aAAa,KAAK,CAC/D;AACF,CACF,CACF;;;;AAUA,MAAa,uBAAuB,OAAO,MAAM,QAAQ;;;;;;;;AAczD,MAAa,aAAqC,OAAO,MACtD,MAAM,SAAS,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC,CACrD;AAEA,MAAM,iBAAiB,OAAO,MAAM,UAAU;AAC9C,MAAM,kBAAkB,OAAO,KAAK,cAAc;;;;;;;;AASlD,MAAa,SACX,mBAEA,mBAAmB,QAAQ,iBAAiB;;;;AAK9C,MAAa,WACX,SACA,aAEA,MAAM,IAAI,WAAW,SACnB,MAAM,OACJ,MACA,UACC,OAAO,YACL,QACC,QAEN,CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The direction a stream is ordered in. Tracked covariantly in the type: a
|
|
3
|
+
* stream of a known direction is also a stream of `"asc" | "desc"`, the class
|
|
4
|
+
* default, so annotations that omit the direction accept every stream.
|
|
5
|
+
* Combining streams of different known directions—`merge`, or a `flatMap` whose
|
|
6
|
+
* inner streams run the other way—is a type error; a direction chosen at
|
|
7
|
+
* runtime types as the union, and the runtime check catches what the types
|
|
8
|
+
* can't see (`merge` throws when the streams are combined, `flatMap` fails when
|
|
9
|
+
* the join runs).
|
|
10
|
+
*
|
|
11
|
+
* @experimental
|
|
12
|
+
*/
|
|
13
|
+
export type QueryStreamOrderDirection = "asc" | "desc";
|
|
14
|
+
/**
|
|
15
|
+
* The opposite of a direction; a runtime-chosen direction stays the union.
|
|
16
|
+
*
|
|
17
|
+
* @experimental
|
|
18
|
+
*/
|
|
19
|
+
export type Flip<OrderDirection extends QueryStreamOrderDirection> = OrderDirection extends "asc" ? "desc" : "asc";
|
|
20
|
+
/**
|
|
21
|
+
* @experimental
|
|
22
|
+
*/
|
|
23
|
+
export declare const flip: <OrderDirection extends QueryStreamOrderDirection>(orderDirection: OrderDirection) => Flip<OrderDirection>;
|
|
24
|
+
//# sourceMappingURL=QueryStreamOrderDirection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamOrderDirection.d.ts","sourceRoot":"","sources":["../src/QueryStreamOrderDirection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,IAAI,CAAC,cAAc,SAAS,yBAAyB,IAC/D,cAAc,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,cAAc,SAAS,yBAAyB,kBACnD,cAAc,KAC7B,IAAI,CAAC,cAAc,CAC+C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
//#region src/QueryStreamOrderDirection.ts
|
|
3
|
+
var QueryStreamOrderDirection_exports = /* @__PURE__ */ __exportAll({ flip: () => flip });
|
|
4
|
+
/**
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
const flip = (orderDirection) => orderDirection === "asc" ? "desc" : "asc";
|
|
8
|
+
//#endregion
|
|
9
|
+
export { QueryStreamOrderDirection_exports, flip };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=QueryStreamOrderDirection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamOrderDirection.js","names":[],"sources":["../src/QueryStreamOrderDirection.ts"],"sourcesContent":["/**\n * The direction a stream is ordered in. Tracked covariantly in the type: a\n * stream of a known direction is also a stream of `\"asc\" | \"desc\"`, the class\n * default, so annotations that omit the direction accept every stream.\n * Combining streams of different known directions—`merge`, or a `flatMap` whose\n * inner streams run the other way—is a type error; a direction chosen at\n * runtime types as the union, and the runtime check catches what the types\n * can't see (`merge` throws when the streams are combined, `flatMap` fails when\n * the join runs).\n *\n * @experimental\n */\nexport type QueryStreamOrderDirection = \"asc\" | \"desc\";\n\n/**\n * The opposite of a direction; a runtime-chosen direction stays the union.\n *\n * @experimental\n */\nexport type Flip<OrderDirection extends QueryStreamOrderDirection> =\n OrderDirection extends \"asc\" ? \"desc\" : \"asc\";\n\n/**\n * @experimental\n */\nexport const flip = <OrderDirection extends QueryStreamOrderDirection>(\n orderDirection: OrderDirection,\n): Flip<OrderDirection> =>\n (orderDirection === \"asc\" ? \"desc\" : \"asc\") as Flip<OrderDirection>;\n"],"mappings":";;;;;;AAyBA,MAAa,QACX,mBAEC,mBAAmB,QAAQ,SAAS"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import * as Chunk from "effect/Chunk";
|
|
2
|
+
import * as Data from "effect/Data";
|
|
3
|
+
import * as Option from "effect/Option";
|
|
4
|
+
import * as Result from "effect/Result";
|
|
5
|
+
import * as Schema from "effect/Schema";
|
|
6
|
+
import type * as QueryStreamKey from "./QueryStreamKey";
|
|
7
|
+
declare const PageSize: Schema.brand<Schema.Natural, "~@confect/server/QueryStreamPagination/PageSize">;
|
|
8
|
+
type PageSize = typeof PageSize.Type;
|
|
9
|
+
declare const InvalidPageSizeError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
10
|
+
readonly _tag: "InvalidPageSizeError";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
/**
|
|
13
|
+
* @experimental
|
|
14
|
+
*/
|
|
15
|
+
export declare class InvalidPageSizeError extends InvalidPageSizeError_base<{
|
|
16
|
+
readonly numItems: number;
|
|
17
|
+
}> {
|
|
18
|
+
get message(): string;
|
|
19
|
+
}
|
|
20
|
+
declare const EmptyInitialPageError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
21
|
+
readonly _tag: "EmptyInitialPageError";
|
|
22
|
+
} & Readonly<A>;
|
|
23
|
+
/**
|
|
24
|
+
* @experimental
|
|
25
|
+
*/
|
|
26
|
+
export declare class EmptyInitialPageError extends EmptyInitialPageError_base {
|
|
27
|
+
get message(): string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @experimental
|
|
31
|
+
*/
|
|
32
|
+
export type Range = Data.TaggedEnum<{
|
|
33
|
+
Unpinned: {};
|
|
34
|
+
ThroughKey: {
|
|
35
|
+
readonly key: QueryStreamKey.Complete;
|
|
36
|
+
};
|
|
37
|
+
ThroughEnd: {};
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* @experimental
|
|
41
|
+
*/
|
|
42
|
+
export declare const Range: {
|
|
43
|
+
readonly $is: <Tag extends "ThroughEnd" | "ThroughKey" | "Unpinned">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
44
|
+
readonly _tag: "ThroughEnd";
|
|
45
|
+
}, {
|
|
46
|
+
readonly _tag: Tag;
|
|
47
|
+
}> | Extract<{
|
|
48
|
+
readonly _tag: "ThroughKey";
|
|
49
|
+
readonly key: QueryStreamKey.Complete;
|
|
50
|
+
}, {
|
|
51
|
+
readonly _tag: Tag;
|
|
52
|
+
}> | Extract<{
|
|
53
|
+
readonly _tag: "Unpinned";
|
|
54
|
+
}, {
|
|
55
|
+
readonly _tag: Tag;
|
|
56
|
+
}>;
|
|
57
|
+
readonly $match: {
|
|
58
|
+
<Cases extends { readonly [Tag in "ThroughEnd" | "ThroughKey" | "Unpinned"]: (args: Extract<{
|
|
59
|
+
readonly _tag: "ThroughEnd";
|
|
60
|
+
} | {
|
|
61
|
+
readonly _tag: "ThroughKey";
|
|
62
|
+
readonly key: QueryStreamKey.Complete;
|
|
63
|
+
} | {
|
|
64
|
+
readonly _tag: "Unpinned";
|
|
65
|
+
}, {
|
|
66
|
+
readonly _tag: Tag;
|
|
67
|
+
}>) => any; }>(cases: Cases): (value: {
|
|
68
|
+
readonly _tag: "ThroughEnd";
|
|
69
|
+
} | {
|
|
70
|
+
readonly _tag: "ThroughKey";
|
|
71
|
+
readonly key: QueryStreamKey.Complete;
|
|
72
|
+
} | {
|
|
73
|
+
readonly _tag: "Unpinned";
|
|
74
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["ThroughEnd" | "ThroughKey" | "Unpinned"]>>;
|
|
75
|
+
<Cases extends { readonly [Tag in "ThroughEnd" | "ThroughKey" | "Unpinned"]: (args: Extract<{
|
|
76
|
+
readonly _tag: "ThroughEnd";
|
|
77
|
+
} | {
|
|
78
|
+
readonly _tag: "ThroughKey";
|
|
79
|
+
readonly key: QueryStreamKey.Complete;
|
|
80
|
+
} | {
|
|
81
|
+
readonly _tag: "Unpinned";
|
|
82
|
+
}, {
|
|
83
|
+
readonly _tag: Tag;
|
|
84
|
+
}>) => any; }>(value: {
|
|
85
|
+
readonly _tag: "ThroughEnd";
|
|
86
|
+
} | {
|
|
87
|
+
readonly _tag: "ThroughKey";
|
|
88
|
+
readonly key: QueryStreamKey.Complete;
|
|
89
|
+
} | {
|
|
90
|
+
readonly _tag: "Unpinned";
|
|
91
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["ThroughEnd" | "ThroughKey" | "Unpinned"]>>;
|
|
92
|
+
};
|
|
93
|
+
readonly ThroughEnd: Data.TaggedEnum.ConstructorFrom<{
|
|
94
|
+
readonly _tag: "ThroughEnd";
|
|
95
|
+
}, "_tag">;
|
|
96
|
+
readonly ThroughKey: Data.TaggedEnum.ConstructorFrom<{
|
|
97
|
+
readonly _tag: "ThroughKey";
|
|
98
|
+
readonly key: QueryStreamKey.Complete;
|
|
99
|
+
}, "_tag">;
|
|
100
|
+
readonly Unpinned: Data.TaggedEnum.ConstructorFrom<{
|
|
101
|
+
readonly _tag: "Unpinned";
|
|
102
|
+
}, "_tag">;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* @experimental
|
|
106
|
+
*/
|
|
107
|
+
export type Start = Data.TaggedEnum<{
|
|
108
|
+
Beginning: {};
|
|
109
|
+
After: {
|
|
110
|
+
readonly key: QueryStreamKey.Complete;
|
|
111
|
+
readonly cursor: string;
|
|
112
|
+
};
|
|
113
|
+
}>;
|
|
114
|
+
/**
|
|
115
|
+
* @experimental
|
|
116
|
+
*/
|
|
117
|
+
export declare const Start: {
|
|
118
|
+
readonly $is: <Tag extends "After" | "Beginning">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
119
|
+
readonly _tag: "After";
|
|
120
|
+
readonly key: QueryStreamKey.Complete;
|
|
121
|
+
readonly cursor: string;
|
|
122
|
+
}, {
|
|
123
|
+
readonly _tag: Tag;
|
|
124
|
+
}> | Extract<{
|
|
125
|
+
readonly _tag: "Beginning";
|
|
126
|
+
}, {
|
|
127
|
+
readonly _tag: Tag;
|
|
128
|
+
}>;
|
|
129
|
+
readonly $match: {
|
|
130
|
+
<Cases extends { readonly [Tag in "After" | "Beginning"]: (args: Extract<{
|
|
131
|
+
readonly _tag: "After";
|
|
132
|
+
readonly key: QueryStreamKey.Complete;
|
|
133
|
+
readonly cursor: string;
|
|
134
|
+
} | {
|
|
135
|
+
readonly _tag: "Beginning";
|
|
136
|
+
}, {
|
|
137
|
+
readonly _tag: Tag;
|
|
138
|
+
}>) => any; }>(cases: Cases): (value: {
|
|
139
|
+
readonly _tag: "After";
|
|
140
|
+
readonly key: QueryStreamKey.Complete;
|
|
141
|
+
readonly cursor: string;
|
|
142
|
+
} | {
|
|
143
|
+
readonly _tag: "Beginning";
|
|
144
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["After" | "Beginning"]>>;
|
|
145
|
+
<Cases extends { readonly [Tag in "After" | "Beginning"]: (args: Extract<{
|
|
146
|
+
readonly _tag: "After";
|
|
147
|
+
readonly key: QueryStreamKey.Complete;
|
|
148
|
+
readonly cursor: string;
|
|
149
|
+
} | {
|
|
150
|
+
readonly _tag: "Beginning";
|
|
151
|
+
}, {
|
|
152
|
+
readonly _tag: Tag;
|
|
153
|
+
}>) => any; }>(value: {
|
|
154
|
+
readonly _tag: "After";
|
|
155
|
+
readonly key: QueryStreamKey.Complete;
|
|
156
|
+
readonly cursor: string;
|
|
157
|
+
} | {
|
|
158
|
+
readonly _tag: "Beginning";
|
|
159
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["After" | "Beginning"]>>;
|
|
160
|
+
};
|
|
161
|
+
readonly After: Data.TaggedEnum.ConstructorFrom<{
|
|
162
|
+
readonly _tag: "After";
|
|
163
|
+
readonly key: QueryStreamKey.Complete;
|
|
164
|
+
readonly cursor: string;
|
|
165
|
+
}, "_tag">;
|
|
166
|
+
readonly Beginning: Data.TaggedEnum.ConstructorFrom<{
|
|
167
|
+
readonly _tag: "Beginning";
|
|
168
|
+
}, "_tag">;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* @experimental
|
|
172
|
+
*/
|
|
173
|
+
export interface ScanRequest {
|
|
174
|
+
readonly numItems: PageSize;
|
|
175
|
+
readonly after: Option.Option<QueryStreamKey.Complete>;
|
|
176
|
+
readonly range: Range;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* @experimental
|
|
180
|
+
*/
|
|
181
|
+
export type Request = Data.TaggedEnum<{
|
|
182
|
+
Unchanged: {
|
|
183
|
+
readonly cursor: string;
|
|
184
|
+
};
|
|
185
|
+
Scan: ScanRequest;
|
|
186
|
+
}>;
|
|
187
|
+
/**
|
|
188
|
+
* @experimental
|
|
189
|
+
*/
|
|
190
|
+
export declare const parseRequest: (numItems: number, start: Start, range: Range) => Result.Result<Request, InvalidPageSizeError | EmptyInitialPageError>;
|
|
191
|
+
/**
|
|
192
|
+
* A nonempty scan, including filtered markers.
|
|
193
|
+
*/
|
|
194
|
+
type Progress = Chunk.NonEmptyChunk<QueryStreamKey.Complete>;
|
|
195
|
+
interface Stopped<Doc> {
|
|
196
|
+
readonly page: Chunk.Chunk<Doc>;
|
|
197
|
+
readonly progress: Progress;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* @experimental
|
|
201
|
+
*/
|
|
202
|
+
export type QueryStreamPagination<Doc> = Data.TaggedEnum<{
|
|
203
|
+
Reading: {
|
|
204
|
+
readonly page: Chunk.Chunk<Doc>;
|
|
205
|
+
readonly progress: Option.Option<Progress>;
|
|
206
|
+
};
|
|
207
|
+
ItemLimit: Stopped<Doc>;
|
|
208
|
+
ReadLimit: Stopped<Doc>;
|
|
209
|
+
}>;
|
|
210
|
+
/**
|
|
211
|
+
* @experimental
|
|
212
|
+
*/
|
|
213
|
+
export declare const initial: <Doc>() => QueryStreamPagination<Doc>;
|
|
214
|
+
/**
|
|
215
|
+
* @experimental
|
|
216
|
+
*/
|
|
217
|
+
export declare const record: <Doc>(request: ScanRequest, self: QueryStreamPagination<Doc>, doc: Option.Option<Doc>, key: QueryStreamKey.Complete, readLimit: boolean) => QueryStreamPagination<Doc>;
|
|
218
|
+
/**
|
|
219
|
+
* @experimental
|
|
220
|
+
*/
|
|
221
|
+
export type Continuation = Data.TaggedEnum<{
|
|
222
|
+
End: {};
|
|
223
|
+
Key: {
|
|
224
|
+
readonly key: QueryStreamKey.Complete;
|
|
225
|
+
};
|
|
226
|
+
}>;
|
|
227
|
+
interface Split<Doc> {
|
|
228
|
+
readonly page: ReadonlyArray<Doc>;
|
|
229
|
+
readonly continuation: Continuation;
|
|
230
|
+
readonly splitKey: QueryStreamKey.Complete;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* @experimental
|
|
234
|
+
*/
|
|
235
|
+
export type Outcome<Doc> = Data.TaggedEnum<{
|
|
236
|
+
Done: {
|
|
237
|
+
readonly page: ReadonlyArray<Doc>;
|
|
238
|
+
};
|
|
239
|
+
Continue: {
|
|
240
|
+
readonly page: ReadonlyArray<Doc>;
|
|
241
|
+
readonly key: QueryStreamKey.Complete;
|
|
242
|
+
};
|
|
243
|
+
SplitRequired: Split<Doc>;
|
|
244
|
+
SplitRecommended: Split<Doc>;
|
|
245
|
+
}>;
|
|
246
|
+
declare const UnsafePageBoundaryError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
247
|
+
readonly _tag: "UnsafePageBoundaryError";
|
|
248
|
+
} & Readonly<A>;
|
|
249
|
+
/**
|
|
250
|
+
* @experimental
|
|
251
|
+
*/
|
|
252
|
+
export declare class UnsafePageBoundaryError extends UnsafePageBoundaryError_base<{
|
|
253
|
+
readonly reason: "NoProgress" | "NoInteriorSplit";
|
|
254
|
+
}> {
|
|
255
|
+
get message(): string;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Decide the page result without reading a stream or serializing a cursor.
|
|
259
|
+
*
|
|
260
|
+
* @experimental
|
|
261
|
+
*/
|
|
262
|
+
export declare const finish: <Doc>(request: ScanRequest, self: QueryStreamPagination<Doc>, upstreamStopped: boolean) => Result.Result<Outcome<Doc>, UnsafePageBoundaryError>;
|
|
263
|
+
export {};
|
|
264
|
+
//# sourceMappingURL=QueryStreamPagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamPagination.d.ts","sourceRoot":"","sources":["../src/QueryStreamPagination.ts"],"names":[],"mappings":"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"}
|