@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,136 @@
|
|
|
1
|
+
import * as Option from "effect/Option";
|
|
2
|
+
import * as Result from "effect/Result";
|
|
3
|
+
import * as QueryStreamKey from "./QueryStreamKey";
|
|
4
|
+
import * as QueryStreamKeyLayout from "./QueryStreamKeyLayout";
|
|
5
|
+
import * as QueryStreamKeyValues from "./QueryStreamKeyValues";
|
|
6
|
+
/**
|
|
7
|
+
* One side of a range: a (possibly prefix) key and whether it's included.
|
|
8
|
+
*
|
|
9
|
+
* @experimental
|
|
10
|
+
*/
|
|
11
|
+
export interface KeyBound {
|
|
12
|
+
readonly keyValues: QueryStreamKeyValues.QueryStreamKeyValues;
|
|
13
|
+
readonly inclusive: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Bounds over a stream's key, in _ascending key space_ (`narrow` converts from
|
|
17
|
+
* stream space, where `desc` reverses which end is which).
|
|
18
|
+
*
|
|
19
|
+
* @experimental
|
|
20
|
+
*/
|
|
21
|
+
export interface KeyBounds {
|
|
22
|
+
readonly lower: Option.Option<KeyBound>;
|
|
23
|
+
readonly upper: Option.Option<KeyBound>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Bounds in _full index-key space_: `eq`-pinned values appear as a shared
|
|
27
|
+
* prefix of both keys (`fromBounds` re-derives them as `eq` constraints). An
|
|
28
|
+
* empty key bounds nothing.
|
|
29
|
+
*
|
|
30
|
+
* @experimental
|
|
31
|
+
*/
|
|
32
|
+
export interface IndexBounds {
|
|
33
|
+
readonly lower: KeyBound;
|
|
34
|
+
readonly upper: KeyBound;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The stricter (later) of two lower bounds.
|
|
38
|
+
*
|
|
39
|
+
* @experimental
|
|
40
|
+
*/
|
|
41
|
+
export declare const tightestLower: (self: KeyBound, that: KeyBound) => KeyBound;
|
|
42
|
+
/**
|
|
43
|
+
* The stricter (earlier) of two upper bounds.
|
|
44
|
+
*
|
|
45
|
+
* @experimental
|
|
46
|
+
*/
|
|
47
|
+
export declare const tightestUpper: (self: KeyBound, that: KeyBound) => KeyBound;
|
|
48
|
+
/**
|
|
49
|
+
* @experimental
|
|
50
|
+
*/
|
|
51
|
+
export declare const intersect: (self: ParsedBounds, that: ParsedBounds) => Result.Result<ParsedBounds, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
52
|
+
/**
|
|
53
|
+
* @experimental
|
|
54
|
+
*/
|
|
55
|
+
export declare const isEmpty: (indexBounds: IndexBounds) => boolean;
|
|
56
|
+
/**
|
|
57
|
+
* @experimental
|
|
58
|
+
*/
|
|
59
|
+
export declare const intersectIndexBounds: (self: IndexBounds, that: IndexBounds) => IndexBounds;
|
|
60
|
+
/**
|
|
61
|
+
* Whether a compatible key sits after the lower bound (always, when unbounded).
|
|
62
|
+
*
|
|
63
|
+
* @experimental
|
|
64
|
+
*/
|
|
65
|
+
export declare const admittedByLower: (parsedBounds: ParsedBounds) => (key: QueryStreamKey.Complete) => Result.Result<boolean, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
66
|
+
/**
|
|
67
|
+
* Whether a compatible key sits before the upper bound (always, when
|
|
68
|
+
* unbounded).
|
|
69
|
+
*
|
|
70
|
+
* @experimental
|
|
71
|
+
*/
|
|
72
|
+
export declare const admittedByUpper: (parsedBounds: ParsedBounds) => (key: QueryStreamKey.Complete) => Result.Result<boolean, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
73
|
+
/**
|
|
74
|
+
* At least one endpoint in stream order. Omit the other to leave that side
|
|
75
|
+
* unbounded.
|
|
76
|
+
*
|
|
77
|
+
* @experimental
|
|
78
|
+
*/
|
|
79
|
+
export type NarrowBounds = {
|
|
80
|
+
readonly start: KeyBound;
|
|
81
|
+
readonly end?: KeyBound | undefined;
|
|
82
|
+
} | {
|
|
83
|
+
readonly start?: KeyBound | undefined;
|
|
84
|
+
readonly end: KeyBound;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* @experimental
|
|
88
|
+
*/
|
|
89
|
+
export interface ParsedBound {
|
|
90
|
+
readonly key: QueryStreamKey.Prefix;
|
|
91
|
+
readonly inclusive: boolean;
|
|
92
|
+
}
|
|
93
|
+
declare const TypeId = "~@confect/server/QueryStreamKeyBounds";
|
|
94
|
+
/**
|
|
95
|
+
* @experimental
|
|
96
|
+
*/
|
|
97
|
+
export interface ParsedBounds {
|
|
98
|
+
readonly [TypeId]: typeof TypeId;
|
|
99
|
+
readonly keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout;
|
|
100
|
+
readonly lower: Option.Option<ParsedBound>;
|
|
101
|
+
readonly upper: Option.Option<ParsedBound>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @experimental
|
|
105
|
+
*/
|
|
106
|
+
export declare const unbounded: (keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout) => ParsedBounds;
|
|
107
|
+
/**
|
|
108
|
+
* @experimental
|
|
109
|
+
*/
|
|
110
|
+
export declare const forLayout: (keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout, parsedBounds: ParsedBounds) => Result.Result<ParsedBounds, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
111
|
+
/**
|
|
112
|
+
* @experimental
|
|
113
|
+
*/
|
|
114
|
+
export declare const fromParsed: (keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout, endpoints: Pick<ParsedBounds, "lower" | "upper">) => Result.Result<ParsedBounds, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
115
|
+
/**
|
|
116
|
+
* @experimental
|
|
117
|
+
*/
|
|
118
|
+
export declare const tightestParsedLower: (self: ParsedBound, that: ParsedBound) => Result.Result<ParsedBound, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
119
|
+
/**
|
|
120
|
+
* @experimental
|
|
121
|
+
*/
|
|
122
|
+
export declare const tightestParsedUpper: (self: ParsedBound, that: ParsedBound) => Result.Result<ParsedBound, QueryStreamKeyLayout.KeyLayoutMismatchError>;
|
|
123
|
+
/**
|
|
124
|
+
* @experimental
|
|
125
|
+
*/
|
|
126
|
+
export declare const parseBound: (keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout, { keyValues, inclusive }: KeyBound) => Result.Result<ParsedBound, QueryStreamKey.KeyWidthMismatchError>;
|
|
127
|
+
/**
|
|
128
|
+
* @experimental
|
|
129
|
+
*/
|
|
130
|
+
export declare const parse: (keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout, keyBounds: KeyBounds) => Result.Result<ParsedBounds, QueryStreamKey.KeyWidthMismatchError>;
|
|
131
|
+
/**
|
|
132
|
+
* @experimental
|
|
133
|
+
*/
|
|
134
|
+
export declare const toBounds: (parsedBounds: ParsedBounds) => KeyBounds;
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=QueryStreamKeyBounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyBounds.d.ts","sourceRoot":"","sources":["../src/QueryStreamKeyBounds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { validateEquivalence } from "./QueryStreamKeyLayout.js";
|
|
3
|
+
import { prefix, values } from "./QueryStreamKey.js";
|
|
4
|
+
import { Order as Order$1 } from "./QueryStreamKeyValues.js";
|
|
5
|
+
import * as Option from "effect/Option";
|
|
6
|
+
import * as Array from "effect/Array";
|
|
7
|
+
import * as Order from "effect/Order";
|
|
8
|
+
import * as Result from "effect/Result";
|
|
9
|
+
import * as Data from "effect/Data";
|
|
10
|
+
//#region src/QueryStreamKeyBounds.ts
|
|
11
|
+
var QueryStreamKeyBounds_exports = /* @__PURE__ */ __exportAll({
|
|
12
|
+
admittedByLower: () => admittedByLower,
|
|
13
|
+
admittedByUpper: () => admittedByUpper,
|
|
14
|
+
forLayout: () => forLayout,
|
|
15
|
+
fromParsed: () => fromParsed,
|
|
16
|
+
intersect: () => intersect,
|
|
17
|
+
intersectIndexBounds: () => intersectIndexBounds,
|
|
18
|
+
isEmpty: () => isEmpty,
|
|
19
|
+
parse: () => parse,
|
|
20
|
+
parseBound: () => parseBound,
|
|
21
|
+
tightestLower: () => tightestLower,
|
|
22
|
+
tightestParsedLower: () => tightestParsedLower,
|
|
23
|
+
tightestParsedUpper: () => tightestParsedUpper,
|
|
24
|
+
tightestUpper: () => tightestUpper,
|
|
25
|
+
toBounds: () => toBounds,
|
|
26
|
+
unbounded: () => unbounded
|
|
27
|
+
});
|
|
28
|
+
const KeyCut = Data.taggedEnum();
|
|
29
|
+
const cutRank = KeyCut.$match({
|
|
30
|
+
Predecessor: () => 0,
|
|
31
|
+
Exact: () => 1,
|
|
32
|
+
Successor: () => 2
|
|
33
|
+
});
|
|
34
|
+
const cutKeyValues = KeyCut.$match({
|
|
35
|
+
Predecessor: ({ keyValues }) => keyValues,
|
|
36
|
+
Exact: ({ key }) => values(key),
|
|
37
|
+
Successor: ({ keyValues }) => keyValues
|
|
38
|
+
});
|
|
39
|
+
const KeyCutOrder = Order.make((self, that) => {
|
|
40
|
+
const selfKeyValues = cutKeyValues(self);
|
|
41
|
+
const thatKeyValues = cutKeyValues(that);
|
|
42
|
+
const minLength = Math.min(selfKeyValues.length, thatKeyValues.length);
|
|
43
|
+
const prefixOrdering = Order$1("asc")(Array.take(selfKeyValues, minLength), Array.take(thatKeyValues, minLength));
|
|
44
|
+
if (prefixOrdering !== 0) return prefixOrdering;
|
|
45
|
+
if (selfKeyValues.length === thatKeyValues.length) return Order.Number(cutRank(self), cutRank(that));
|
|
46
|
+
const selfIsShorter = selfKeyValues.length < thatKeyValues.length;
|
|
47
|
+
const shorter = selfIsShorter ? self : that;
|
|
48
|
+
const shorterOrdering = KeyCut.$match(shorter, {
|
|
49
|
+
Predecessor: () => -1,
|
|
50
|
+
Exact: () => 1,
|
|
51
|
+
Successor: () => 1
|
|
52
|
+
});
|
|
53
|
+
return selfIsShorter ? shorterOrdering : -shorterOrdering;
|
|
54
|
+
});
|
|
55
|
+
const lowerCut = (bound) => bound.inclusive ? KeyCut.Predecessor({ keyValues: bound.keyValues }) : KeyCut.Successor({ keyValues: bound.keyValues });
|
|
56
|
+
const upperCut = (bound) => bound.inclusive ? KeyCut.Successor({ keyValues: bound.keyValues }) : KeyCut.Predecessor({ keyValues: bound.keyValues });
|
|
57
|
+
/**
|
|
58
|
+
* The stricter (later) of two lower bounds.
|
|
59
|
+
*
|
|
60
|
+
* @experimental
|
|
61
|
+
*/
|
|
62
|
+
const tightestLower = (self, that) => Order.isGreaterThan(KeyCutOrder)(lowerCut(that), lowerCut(self)) ? that : self;
|
|
63
|
+
/**
|
|
64
|
+
* The stricter (earlier) of two upper bounds.
|
|
65
|
+
*
|
|
66
|
+
* @experimental
|
|
67
|
+
*/
|
|
68
|
+
const tightestUpper = (self, that) => Order.isLessThan(KeyCutOrder)(upperCut(that), upperCut(self)) ? that : self;
|
|
69
|
+
const combineKeyBound = (self, that, combine) => Option.match(self, {
|
|
70
|
+
onNone: () => that,
|
|
71
|
+
onSome: (first) => Option.some(Option.match(that, {
|
|
72
|
+
onNone: () => first,
|
|
73
|
+
onSome: (second) => combine(first, second)
|
|
74
|
+
}))
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* @experimental
|
|
78
|
+
*/
|
|
79
|
+
const intersect = (self, that) => Result.map(forLayout(self.keyLayout, that), () => make(self.keyLayout, {
|
|
80
|
+
lower: combineKeyBound(self.lower, that.lower, tighterLower),
|
|
81
|
+
upper: combineKeyBound(self.upper, that.upper, tighterUpper)
|
|
82
|
+
}));
|
|
83
|
+
/**
|
|
84
|
+
* @experimental
|
|
85
|
+
*/
|
|
86
|
+
const isEmpty = (indexBounds) => KeyCutOrder(lowerCut(indexBounds.lower), upperCut(indexBounds.upper)) >= 0;
|
|
87
|
+
/**
|
|
88
|
+
* @experimental
|
|
89
|
+
*/
|
|
90
|
+
const intersectIndexBounds = (self, that) => ({
|
|
91
|
+
lower: tightestLower(self.lower, that.lower),
|
|
92
|
+
upper: tightestUpper(self.upper, that.upper)
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Whether a compatible key sits after the lower bound (always, when unbounded).
|
|
96
|
+
*
|
|
97
|
+
* @experimental
|
|
98
|
+
*/
|
|
99
|
+
const admittedByLower = (parsedBounds) => (key) => Result.gen(function* () {
|
|
100
|
+
yield* validateEquivalence(parsedBounds.keyLayout, key.layout);
|
|
101
|
+
return Option.match(parsedBounds.lower, {
|
|
102
|
+
onNone: () => true,
|
|
103
|
+
onSome: (bound) => KeyCutOrder(KeyCut.Exact({ key }), lowerCut(rawBound(bound))) > 0
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* Whether a compatible key sits before the upper bound (always, when
|
|
108
|
+
* unbounded).
|
|
109
|
+
*
|
|
110
|
+
* @experimental
|
|
111
|
+
*/
|
|
112
|
+
const admittedByUpper = (parsedBounds) => (key) => Result.gen(function* () {
|
|
113
|
+
yield* validateEquivalence(parsedBounds.keyLayout, key.layout);
|
|
114
|
+
return Option.match(parsedBounds.upper, {
|
|
115
|
+
onNone: () => true,
|
|
116
|
+
onSome: (bound) => KeyCutOrder(KeyCut.Exact({ key }), upperCut(rawBound(bound))) < 0
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
const TypeId = "~@confect/server/QueryStreamKeyBounds";
|
|
120
|
+
const make = (keyLayout, endpoints) => ({
|
|
121
|
+
[TypeId]: TypeId,
|
|
122
|
+
keyLayout,
|
|
123
|
+
lower: endpoints.lower,
|
|
124
|
+
upper: endpoints.upper
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* @experimental
|
|
128
|
+
*/
|
|
129
|
+
const unbounded = (keyLayout) => make(keyLayout, {
|
|
130
|
+
lower: Option.none(),
|
|
131
|
+
upper: Option.none()
|
|
132
|
+
});
|
|
133
|
+
/**
|
|
134
|
+
* @experimental
|
|
135
|
+
*/
|
|
136
|
+
const forLayout = (keyLayout, parsedBounds) => Result.gen(function* () {
|
|
137
|
+
yield* validateEquivalence(keyLayout, parsedBounds.keyLayout);
|
|
138
|
+
return parsedBounds;
|
|
139
|
+
});
|
|
140
|
+
/**
|
|
141
|
+
* @experimental
|
|
142
|
+
*/
|
|
143
|
+
const fromParsed = (keyLayout, endpoints) => {
|
|
144
|
+
const validateEndpoint = (endpoint) => Option.match(endpoint, {
|
|
145
|
+
onNone: () => Result.succeed(void 0),
|
|
146
|
+
onSome: ({ key }) => validateEquivalence(keyLayout, key.layout)
|
|
147
|
+
});
|
|
148
|
+
return Result.gen(function* () {
|
|
149
|
+
yield* validateEndpoint(endpoints.lower);
|
|
150
|
+
yield* validateEndpoint(endpoints.upper);
|
|
151
|
+
return make(keyLayout, endpoints);
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
const rawBound = (bound) => ({
|
|
155
|
+
keyValues: values(bound.key),
|
|
156
|
+
inclusive: bound.inclusive
|
|
157
|
+
});
|
|
158
|
+
const tighterLower = (self, that) => KeyCutOrder(lowerCut(rawBound(that)), lowerCut(rawBound(self))) > 0 ? that : self;
|
|
159
|
+
const tighterUpper = (self, that) => KeyCutOrder(upperCut(rawBound(that)), upperCut(rawBound(self))) < 0 ? that : self;
|
|
160
|
+
/**
|
|
161
|
+
* @experimental
|
|
162
|
+
*/
|
|
163
|
+
const tightestParsedLower = (self, that) => Result.gen(function* () {
|
|
164
|
+
yield* validateEquivalence(self.key.layout, that.key.layout);
|
|
165
|
+
return tighterLower(self, that);
|
|
166
|
+
});
|
|
167
|
+
/**
|
|
168
|
+
* @experimental
|
|
169
|
+
*/
|
|
170
|
+
const tightestParsedUpper = (self, that) => Result.gen(function* () {
|
|
171
|
+
yield* validateEquivalence(self.key.layout, that.key.layout);
|
|
172
|
+
return tighterUpper(self, that);
|
|
173
|
+
});
|
|
174
|
+
/**
|
|
175
|
+
* @experimental
|
|
176
|
+
*/
|
|
177
|
+
const parseBound = (keyLayout, { keyValues, inclusive }) => Result.map(prefix(keyLayout, keyValues), (key) => ({
|
|
178
|
+
key,
|
|
179
|
+
inclusive
|
|
180
|
+
}));
|
|
181
|
+
/**
|
|
182
|
+
* @experimental
|
|
183
|
+
*/
|
|
184
|
+
const parse = (keyLayout, keyBounds) => {
|
|
185
|
+
const endpoint = (bound) => Option.match(bound, {
|
|
186
|
+
onNone: () => Result.succeed(Option.none()),
|
|
187
|
+
onSome: (value) => Result.map(parseBound(keyLayout, value), Option.some)
|
|
188
|
+
});
|
|
189
|
+
return Result.gen(function* () {
|
|
190
|
+
const lower = yield* endpoint(keyBounds.lower);
|
|
191
|
+
const upper = yield* endpoint(keyBounds.upper);
|
|
192
|
+
return make(keyLayout, {
|
|
193
|
+
lower,
|
|
194
|
+
upper
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* @experimental
|
|
200
|
+
*/
|
|
201
|
+
const toBounds = (parsedBounds) => ({
|
|
202
|
+
lower: Option.map(parsedBounds.lower, rawBound),
|
|
203
|
+
upper: Option.map(parsedBounds.upper, rawBound)
|
|
204
|
+
});
|
|
205
|
+
//#endregion
|
|
206
|
+
export { QueryStreamKeyBounds_exports, admittedByLower, admittedByUpper, forLayout, fromParsed, intersect, intersectIndexBounds, isEmpty, parse, parseBound, tightestLower, tightestParsedLower, tightestParsedUpper, tightestUpper, toBounds, unbounded };
|
|
207
|
+
|
|
208
|
+
//# sourceMappingURL=QueryStreamKeyBounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyBounds.js","names":["QueryStreamKey.values","QueryStreamKeyValues.Order","QueryStreamKeyLayout.validateEquivalence","QueryStreamKey.prefix"],"sources":["../src/QueryStreamKeyBounds.ts"],"sourcesContent":["import * as Array from \"effect/Array\";\nimport * as Data from \"effect/Data\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Result from \"effect/Result\";\nimport * as QueryStreamKey from \"./QueryStreamKey\";\nimport * as QueryStreamKeyLayout from \"./QueryStreamKeyLayout\";\nimport * as QueryStreamKeyValues from \"./QueryStreamKeyValues\";\n\n// A bound's key may be a *prefix* of the full key: bounding by `[\"a\"]` means\n// bounding by the whole family of keys that start with `\"a\"`. To compare\n// bounds and keys uniformly, each is modelled as a \"cut\"—a position\n// *between* keys: the `predecessor` cut of a prefix sits just before every\n// key extending it, the `successor` cut just after, and an `exact` cut is a\n// full key itself. (This is `convex-helpers`' `compareKeys` model.)\n\n/**\n * One side of a range: a (possibly prefix) key and whether it's included.\n *\n * @experimental\n */\nexport interface KeyBound {\n readonly keyValues: QueryStreamKeyValues.QueryStreamKeyValues;\n readonly inclusive: boolean;\n}\n\n/**\n * Bounds over a stream's key, in _ascending key space_ (`narrow` converts from\n * stream space, where `desc` reverses which end is which).\n *\n * @experimental\n */\nexport interface KeyBounds {\n readonly lower: Option.Option<KeyBound>;\n readonly upper: Option.Option<KeyBound>;\n}\n\n/**\n * Bounds in _full index-key space_: `eq`-pinned values appear as a shared\n * prefix of both keys (`fromBounds` re-derives them as `eq` constraints). An\n * empty key bounds nothing.\n *\n * @experimental\n */\nexport interface IndexBounds {\n readonly lower: KeyBound;\n readonly upper: KeyBound;\n}\n\ntype KeyCut = Data.TaggedEnum<{\n Predecessor: {\n readonly keyValues: QueryStreamKeyValues.QueryStreamKeyValues;\n };\n Exact: { readonly key: QueryStreamKey.Complete };\n Successor: { readonly keyValues: QueryStreamKeyValues.QueryStreamKeyValues };\n}>;\nconst KeyCut = Data.taggedEnum<KeyCut>();\n\nconst cutRank = KeyCut.$match({\n Predecessor: () => 0,\n Exact: () => 1,\n Successor: () => 2,\n});\n\nconst cutKeyValues = KeyCut.$match({\n Predecessor: ({ keyValues }) => keyValues,\n Exact: ({ key }) => QueryStreamKey.values(key),\n Successor: ({ keyValues }) => keyValues,\n});\n\nconst KeyCutOrder: Order.Order<KeyCut> = Order.make((self, that) => {\n const selfKeyValues = cutKeyValues(self);\n const thatKeyValues = cutKeyValues(that);\n const minLength = Math.min(selfKeyValues.length, thatKeyValues.length);\n const prefixOrdering = QueryStreamKeyValues.Order(\"asc\")(\n Array.take(selfKeyValues, minLength),\n Array.take(thatKeyValues, minLength),\n );\n if (prefixOrdering !== 0) {\n return prefixOrdering;\n }\n if (selfKeyValues.length === thatKeyValues.length) {\n return Order.Number(cutRank(self), cutRank(that));\n }\n // One key is a proper prefix of the other. The shorter cut sits just\n // before (`predecessor`) or just after (`successor`) *every* key\n // extending its prefix—the longer one included. (`exact` cuts are\n // always full keys, so an `exact` cut is never the shorter one here.)\n const selfIsShorter = selfKeyValues.length < thatKeyValues.length;\n const shorter = selfIsShorter ? self : that;\n const shorterOrdering = KeyCut.$match(shorter, {\n Predecessor: () => -1 as const,\n Exact: () => 1 as const,\n Successor: () => 1 as const,\n });\n return selfIsShorter ? shorterOrdering : (-shorterOrdering as -1 | 1);\n});\n\nconst lowerCut = (bound: KeyBound): KeyCut =>\n bound.inclusive\n ? KeyCut.Predecessor({ keyValues: bound.keyValues })\n : KeyCut.Successor({ keyValues: bound.keyValues });\n\nconst upperCut = (bound: KeyBound): KeyCut =>\n bound.inclusive\n ? KeyCut.Successor({ keyValues: bound.keyValues })\n : KeyCut.Predecessor({ keyValues: bound.keyValues });\n\n/**\n * The stricter (later) of two lower bounds.\n *\n * @experimental\n */\nexport const tightestLower = (self: KeyBound, that: KeyBound): KeyBound =>\n Order.isGreaterThan(KeyCutOrder)(lowerCut(that), lowerCut(self))\n ? that\n : self;\n\n/**\n * The stricter (earlier) of two upper bounds.\n *\n * @experimental\n */\nexport const tightestUpper = (self: KeyBound, that: KeyBound): KeyBound =>\n Order.isLessThan(KeyCutOrder)(upperCut(that), upperCut(self)) ? that : self;\n\nconst combineKeyBound = (\n self: Option.Option<ParsedBound>,\n that: Option.Option<ParsedBound>,\n combine: (self: ParsedBound, that: ParsedBound) => ParsedBound,\n): Option.Option<ParsedBound> =>\n Option.match(self, {\n onNone: () => that,\n onSome: (first) =>\n Option.some(\n Option.match(that, {\n onNone: () => first,\n onSome: (second) => combine(first, second),\n }),\n ),\n });\n\n/**\n * @experimental\n */\nexport const intersect = (\n self: ParsedBounds,\n that: ParsedBounds,\n): Result.Result<ParsedBounds, QueryStreamKeyLayout.KeyLayoutMismatchError> =>\n Result.map(forLayout(self.keyLayout, that), () =>\n make(self.keyLayout, {\n lower: combineKeyBound(self.lower, that.lower, tighterLower),\n upper: combineKeyBound(self.upper, that.upper, tighterUpper),\n }),\n );\n\n/**\n * @experimental\n */\nexport const isEmpty = (indexBounds: IndexBounds): boolean =>\n KeyCutOrder(lowerCut(indexBounds.lower), upperCut(indexBounds.upper)) >= 0;\n\n/**\n * @experimental\n */\nexport const intersectIndexBounds = (\n self: IndexBounds,\n that: IndexBounds,\n): IndexBounds => ({\n lower: tightestLower(self.lower, that.lower),\n upper: tightestUpper(self.upper, that.upper),\n});\n\n/**\n * Whether a compatible key sits after the lower bound (always, when unbounded).\n *\n * @experimental\n */\nexport const admittedByLower =\n (parsedBounds: ParsedBounds) =>\n (\n key: QueryStreamKey.Complete,\n ): Result.Result<boolean, QueryStreamKeyLayout.KeyLayoutMismatchError> =>\n Result.gen(function* () {\n yield* QueryStreamKeyLayout.validateEquivalence(\n parsedBounds.keyLayout,\n key.layout,\n );\n return Option.match(parsedBounds.lower, {\n onNone: () => true,\n onSome: (bound) =>\n KeyCutOrder(KeyCut.Exact({ key }), lowerCut(rawBound(bound))) > 0,\n });\n });\n\n/**\n * Whether a compatible key sits before the upper bound (always, when\n * unbounded).\n *\n * @experimental\n */\nexport const admittedByUpper =\n (parsedBounds: ParsedBounds) =>\n (\n key: QueryStreamKey.Complete,\n ): Result.Result<boolean, QueryStreamKeyLayout.KeyLayoutMismatchError> =>\n Result.gen(function* () {\n yield* QueryStreamKeyLayout.validateEquivalence(\n parsedBounds.keyLayout,\n key.layout,\n );\n return Option.match(parsedBounds.upper, {\n onNone: () => true,\n onSome: (bound) =>\n KeyCutOrder(KeyCut.Exact({ key }), upperCut(rawBound(bound))) < 0,\n });\n });\n\n/**\n * At least one endpoint in stream order. Omit the other to leave that side\n * unbounded.\n *\n * @experimental\n */\nexport type NarrowBounds =\n | {\n readonly start: KeyBound;\n readonly end?: KeyBound | undefined;\n }\n | {\n readonly start?: KeyBound | undefined;\n readonly end: KeyBound;\n };\n\n/**\n * @experimental\n */\nexport interface ParsedBound {\n readonly key: QueryStreamKey.Prefix;\n readonly inclusive: boolean;\n}\n\n// Endpoints validated against a stream layout. Operations that preserve the\n// key space retain these values; coordinate changes construct new endpoints.\nconst TypeId = \"~@confect/server/QueryStreamKeyBounds\";\n\n/**\n * @experimental\n */\nexport interface ParsedBounds {\n readonly [TypeId]: typeof TypeId;\n readonly keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout;\n readonly lower: Option.Option<ParsedBound>;\n readonly upper: Option.Option<ParsedBound>;\n}\n\nconst make = (\n keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n endpoints: Pick<ParsedBounds, \"lower\" | \"upper\">,\n): ParsedBounds => ({\n [TypeId]: TypeId,\n keyLayout,\n lower: endpoints.lower,\n upper: endpoints.upper,\n});\n\n/**\n * @experimental\n */\nexport const unbounded = (\n keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n): ParsedBounds =>\n make(keyLayout, { lower: Option.none(), upper: Option.none() });\n\n/**\n * @experimental\n */\nexport const forLayout = (\n keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n parsedBounds: ParsedBounds,\n): Result.Result<ParsedBounds, QueryStreamKeyLayout.KeyLayoutMismatchError> =>\n Result.gen(function* () {\n yield* QueryStreamKeyLayout.validateEquivalence(\n keyLayout,\n parsedBounds.keyLayout,\n );\n return parsedBounds;\n });\n\n// Combining existing parsed endpoints still needs a shared layout, including\n// when one or both endpoints are absent.\n/**\n * @experimental\n */\nexport const fromParsed = (\n keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n endpoints: Pick<ParsedBounds, \"lower\" | \"upper\">,\n): Result.Result<ParsedBounds, QueryStreamKeyLayout.KeyLayoutMismatchError> => {\n const validateEndpoint = (endpoint: Option.Option<ParsedBound>) =>\n Option.match(endpoint, {\n onNone: () => Result.succeed(undefined),\n onSome: ({ key }) =>\n QueryStreamKeyLayout.validateEquivalence(keyLayout, key.layout),\n });\n return Result.gen(function* () {\n yield* validateEndpoint(endpoints.lower);\n yield* validateEndpoint(endpoints.upper);\n return make(keyLayout, endpoints);\n });\n};\n\nconst rawBound = (bound: ParsedBound): KeyBound => ({\n keyValues: QueryStreamKey.values(bound.key),\n inclusive: bound.inclusive,\n});\n\n// Select existing endpoints so intersection retains their parsed keys.\nconst tighterLower = (self: ParsedBound, that: ParsedBound): ParsedBound =>\n KeyCutOrder(lowerCut(rawBound(that)), lowerCut(rawBound(self))) > 0\n ? that\n : self;\n\nconst tighterUpper = (self: ParsedBound, that: ParsedBound): ParsedBound =>\n KeyCutOrder(upperCut(rawBound(that)), upperCut(rawBound(self))) < 0\n ? that\n : self;\n\n/**\n * @experimental\n */\nexport const tightestParsedLower = (\n self: ParsedBound,\n that: ParsedBound,\n): Result.Result<ParsedBound, QueryStreamKeyLayout.KeyLayoutMismatchError> =>\n Result.gen(function* () {\n yield* QueryStreamKeyLayout.validateEquivalence(\n self.key.layout,\n that.key.layout,\n );\n return tighterLower(self, that);\n });\n\n/**\n * @experimental\n */\nexport const tightestParsedUpper = (\n self: ParsedBound,\n that: ParsedBound,\n): Result.Result<ParsedBound, QueryStreamKeyLayout.KeyLayoutMismatchError> =>\n Result.gen(function* () {\n yield* QueryStreamKeyLayout.validateEquivalence(\n self.key.layout,\n that.key.layout,\n );\n return tighterUpper(self, that);\n });\n\n/**\n * @experimental\n */\nexport const parseBound = (\n keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n { keyValues, inclusive }: KeyBound,\n): Result.Result<ParsedBound, QueryStreamKey.KeyWidthMismatchError> =>\n Result.map(QueryStreamKey.prefix(keyLayout, keyValues), (key) => ({\n key,\n inclusive,\n }));\n\n/**\n * @experimental\n */\nexport const parse = (\n keyLayout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n keyBounds: KeyBounds,\n): Result.Result<ParsedBounds, QueryStreamKey.KeyWidthMismatchError> => {\n const endpoint = (bound: Option.Option<KeyBound>) =>\n Option.match(bound, {\n onNone: () => Result.succeed(Option.none<ParsedBound>()),\n onSome: (value) => Result.map(parseBound(keyLayout, value), Option.some),\n });\n return Result.gen(function* () {\n const lower = yield* endpoint(keyBounds.lower);\n const upper = yield* endpoint(keyBounds.upper);\n return make(keyLayout, { lower, upper });\n });\n};\n\n/**\n * @experimental\n */\nexport const toBounds = (parsedBounds: ParsedBounds): KeyBounds => ({\n lower: Option.map(parsedBounds.lower, rawBound),\n upper: Option.map(parsedBounds.upper, rawBound),\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as Brand from "effect/Brand";
|
|
2
|
+
/**
|
|
3
|
+
* Ordered names for the visible components of a stream's ordering key. Names
|
|
4
|
+
* may repeat, and the sequence may be empty. They are aliases, not document
|
|
5
|
+
* field paths; implicit ID positions have no visible label.
|
|
6
|
+
*
|
|
7
|
+
* @experimental
|
|
8
|
+
*/
|
|
9
|
+
export type QueryStreamKeyLabels<Names extends ReadonlyArray<string> = ReadonlyArray<string>> = Readonly<Names> & Brand.Brand<"@confect/server/QueryStreamKeyLabels">;
|
|
10
|
+
/**
|
|
11
|
+
* @experimental
|
|
12
|
+
*/
|
|
13
|
+
export type Concat<LeftKeyLabels extends QueryStreamKeyLabels, RightKeyLabels extends QueryStreamKeyLabels> = LeftKeyLabels extends QueryStreamKeyLabels<infer LeftNames> ? RightKeyLabels extends QueryStreamKeyLabels<infer RightNames> ? QueryStreamKeyLabels<readonly [...LeftNames, ...RightNames]> : never : never;
|
|
14
|
+
/**
|
|
15
|
+
* Mark a tuple of names as labels without changing its runtime representation.
|
|
16
|
+
*
|
|
17
|
+
* @experimental
|
|
18
|
+
*/
|
|
19
|
+
export declare function make<const Names extends ReadonlyArray<string>>(names: Names): QueryStreamKeyLabels<Names>;
|
|
20
|
+
/**
|
|
21
|
+
* Check whether the labels start with the given prefix, including order and
|
|
22
|
+
* multiplicity. The empty prefix always matches.
|
|
23
|
+
*
|
|
24
|
+
* @experimental
|
|
25
|
+
*/
|
|
26
|
+
export declare const hasPrefix: (self: QueryStreamKeyLabels, prefixKeyLabels: QueryStreamKeyLabels) => boolean;
|
|
27
|
+
//# sourceMappingURL=QueryStreamKeyLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyLabels.d.ts","sourceRoot":"","sources":["../src/QueryStreamKeyLabels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,CAC9B,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,IACzD,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAM1E;;GAEG;AACH,MAAM,MAAM,MAAM,CAChB,aAAa,SAAS,oBAAoB,EAC1C,cAAc,SAAS,oBAAoB,IAE3C,aAAa,SAAS,oBAAoB,CAAC,MAAM,SAAS,CAAC,GACvD,cAAc,SAAS,oBAAoB,CAAC,MAAM,UAAU,CAAC,GAC3D,oBAAoB,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,GAC5D,KAAK,GACP,KAAK,CAAC;AAIZ;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,EAC5D,KAAK,EAAE,KAAK,GACX,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAK/B;;;;;GAKG;AACH,eAAO,MAAM,SAAS,SACd,oBAAoB,mBACT,oBAAoB,KACpC,OAE6D,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
import * as Brand from "effect/Brand";
|
|
3
|
+
//#region src/QueryStreamKeyLabels.ts
|
|
4
|
+
var QueryStreamKeyLabels_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
+
hasPrefix: () => hasPrefix,
|
|
6
|
+
make: () => make
|
|
7
|
+
});
|
|
8
|
+
const LabelsBrand = Brand.nominal();
|
|
9
|
+
function make(names) {
|
|
10
|
+
return LabelsBrand(names);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Check whether the labels start with the given prefix, including order and
|
|
14
|
+
* multiplicity. The empty prefix always matches.
|
|
15
|
+
*
|
|
16
|
+
* @experimental
|
|
17
|
+
*/
|
|
18
|
+
const hasPrefix = (self, prefixKeyLabels) => prefixKeyLabels.length <= self.length && prefixKeyLabels.every((label, index) => label === self[index]);
|
|
19
|
+
//#endregion
|
|
20
|
+
export { QueryStreamKeyLabels_exports, hasPrefix, make };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=QueryStreamKeyLabels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyLabels.js","names":[],"sources":["../src/QueryStreamKeyLabels.ts"],"sourcesContent":["import * as Brand from \"effect/Brand\";\n\n/**\n * Ordered names for the visible components of a stream's ordering key. Names\n * may repeat, and the sequence may be empty. They are aliases, not document\n * field paths; implicit ID positions have no visible label.\n *\n * @experimental\n */\nexport type QueryStreamKeyLabels<\n Names extends ReadonlyArray<string> = ReadonlyArray<string>,\n> = Readonly<Names> & Brand.Brand<\"@confect/server/QueryStreamKeyLabels\">;\n\n// Tuple operations must use the underlying names: spreading a branded tuple\n// directly can widen its fixed positions into an array of element unions.\n// Defer extraction and concatenation until both label types are known to avoid\n// expanding unresolved tuple types while checking generic stream operations.\n/**\n * @experimental\n */\nexport type Concat<\n LeftKeyLabels extends QueryStreamKeyLabels,\n RightKeyLabels extends QueryStreamKeyLabels,\n> =\n LeftKeyLabels extends QueryStreamKeyLabels<infer LeftNames>\n ? RightKeyLabels extends QueryStreamKeyLabels<infer RightNames>\n ? QueryStreamKeyLabels<readonly [...LeftNames, ...RightNames]>\n : never\n : never;\n\nconst LabelsBrand = Brand.nominal<QueryStreamKeyLabels>();\n\n/**\n * Mark a tuple of names as labels without changing its runtime representation.\n *\n * @experimental\n */\nexport function make<const Names extends ReadonlyArray<string>>(\n names: Names,\n): QueryStreamKeyLabels<Names>;\nexport function make(names: ReadonlyArray<string>): QueryStreamKeyLabels {\n return LabelsBrand(names);\n}\n\n/**\n * Check whether the labels start with the given prefix, including order and\n * multiplicity. The empty prefix always matches.\n *\n * @experimental\n */\nexport const hasPrefix = (\n self: QueryStreamKeyLabels,\n prefixKeyLabels: QueryStreamKeyLabels,\n): boolean =>\n prefixKeyLabels.length <= self.length &&\n prefixKeyLabels.every((label, index) => label === self[index]);\n"],"mappings":";;;;;;;AA8BA,MAAM,cAAc,MAAM,QAA8B;AAUxD,SAAgB,KAAK,OAAoD;CACvE,OAAO,YAAY,KAAK;AAC1B;;;;;;;AAQA,MAAa,aACX,MACA,oBAEA,gBAAgB,UAAU,KAAK,UAC/B,gBAAgB,OAAO,OAAO,UAAU,UAAU,KAAK,MAAM"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import * as Data from "effect/Data";
|
|
2
|
+
import * as Equivalence_ from "effect/Equivalence";
|
|
3
|
+
import * as Result from "effect/Result";
|
|
4
|
+
import type * as Types from "effect/Types";
|
|
5
|
+
import * as QueryStreamKeyLabels from "./QueryStreamKeyLabels";
|
|
6
|
+
/**
|
|
7
|
+
* One runtime position of a stream key. Explicit IDs and their aliases are
|
|
8
|
+
* visible; implicit ID tiebreakers have no label. Empty keys have no
|
|
9
|
+
* positions.
|
|
10
|
+
*
|
|
11
|
+
* @experimental
|
|
12
|
+
*/
|
|
13
|
+
export type Position = Data.TaggedEnum<{
|
|
14
|
+
Visible: {
|
|
15
|
+
readonly label: string;
|
|
16
|
+
};
|
|
17
|
+
ImplicitId: {};
|
|
18
|
+
}>;
|
|
19
|
+
declare const TypeId = "@confect/server/QueryStreamKeyLayout";
|
|
20
|
+
/**
|
|
21
|
+
* Describes the positions in a stream's keys: their sequence, their labels, and
|
|
22
|
+
* where implicit document-ID tiebreakers occur. Every element has its own key
|
|
23
|
+
* values; the stream has one shared layout.
|
|
24
|
+
*
|
|
25
|
+
* For example, labels `["text", "_creationTime"]` describe the labeled
|
|
26
|
+
* positions in a key such as `["apple", 1, "n1"]`. Its layout also records the
|
|
27
|
+
* final implicit ID position. Joined layouts retain each component's ID, so
|
|
28
|
+
* their labels alone do not describe every key position.
|
|
29
|
+
*
|
|
30
|
+
* Layouts are compatible when they have the same total width, labels in the
|
|
31
|
+
* same positions, and implicit-ID positions. Direction is separate. Layouts
|
|
32
|
+
* contain no key values, value-type schemas, table identity, or equality-pinned
|
|
33
|
+
* values. Labels start as index field paths but may be renamed. An explicit ID,
|
|
34
|
+
* such as in `by_id`, has a label.
|
|
35
|
+
*
|
|
36
|
+
* Reuse a stream's `keyLayout` with `empty` or `flatMap`'s `innerKeyLayout`.
|
|
37
|
+
* Creating a stream to obtain its layout does not read documents. The
|
|
38
|
+
* `KeyLabels` parameter tracks only labels; implicit-ID positions are checked
|
|
39
|
+
* at runtime. Normally this type is inferred from the source stream.
|
|
40
|
+
*
|
|
41
|
+
* @experimental
|
|
42
|
+
*/
|
|
43
|
+
export interface QueryStreamKeyLayout<out KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels = QueryStreamKeyLabels.QueryStreamKeyLabels> {
|
|
44
|
+
readonly [TypeId]: {
|
|
45
|
+
readonly _Labels: Types.Covariant<KeyLabels>;
|
|
46
|
+
readonly positions: ReadonlyArray<Position>;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The runtime positions, including implicit ID tiebreakers.
|
|
51
|
+
*
|
|
52
|
+
* @experimental
|
|
53
|
+
*/
|
|
54
|
+
export declare const positions: (self: QueryStreamKeyLayout) => ReadonlyArray<Position>;
|
|
55
|
+
/**
|
|
56
|
+
* The source field paths remaining after an equality prefix.
|
|
57
|
+
*
|
|
58
|
+
* @experimental
|
|
59
|
+
*/
|
|
60
|
+
export type RemainingFieldPaths<FieldPaths extends ReadonlyArray<string>, Count extends number> = Count extends unknown ? DropPrefix<FieldPaths, Count> : never;
|
|
61
|
+
type DropPrefix<FieldPaths extends ReadonlyArray<string>, Count extends number, Prefix extends ReadonlyArray<unknown> = []> = number extends Count ? ReadonlyArray<string> : Prefix["length"] extends Count ? Types.Mutable<FieldPaths> : FieldPaths extends readonly [
|
|
62
|
+
string,
|
|
63
|
+
...infer TailFieldPaths extends ReadonlyArray<string>
|
|
64
|
+
] ? DropPrefix<TailFieldPaths, Count, readonly [...Prefix, unknown]> : FieldPaths extends readonly [] ? [] : ReadonlyArray<string>;
|
|
65
|
+
declare const InvalidEqualityPrefixError_base: new <A extends Record<string, any> = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
66
|
+
readonly _tag: "InvalidEqualityPrefixError";
|
|
67
|
+
} & Readonly<A>;
|
|
68
|
+
/**
|
|
69
|
+
* The equality prefix cannot select a whole number of source field paths.
|
|
70
|
+
*
|
|
71
|
+
* @experimental
|
|
72
|
+
*/
|
|
73
|
+
export declare class InvalidEqualityPrefixError extends InvalidEqualityPrefixError_base<{
|
|
74
|
+
readonly fieldPaths: ReadonlyArray<string>;
|
|
75
|
+
readonly eqCount: number;
|
|
76
|
+
}> {
|
|
77
|
+
get message(): string;
|
|
78
|
+
}
|
|
79
|
+
declare const InvalidLabelPrefixError_base: new <A extends Record<string, any> = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
80
|
+
readonly _tag: "InvalidLabelPrefixError";
|
|
81
|
+
} & Readonly<A>;
|
|
82
|
+
/**
|
|
83
|
+
* The requested labels do not form a prefix of the layout's visible labels.
|
|
84
|
+
*
|
|
85
|
+
* @experimental
|
|
86
|
+
*/
|
|
87
|
+
export declare class InvalidLabelPrefixError extends InvalidLabelPrefixError_base<{
|
|
88
|
+
readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;
|
|
89
|
+
readonly prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;
|
|
90
|
+
}> {
|
|
91
|
+
get message(): string;
|
|
92
|
+
}
|
|
93
|
+
declare const LabelCountMismatchError_base: new <A extends Record<string, any> = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
94
|
+
readonly _tag: "LabelCountMismatchError";
|
|
95
|
+
} & Readonly<A>;
|
|
96
|
+
/**
|
|
97
|
+
* The replacement labels cannot fill exactly the layout's visible positions.
|
|
98
|
+
*
|
|
99
|
+
* @experimental
|
|
100
|
+
*/
|
|
101
|
+
export declare class LabelCountMismatchError extends LabelCountMismatchError_base<{
|
|
102
|
+
readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;
|
|
103
|
+
readonly replacementKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;
|
|
104
|
+
}> {
|
|
105
|
+
get message(): string;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Construct a scan layout from the original index field paths, before equality
|
|
109
|
+
* pinning. Only an ID absent from the end of that original key is implicit.
|
|
110
|
+
* Pinning every field of `by_id` produces a zero-width layout; pinning every
|
|
111
|
+
* visible field of another index leaves its implicit ID. Invalid equality
|
|
112
|
+
* prefix lengths return `InvalidEqualityPrefixError`.
|
|
113
|
+
*
|
|
114
|
+
* @experimental
|
|
115
|
+
*/
|
|
116
|
+
export declare function fromIndex<const FieldPaths extends ReadonlyArray<string>>(fieldPaths: FieldPaths): Result.Result<QueryStreamKeyLayout<QueryStreamKeyLabels.QueryStreamKeyLabels<FieldPaths>>, InvalidEqualityPrefixError>;
|
|
117
|
+
/**
|
|
118
|
+
* @experimental
|
|
119
|
+
*/
|
|
120
|
+
export declare function fromIndex<const FieldPaths extends ReadonlyArray<string>, const Count extends number>(fieldPaths: FieldPaths, eqCount: Count): Result.Result<QueryStreamKeyLayout<QueryStreamKeyLabels.QueryStreamKeyLabels<RemainingFieldPaths<FieldPaths, Count>>>, InvalidEqualityPrefixError>;
|
|
121
|
+
/**
|
|
122
|
+
* Concatenate layouts without losing component tiebreakers.
|
|
123
|
+
*
|
|
124
|
+
* @experimental
|
|
125
|
+
*/
|
|
126
|
+
export declare const concat: <LeftKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels, RightKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels>(self: QueryStreamKeyLayout<LeftKeyLabels>, that: QueryStreamKeyLayout<RightKeyLabels>) => QueryStreamKeyLayout<QueryStreamKeyLabels.Concat<LeftKeyLabels, RightKeyLabels>>;
|
|
127
|
+
/**
|
|
128
|
+
* Format visible labels and implicit IDs for diagnostics.
|
|
129
|
+
*
|
|
130
|
+
* @experimental
|
|
131
|
+
*/
|
|
132
|
+
export declare const format: (self: QueryStreamKeyLayout) => string;
|
|
133
|
+
/**
|
|
134
|
+
* The labels available to `distinct` and `renameKey`.
|
|
135
|
+
*
|
|
136
|
+
* @experimental
|
|
137
|
+
*/
|
|
138
|
+
export declare function visibleLabels<KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels>(self: QueryStreamKeyLayout<KeyLabels>): KeyLabels;
|
|
139
|
+
/**
|
|
140
|
+
* Number of positions in an element's runtime key.
|
|
141
|
+
*
|
|
142
|
+
* @experimental
|
|
143
|
+
*/
|
|
144
|
+
export declare const runtimeWidth: (self: QueryStreamKeyLayout) => number;
|
|
145
|
+
/**
|
|
146
|
+
* @experimental
|
|
147
|
+
*/
|
|
148
|
+
export declare const Equivalence: Equivalence_.Equivalence<QueryStreamKeyLayout>;
|
|
149
|
+
declare const KeyLayoutMismatchError_base: new <A extends Record<string, any> = {}>(args: Types.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
150
|
+
readonly _tag: "KeyLayoutMismatchError";
|
|
151
|
+
} & Readonly<A>;
|
|
152
|
+
/**
|
|
153
|
+
* @experimental
|
|
154
|
+
*/
|
|
155
|
+
export declare class KeyLayoutMismatchError extends KeyLayoutMismatchError_base<{
|
|
156
|
+
readonly expectedKeyLayout: QueryStreamKeyLayout;
|
|
157
|
+
readonly actualKeyLayout: QueryStreamKeyLayout;
|
|
158
|
+
}> {
|
|
159
|
+
get message(): string;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @experimental
|
|
163
|
+
*/
|
|
164
|
+
export declare const validateEquivalence: (expectedKeyLayout: QueryStreamKeyLayout, actualKeyLayout: QueryStreamKeyLayout) => Result.Result<void, KeyLayoutMismatchError>;
|
|
165
|
+
/**
|
|
166
|
+
* Parse a visible label prefix and resolve its runtime width. Implicit IDs
|
|
167
|
+
* before the last selected label are included; implicit IDs after it are not.
|
|
168
|
+
*
|
|
169
|
+
* @experimental
|
|
170
|
+
*/
|
|
171
|
+
export declare const resolvePrefix: (self: QueryStreamKeyLayout, prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels) => Result.Result<number, InvalidLabelPrefixError>;
|
|
172
|
+
/**
|
|
173
|
+
* Relabel visible positions, preserving every implicit ID.
|
|
174
|
+
*
|
|
175
|
+
* @experimental
|
|
176
|
+
*/
|
|
177
|
+
export declare const rename: <ReplacementKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels>(self: QueryStreamKeyLayout, replacementKeyLabels: ReplacementKeyLabels) => Result.Result<QueryStreamKeyLayout<ReplacementKeyLabels>, LabelCountMismatchError>;
|
|
178
|
+
export {};
|
|
179
|
+
//# sourceMappingURL=QueryStreamKeyLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStreamKeyLayout.d.ts","sourceRoot":"","sources":["../src/QueryStreamKeyLayout.ts"],"names":[],"mappings":"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"}
|