@gaganref/confect-server 10.3.1-fork.3 → 10.3.1-fork.30
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/dist/ActionCall.d.ts +30 -0
- package/dist/ActionCall.d.ts.map +1 -0
- package/dist/ActionCall.js +41 -0
- package/dist/ActionCall.js.map +1 -0
- package/dist/ActionCtx.d.ts +1 -1
- package/dist/ActionCtx.d.ts.map +1 -1
- package/dist/ActionCtx.js.map +1 -1
- package/dist/ActionRunner.js +2 -2
- package/dist/AiGatewayDecisionClient.d.ts +2 -2
- package/dist/AiGatewayDecisionClient.d.ts.map +1 -1
- package/dist/AiGatewayDecisionClient.js +1 -1
- package/dist/AiGatewayDecisionClient.js.map +1 -1
- package/dist/AiGatewayLanguageClient.d.ts +2 -2
- package/dist/AiGatewayLanguageClient.d.ts.map +1 -1
- package/dist/AiGatewayLanguageClient.js +1 -1
- package/dist/AiGatewayLanguageClient.js.map +1 -1
- package/dist/Auth.d.ts +1 -1
- package/dist/Auth.d.ts.map +1 -1
- package/dist/Auth.js +1 -1
- package/dist/Auth.js.map +1 -1
- package/dist/Callback.js +3 -3
- package/dist/ComponentCtx.d.ts +1 -1
- package/dist/ComponentCtx.d.ts.map +1 -1
- package/dist/ConvexConfigProvider.js +2 -2
- package/dist/ConvexFunctionDefinitions.d.ts +4 -4
- package/dist/ConvexFunctionDefinitions.d.ts.map +1 -1
- package/dist/ConvexFunctionDefinitions.js +2 -2
- package/dist/ConvexFunctionDefinitions.js.map +1 -1
- package/dist/ConvexLogger.js +1 -1
- package/dist/CronJobs.d.ts +1 -1
- package/dist/CronJobs.d.ts.map +1 -1
- package/dist/CronJobs.js +6 -6
- package/dist/CronJobs.js.map +1 -1
- package/dist/DataModel.d.ts +3 -3
- package/dist/DataModel.d.ts.map +1 -1
- package/dist/DataModel.js.map +1 -1
- package/dist/DatabaseReader.d.ts +4 -4
- package/dist/DatabaseReader.d.ts.map +1 -1
- package/dist/DatabaseReader.js.map +1 -1
- package/dist/DatabaseSchema.d.ts +1 -1
- package/dist/DatabaseSchema.d.ts.map +1 -1
- package/dist/DatabaseSchema.js +2 -2
- package/dist/DatabaseSchema.js.map +1 -1
- package/dist/DatabaseWriter.d.ts +41 -7
- package/dist/DatabaseWriter.d.ts.map +1 -1
- package/dist/DatabaseWriter.js +55 -8
- package/dist/DatabaseWriter.js.map +1 -1
- package/dist/Document.d.ts +4 -4
- package/dist/Document.d.ts.map +1 -1
- package/dist/Document.js.map +1 -1
- package/dist/ExecutionMetadata.js +1 -1
- package/dist/FunctionImpl.d.ts +2 -2
- package/dist/FunctionImpl.d.ts.map +1 -1
- package/dist/FunctionImpl.js +2 -2
- package/dist/FunctionImpl.js.map +1 -1
- package/dist/FunctionRegistryItem.d.ts +1 -1
- package/dist/FunctionRegistryItem.d.ts.map +1 -1
- package/dist/FunctionRegistryItem.js +1 -1
- package/dist/FunctionRegistryItem.js.map +1 -1
- package/dist/GroupImpl.d.ts +24 -5
- package/dist/GroupImpl.d.ts.map +1 -1
- package/dist/GroupImpl.js +21 -22
- package/dist/GroupImpl.js.map +1 -1
- package/dist/GroupRegistry.d.ts +2 -2
- package/dist/GroupRegistry.d.ts.map +1 -1
- package/dist/GroupRegistry.js.map +1 -1
- package/dist/Handler.d.ts +30 -26
- package/dist/Handler.d.ts.map +1 -1
- package/dist/Handler.js.map +1 -1
- package/dist/HttpRouter.d.ts +13 -13
- package/dist/HttpRouter.d.ts.map +1 -1
- package/dist/HttpRouter.js +2 -2
- package/dist/HttpRouter.js.map +1 -1
- package/dist/MiddlewareImpl.d.ts +14 -14
- package/dist/MiddlewareImpl.d.ts.map +1 -1
- package/dist/MiddlewareImpl.js +1 -1
- package/dist/MiddlewareImpl.js.map +1 -1
- package/dist/MutationCtx.d.ts +1 -1
- package/dist/MutationCtx.d.ts.map +1 -1
- package/dist/MutationCtx.js.map +1 -1
- package/dist/MutationRunner.d.ts +1 -1
- package/dist/MutationRunner.d.ts.map +1 -1
- package/dist/MutationRunner.js +2 -2
- package/dist/MutationRunner.js.map +1 -1
- package/dist/MutationTransactionContext.d.ts +2 -2
- package/dist/MutationTransactionContext.d.ts.map +1 -1
- package/dist/MutationTransactionContext.js +2 -2
- package/dist/MutationTransactionContext.js.map +1 -1
- package/dist/OfficialComponent.d.ts +50 -0
- package/dist/OfficialComponent.d.ts.map +1 -0
- package/dist/OfficialComponent.js +70 -0
- package/dist/OfficialComponent.js.map +1 -0
- package/dist/OrderedQuery.d.ts +4 -4
- package/dist/OrderedQuery.d.ts.map +1 -1
- package/dist/OrderedQuery.js.map +1 -1
- package/dist/QueryCtx.d.ts +1 -1
- package/dist/QueryCtx.d.ts.map +1 -1
- package/dist/QueryCtx.js.map +1 -1
- package/dist/QueryInitializer.d.ts +10 -10
- package/dist/QueryInitializer.d.ts.map +1 -1
- package/dist/QueryInitializer.js +2 -2
- package/dist/QueryInitializer.js.map +1 -1
- package/dist/QueryRunner.d.ts +2 -2
- package/dist/QueryRunner.d.ts.map +1 -1
- package/dist/QueryRunner.js +2 -2
- package/dist/QueryRunner.js.map +1 -1
- package/dist/QueryStream.d.ts +86 -13
- package/dist/QueryStream.d.ts.map +1 -1
- package/dist/QueryStream.js +81 -8
- package/dist/QueryStream.js.map +1 -1
- package/dist/QueryStreamCursor.d.ts +2 -2
- package/dist/QueryStreamCursor.d.ts.map +1 -1
- package/dist/QueryStreamCursor.js +1 -1
- package/dist/QueryStreamCursor.js.map +1 -1
- package/dist/QueryStreamIndexPrefix.d.ts +2 -2
- package/dist/QueryStreamIndexPrefix.d.ts.map +1 -1
- package/dist/QueryStreamIndexPrefix.js +1 -1
- package/dist/QueryStreamIndexPrefix.js.map +1 -1
- package/dist/QueryStreamIndexRange.d.ts +4 -4
- package/dist/QueryStreamIndexRange.d.ts.map +1 -1
- package/dist/QueryStreamIndexRange.js +2 -2
- package/dist/QueryStreamIndexRange.js.map +1 -1
- package/dist/QueryStreamKey.d.ts +2 -2
- package/dist/QueryStreamKey.d.ts.map +1 -1
- package/dist/QueryStreamKey.js +1 -1
- package/dist/QueryStreamKey.js.map +1 -1
- package/dist/QueryStreamKeyBounds.d.ts +3 -3
- package/dist/QueryStreamKeyBounds.d.ts.map +1 -1
- package/dist/QueryStreamKeyBounds.js +2 -2
- package/dist/QueryStreamKeyBounds.js.map +1 -1
- package/dist/QueryStreamKeyLayout.d.ts +1 -1
- package/dist/QueryStreamKeyLayout.d.ts.map +1 -1
- package/dist/QueryStreamKeyLayout.js +2 -2
- package/dist/QueryStreamKeyLayout.js.map +1 -1
- package/dist/QueryStreamKeyValues.d.ts +1 -1
- package/dist/QueryStreamKeyValues.d.ts.map +1 -1
- package/dist/QueryStreamKeyValues.js +1 -1
- package/dist/QueryStreamKeyValues.js.map +1 -1
- package/dist/QueryStreamPagination.d.ts +1 -1
- package/dist/QueryStreamPagination.d.ts.map +1 -1
- package/dist/QueryStreamPagination.js +1 -1
- package/dist/QueryStreamPagination.js.map +1 -1
- package/dist/QueryStreamReadBudget.d.ts +3 -2
- package/dist/QueryStreamReadBudget.d.ts.map +1 -1
- package/dist/QueryStreamReadBudget.js +6 -3
- package/dist/QueryStreamReadBudget.js.map +1 -1
- package/dist/QueryTransactionContext.js +2 -2
- package/dist/RegisteredConvexFunction.d.ts +20 -20
- package/dist/RegisteredConvexFunction.d.ts.map +1 -1
- package/dist/RegisteredConvexFunction.js +19 -19
- package/dist/RegisteredConvexFunction.js.map +1 -1
- package/dist/RegisteredFunction.d.ts +26 -26
- package/dist/RegisteredFunction.d.ts.map +1 -1
- package/dist/RegisteredFunction.js +55 -13
- package/dist/RegisteredFunction.js.map +1 -1
- package/dist/RegisteredFunctions.d.ts +3 -3
- package/dist/RegisteredFunctions.d.ts.map +1 -1
- package/dist/RegisteredFunctions.js.map +1 -1
- package/dist/RegisteredNodeFunction.d.ts +6 -6
- package/dist/RegisteredNodeFunction.d.ts.map +1 -1
- package/dist/RegisteredNodeFunction.js +1 -1
- package/dist/RegisteredNodeFunction.js.map +1 -1
- package/dist/Registry.d.ts +1 -1
- package/dist/Registry.d.ts.map +1 -1
- package/dist/Registry.js.map +1 -1
- package/dist/RegistryItems.d.ts +7 -0
- package/dist/RegistryItems.d.ts.map +1 -1
- package/dist/RegistryItems.js +8 -3
- package/dist/RegistryItems.js.map +1 -1
- package/dist/RequestMetadata.js +1 -1
- package/dist/ResolvedMiddleware.d.ts +2 -2
- package/dist/ResolvedMiddleware.d.ts.map +1 -1
- package/dist/ResolvedMiddleware.js.map +1 -1
- package/dist/Scheduler.js +2 -2
- package/dist/Storage.d.ts +6 -6
- package/dist/Storage.d.ts.map +1 -1
- package/dist/Storage.js +1 -1
- package/dist/Storage.js.map +1 -1
- package/dist/StorageActionWriter.d.ts +1 -1
- package/dist/StorageActionWriter.d.ts.map +1 -1
- package/dist/StorageActionWriter.js +1 -1
- package/dist/StorageActionWriter.js.map +1 -1
- package/dist/StorageReader.d.ts +1 -1
- package/dist/StorageReader.d.ts.map +1 -1
- package/dist/StorageReader.js +1 -1
- package/dist/StorageReader.js.map +1 -1
- package/dist/StorageWriter.d.ts +1 -1
- package/dist/StorageWriter.d.ts.map +1 -1
- package/dist/StorageWriter.js +1 -1
- package/dist/StorageWriter.js.map +1 -1
- package/dist/TableInfo.d.ts +2 -2
- package/dist/TableInfo.d.ts.map +1 -1
- package/dist/TableInfo.js.map +1 -1
- package/dist/TransactionMetadata.js +1 -1
- package/dist/VectorSearch.d.ts +1 -1
- package/dist/VectorSearch.d.ts.map +1 -1
- package/dist/VectorSearch.js +1 -1
- package/dist/VectorSearch.js.map +1 -1
- package/dist/index.d.ts +62 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -9
- package/dist/internal/AiGatewayDecisionClient.d.ts +1 -1
- package/dist/internal/AiGatewayDecisionClient.d.ts.map +1 -1
- package/dist/internal/AiGatewayDecisionClient.js +1 -1
- package/dist/internal/AiGatewayDecisionClient.js.map +1 -1
- package/dist/internal/AiGatewayLanguageClient.d.ts +1 -1
- package/dist/internal/AiGatewayLanguageClient.d.ts.map +1 -1
- package/dist/internal/AiGatewayLanguageClient.js +1 -1
- package/dist/internal/AiGatewayLanguageClient.js.map +1 -1
- package/dist/internal/AiGatewayServiceToken.js +1 -1
- package/dist/internal/DocumentPatch.d.ts +16 -0
- package/dist/internal/DocumentPatch.d.ts.map +1 -0
- package/dist/internal/DocumentPatch.js +36 -0
- package/dist/internal/DocumentPatch.js.map +1 -0
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/ActionCall.ts +82 -0
- package/src/ActionCtx.ts +1 -1
- package/src/AiGatewayDecisionClient.ts +3 -3
- package/src/AiGatewayLanguageClient.ts +3 -3
- package/src/Auth.ts +1 -1
- package/src/ComponentCtx.ts +1 -1
- package/src/ConvexFunctionDefinitions.ts +8 -8
- package/src/CronJobs.ts +1 -1
- package/src/DataModel.ts +3 -3
- package/src/DatabaseReader.ts +4 -4
- package/src/DatabaseSchema.ts +1 -1
- package/src/DatabaseWriter.ts +189 -31
- package/src/Document.ts +4 -4
- package/src/FunctionImpl.ts +5 -5
- package/src/FunctionRegistryItem.ts +1 -1
- package/src/GroupImpl.ts +66 -13
- package/src/GroupRegistry.ts +4 -4
- package/src/Handler.ts +43 -28
- package/src/HttpRouter.ts +17 -17
- package/src/MiddlewareImpl.ts +17 -17
- package/src/MutationCtx.ts +1 -1
- package/src/MutationRunner.ts +1 -1
- package/src/MutationTransactionContext.ts +2 -2
- package/src/OfficialComponent.ts +151 -0
- package/src/OrderedQuery.ts +4 -4
- package/src/QueryCtx.ts +1 -1
- package/src/QueryInitializer.ts +9 -9
- package/src/QueryRunner.ts +2 -2
- package/src/QueryStream.ts +212 -20
- package/src/QueryStreamCursor.ts +3 -3
- package/src/QueryStreamIndexPrefix.ts +2 -2
- package/src/QueryStreamIndexRange.ts +4 -4
- package/src/QueryStreamKey.ts +2 -2
- package/src/QueryStreamKeyBounds.ts +3 -3
- package/src/QueryStreamKeyLayout.ts +1 -1
- package/src/QueryStreamKeyValues.ts +1 -1
- package/src/QueryStreamPagination.ts +2 -2
- package/src/QueryStreamReadBudget.ts +19 -6
- package/src/RegisteredConvexFunction.ts +21 -21
- package/src/RegisteredFunction.ts +72 -19
- package/src/RegisteredFunctions.ts +4 -4
- package/src/RegisteredNodeFunction.ts +8 -8
- package/src/Registry.ts +1 -1
- package/src/RegistryItems.ts +33 -2
- package/src/ResolvedMiddleware.ts +2 -2
- package/src/Storage.ts +3 -3
- package/src/StorageActionWriter.ts +1 -1
- package/src/StorageReader.ts +1 -1
- package/src/StorageWriter.ts +1 -1
- package/src/TableInfo.ts +2 -2
- package/src/VectorSearch.ts +1 -1
- package/src/index.ts +62 -60
- package/src/internal/AiGatewayDecisionClient.ts +2 -2
- package/src/internal/AiGatewayLanguageClient.ts +2 -2
- package/src/internal/DocumentPatch.ts +87 -0
- package/src/node.ts +1 -1
|
@@ -1 +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"}
|
|
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.js\";\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"}
|
|
@@ -3,7 +3,7 @@ import * as Data from "effect/Data";
|
|
|
3
3
|
import * as Option from "effect/Option";
|
|
4
4
|
import * as Result from "effect/Result";
|
|
5
5
|
import * as Schema from "effect/Schema";
|
|
6
|
-
import type * as QueryStreamKey from "./QueryStreamKey";
|
|
6
|
+
import type * as QueryStreamKey from "./QueryStreamKey.js";
|
|
7
7
|
declare const PageSize: Schema.brand<Schema.Natural, "~@confect/server/QueryStreamPagination/PageSize">;
|
|
8
8
|
type PageSize = typeof PageSize.Type;
|
|
9
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 & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryStreamPagination.d.ts","sourceRoot":"","sources":["../src/QueryStreamPagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,cAAc,MAAM,
|
|
1
|
+
{"version":3,"file":"QueryStreamPagination.d.ts","sourceRoot":"","sources":["../src/QueryStreamPagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Order } from "./QueryStreamKeyValues.js";
|
|
2
|
+
import * as Data from "effect/Data";
|
|
2
3
|
import * as Schema from "effect/Schema";
|
|
3
4
|
import * as Match from "effect/Match";
|
|
4
5
|
import * as Option from "effect/Option";
|
|
5
6
|
import * as Result from "effect/Result";
|
|
6
|
-
import * as Data from "effect/Data";
|
|
7
7
|
import * as Chunk from "effect/Chunk";
|
|
8
8
|
//#region src/QueryStreamPagination.ts
|
|
9
9
|
const PageSize = Schema.Natural.pipe(Schema.brand("~@confect/server/QueryStreamPagination/PageSize"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryStreamPagination.js","names":["QueryStreamKeyValues.Order"],"sources":["../src/QueryStreamPagination.ts"],"sourcesContent":["import * as Chunk from \"effect/Chunk\";\nimport * as Data from \"effect/Data\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport type * as QueryStreamKey from \"./QueryStreamKey\";\nimport * as QueryStreamKeyValues from \"./QueryStreamKeyValues\";\n\nconst PageSize = Schema.Natural.pipe(\n Schema.brand(\"~@confect/server/QueryStreamPagination/PageSize\"),\n);\ntype PageSize = typeof PageSize.Type;\n\n/**\n * @experimental\n */\nexport class InvalidPageSizeError extends Data.TaggedError(\n \"InvalidPageSizeError\",\n)<{\n readonly numItems: number;\n}> {\n override get message(): string {\n return `QueryStream.paginate: numItems must be a nonnegative integer (received ${this.numItems})`;\n }\n}\n\n/**\n * @experimental\n */\nexport class EmptyInitialPageError extends Data.TaggedError(\n \"EmptyInitialPageError\",\n) {\n override get message(): string {\n return \"QueryStream.paginate: numItems of 0 with a null cursor is not supported\";\n }\n}\n\n/**\n * @experimental\n */\nexport type Range = Data.TaggedEnum<{\n Unpinned: {};\n ThroughKey: { readonly key: QueryStreamKey.Complete };\n ThroughEnd: {};\n}>;\n/**\n * @experimental\n */\nexport const Range = Data.taggedEnum<Range>();\n\n/**\n * @experimental\n */\nexport type Start = Data.TaggedEnum<{\n Beginning: {};\n After: {\n readonly key: QueryStreamKey.Complete;\n readonly cursor: string;\n };\n}>;\n/**\n * @experimental\n */\nexport const Start = Data.taggedEnum<Start>();\n\n/**\n * @experimental\n */\nexport interface ScanRequest {\n readonly numItems: PageSize;\n readonly after: Option.Option<QueryStreamKey.Complete>;\n readonly range: Range;\n}\n\n/**\n * @experimental\n */\nexport type Request = Data.TaggedEnum<{\n Unchanged: { readonly cursor: string };\n Scan: ScanRequest;\n}>;\nconst Request = Data.taggedEnum<Request>();\n\n/**\n * @experimental\n */\nexport const parseRequest = (\n numItems: number,\n start: Start,\n range: Range,\n): Result.Result<Request, InvalidPageSizeError | EmptyInitialPageError> =>\n Result.flatMap(\n Schema.decodeResult(PageSize)(numItems).pipe(\n Result.mapError(() => new InvalidPageSizeError({ numItems })),\n ),\n (size): Result.Result<Request, EmptyInitialPageError> =>\n size === 0\n ? Start.$match(start, {\n Beginning: () => Result.fail(new EmptyInitialPageError()),\n After: ({ cursor }) =>\n Result.succeed(Request.Unchanged({ cursor })),\n })\n : Result.succeed(\n Request.Scan({\n numItems: size,\n after: Start.$match(start, {\n Beginning: () => Option.none(),\n After: ({ key }) => Option.some(key),\n }),\n range,\n }),\n ),\n );\n\n/**\n * A nonempty scan, including filtered markers.\n */\ntype Progress = Chunk.NonEmptyChunk<QueryStreamKey.Complete>;\nconst append = (\n progress: Option.Option<Progress>,\n key: QueryStreamKey.Complete,\n): Progress =>\n Option.match(progress, {\n onNone: () => Chunk.of(key),\n onSome: (keys) => Chunk.append(keys, key),\n });\nconst midpoint = (progress: Progress): QueryStreamKey.Complete =>\n Option.getOrElse(\n Chunk.get(progress, Math.floor((Chunk.size(progress) - 1) / 2)),\n () => Chunk.headNonEmpty(progress),\n );\n\ninterface Stopped<Doc> {\n readonly page: Chunk.Chunk<Doc>;\n readonly progress: Progress;\n}\n\n/**\n * @experimental\n */\nexport type QueryStreamPagination<Doc> = Data.TaggedEnum<{\n Reading: {\n readonly page: Chunk.Chunk<Doc>;\n readonly progress: Option.Option<Progress>;\n };\n ItemLimit: Stopped<Doc>;\n ReadLimit: Stopped<Doc>;\n}>;\ninterface PaginationDefinition extends Data.TaggedEnum.WithGenerics<1> {\n readonly taggedEnum: QueryStreamPagination<this[\"A\"]>;\n}\nconst QueryStreamPagination = Data.taggedEnum<PaginationDefinition>();\n\n/**\n * @experimental\n */\nexport const initial = <Doc>(): QueryStreamPagination<Doc> =>\n QueryStreamPagination.Reading({\n page: Chunk.empty<Doc>(),\n progress: Option.none(),\n });\n\n/**\n * @experimental\n */\nexport const record = <Doc>(\n request: ScanRequest,\n self: QueryStreamPagination<Doc>,\n doc: Option.Option<Doc>,\n key: QueryStreamKey.Complete,\n readLimit: boolean,\n): QueryStreamPagination<Doc> =>\n Match.value(self).pipe(\n Match.tagsExhaustive({\n Reading: (reading) => {\n const progress = append(reading.progress, key);\n const page = Option.match(doc, {\n onNone: () => reading.page,\n onSome: (value) => Chunk.append(reading.page, value),\n });\n const continueReading = () =>\n QueryStreamPagination.Reading({\n page,\n progress: Option.some(progress),\n });\n return readLimit\n ? QueryStreamPagination.ReadLimit({ page, progress })\n : Range.$match(request.range, {\n Unpinned: () =>\n Chunk.size(page) >= request.numItems\n ? QueryStreamPagination.ItemLimit({ page, progress })\n : continueReading(),\n ThroughKey: continueReading,\n ThroughEnd: continueReading,\n });\n },\n ItemLimit: () => self,\n ReadLimit: () => self,\n }),\n );\n\n/**\n * @experimental\n */\nexport type Continuation = Data.TaggedEnum<{\n End: {};\n Key: { readonly key: QueryStreamKey.Complete };\n}>;\nconst Continuation = Data.taggedEnum<Continuation>();\n\ninterface Split<Doc> {\n readonly page: ReadonlyArray<Doc>;\n readonly continuation: Continuation;\n readonly splitKey: QueryStreamKey.Complete;\n}\n\n/**\n * @experimental\n */\nexport type Outcome<Doc> = Data.TaggedEnum<{\n Done: { readonly page: ReadonlyArray<Doc> };\n Continue: {\n readonly page: ReadonlyArray<Doc>;\n readonly key: QueryStreamKey.Complete;\n };\n SplitRequired: Split<Doc>;\n SplitRecommended: Split<Doc>;\n}>;\n\n/**\n * @experimental\n */\nexport class UnsafePageBoundaryError extends Data.TaggedError(\n \"UnsafePageBoundaryError\",\n)<{\n readonly reason: \"NoProgress\" | \"NoInteriorSplit\";\n}> {\n override get message(): string {\n return Match.value(this.reason).pipe(\n Match.when(\n \"NoProgress\",\n () => \"The read budget stopped the page before any key was scanned\",\n ),\n Match.when(\n \"NoInteriorSplit\",\n () => \"The read budget stopped the page without an interior split key\",\n ),\n Match.exhaustive,\n );\n }\n}\n\nconst SOFT_MAX_SCAN_LENGTH = 16000;\n\n/**\n * Decide the page result without reading a stream or serializing a cursor.\n *\n * @experimental\n */\nexport const finish = <Doc>(\n request: ScanRequest,\n self: QueryStreamPagination<Doc>,\n upstreamStopped: boolean,\n): Result.Result<Outcome<Doc>, UnsafePageBoundaryError> => {\n const page = Chunk.toArray(self.page);\n const stopped = (\n progress: Option.Option<Progress>,\n readLimit: boolean,\n ): Result.Result<Outcome<Doc>, UnsafePageBoundaryError> =>\n Result.flatMap(\n Result.fromOption(\n progress,\n () => new UnsafePageBoundaryError({ reason: \"NoProgress\" }),\n ),\n (scanned): Result.Result<Outcome<Doc>, UnsafePageBoundaryError> => {\n const splitKey = midpoint(scanned);\n const atEnd = Range.$match(request.range, {\n Unpinned: () => false,\n ThroughEnd: () => false,\n ThroughKey: ({ key }) =>\n QueryStreamKeyValues.Order(\"asc\")(splitKey.values, key.values) ===\n 0,\n });\n if (readLimit && atEnd) {\n return Result.fail(\n new UnsafePageBoundaryError({ reason: \"NoInteriorSplit\" }),\n );\n }\n const key = Chunk.lastNonEmpty(scanned);\n if (readLimit)\n return Result.succeed({\n _tag: \"SplitRequired\",\n page,\n continuation: Continuation.Key({ key }),\n splitKey,\n });\n return Result.succeed(\n Chunk.size(scanned) >= SOFT_MAX_SCAN_LENGTH\n ? {\n _tag: \"SplitRecommended\",\n page,\n continuation: Continuation.Key({ key }),\n splitKey,\n }\n : { _tag: \"Continue\", page, key },\n );\n },\n );\n const exhausted = (progress: Option.Option<Progress>): Outcome<Doc> => {\n const finishRange = (\n continuation: Continuation,\n pinned: boolean,\n ): Outcome<Doc> => {\n const split = Option.filter(\n progress,\n (scanned) =>\n pinned &&\n (Chunk.size(scanned) >= SOFT_MAX_SCAN_LENGTH ||\n page.length > request.numItems + 1),\n );\n return Option.match(split, {\n onSome: (scanned): Outcome<Doc> => ({\n _tag: \"SplitRecommended\",\n page,\n continuation,\n splitKey: midpoint(scanned),\n }),\n onNone: () =>\n Continuation.$match(continuation, {\n End: (): Outcome<Doc> => ({ _tag: \"Done\", page }),\n Key: ({ key }): Outcome<Doc> => ({\n _tag: \"Continue\",\n page,\n key,\n }),\n }),\n });\n };\n return Range.$match(request.range, {\n Unpinned: () => finishRange(Continuation.End(), false),\n ThroughEnd: () => finishRange(Continuation.End(), true),\n ThroughKey: ({ key }) => finishRange(Continuation.Key({ key }), true),\n });\n };\n return Match.value(self).pipe(\n Match.tagsExhaustive({\n Reading: ({ progress }) =>\n upstreamStopped\n ? stopped(progress, true)\n : Result.succeed(exhausted(progress)),\n ItemLimit: ({ progress }) =>\n stopped(Option.some(progress), upstreamStopped),\n ReadLimit: ({ progress }) => stopped(Option.some(progress), true),\n }),\n );\n};\n"],"mappings":";;;;;;;;AASA,MAAM,WAAW,OAAO,QAAQ,KAC9B,OAAO,MAAM,iDAAiD,CAChE;;;;AAMA,IAAa,uBAAb,cAA0C,KAAK,YAC7C,sBACF,CAAC,CAEE;CACD,IAAa,UAAkB;EAC7B,OAAO,0EAA0E,KAAK,SAAS;CACjG;AACF;;;;AAKA,IAAa,wBAAb,cAA2C,KAAK,YAC9C,uBACF,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,OAAO;CACT;AACF;;;;AAaA,MAAa,QAAQ,KAAK,WAAkB;;;;AAe5C,MAAa,QAAQ,KAAK,WAAkB;AAkB5C,MAAM,UAAU,KAAK,WAAoB;;;;AAKzC,MAAa,gBACX,UACA,OACA,UAEA,OAAO,QACL,OAAO,aAAa,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,KACtC,OAAO,eAAe,IAAI,qBAAqB,EAAE,SAAS,CAAC,CAAC,CAC9D,IACC,SACC,SAAS,IACL,MAAM,OAAO,OAAO;CAClB,iBAAiB,OAAO,KAAK,IAAI,sBAAsB,CAAC;CACxD,QAAQ,EAAE,aACR,OAAO,QAAQ,QAAQ,UAAU,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,IACD,OAAO,QACL,QAAQ,KAAK;CACX,UAAU;CACV,OAAO,MAAM,OAAO,OAAO;EACzB,iBAAiB,OAAO,KAAK;EAC7B,QAAQ,EAAE,UAAU,OAAO,KAAK,GAAG;CACrC,CAAC;CACD;AACF,CAAC,CACH,CACR;AAMF,MAAM,UACJ,UACA,QAEA,OAAO,MAAM,UAAU;CACrB,cAAc,MAAM,GAAG,GAAG;CAC1B,SAAS,SAAS,MAAM,OAAO,MAAM,GAAG;AAC1C,CAAC;AACH,MAAM,YAAY,aAChB,OAAO,UACL,MAAM,IAAI,UAAU,KAAK,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,SACxD,MAAM,aAAa,QAAQ,CACnC;AAqBF,MAAM,wBAAwB,KAAK,WAAiC;;;;AAKpE,MAAa,gBACX,sBAAsB,QAAQ;CAC5B,MAAM,MAAM,MAAW;CACvB,UAAU,OAAO,KAAK;AACxB,CAAC;;;;AAKH,MAAa,UACX,SACA,MACA,KACA,KACA,cAEA,MAAM,MAAM,IAAI,CAAC,CAAC,KAChB,MAAM,eAAe;CACnB,UAAU,YAAY;EACpB,MAAM,WAAW,OAAO,QAAQ,UAAU,GAAG;EAC7C,MAAM,OAAO,OAAO,MAAM,KAAK;GAC7B,cAAc,QAAQ;GACtB,SAAS,UAAU,MAAM,OAAO,QAAQ,MAAM,KAAK;EACrD,CAAC;EACD,MAAM,wBACJ,sBAAsB,QAAQ;GAC5B;GACA,UAAU,OAAO,KAAK,QAAQ;EAChC,CAAC;EACH,OAAO,YACH,sBAAsB,UAAU;GAAE;GAAM;EAAS,CAAC,IAClD,MAAM,OAAO,QAAQ,OAAO;GAC1B,gBACE,MAAM,KAAK,IAAI,KAAK,QAAQ,WACxB,sBAAsB,UAAU;IAAE;IAAM;GAAS,CAAC,IAClD,gBAAgB;GACtB,YAAY;GACZ,YAAY;EACd,CAAC;CACP;CACA,iBAAiB;CACjB,iBAAiB;AACnB,CAAC,CACH;AASF,MAAM,eAAe,KAAK,WAAyB;;;;AAwBnD,IAAa,0BAAb,cAA6C,KAAK,YAChD,yBACF,CAAC,CAEE;CACD,IAAa,UAAkB;EAC7B,OAAO,MAAM,MAAM,KAAK,MAAM,CAAC,CAAC,KAC9B,MAAM,KACJ,oBACM,6DACR,GACA,MAAM,KACJ,yBACM,gEACR,GACA,MAAM,UACR;CACF;AACF;AAEA,MAAM,uBAAuB;;;;;;AAO7B,MAAa,UACX,SACA,MACA,oBACyD;CACzD,MAAM,OAAO,MAAM,QAAQ,KAAK,IAAI;CACpC,MAAM,WACJ,UACA,cAEA,OAAO,QACL,OAAO,WACL,gBACM,IAAI,wBAAwB,EAAE,QAAQ,aAAa,CAAC,CAC5D,IACC,YAAkE;EACjE,MAAM,WAAW,SAAS,OAAO;EACjC,MAAM,QAAQ,MAAM,OAAO,QAAQ,OAAO;GACxC,gBAAgB;GAChB,kBAAkB;GAClB,aAAa,EAAE,UACbA,MAA2B,KAAK,CAAC,CAAC,SAAS,QAAQ,IAAI,MAAM,MAC7D;EACJ,CAAC;EACD,IAAI,aAAa,OACf,OAAO,OAAO,KACZ,IAAI,wBAAwB,EAAE,QAAQ,kBAAkB,CAAC,CAC3D;EAEF,MAAM,MAAM,MAAM,aAAa,OAAO;EACtC,IAAI,WACF,OAAO,OAAO,QAAQ;GACpB,MAAM;GACN;GACA,cAAc,aAAa,IAAI,EAAE,IAAI,CAAC;GACtC;EACF,CAAC;EACH,OAAO,OAAO,QACZ,MAAM,KAAK,OAAO,KAAK,uBACnB;GACE,MAAM;GACN;GACA,cAAc,aAAa,IAAI,EAAE,IAAI,CAAC;GACtC;EACF,IACA;GAAE,MAAM;GAAY;GAAM;EAAI,CACpC;CACF,CACF;CACF,MAAM,aAAa,aAAoD;EACrE,MAAM,eACJ,cACA,WACiB;GACjB,MAAM,QAAQ,OAAO,OACnB,WACC,YACC,WACC,MAAM,KAAK,OAAO,KAAK,wBACtB,KAAK,SAAS,QAAQ,WAAW,EACvC;GACA,OAAO,OAAO,MAAM,OAAO;IACzB,SAAS,aAA2B;KAClC,MAAM;KACN;KACA;KACA,UAAU,SAAS,OAAO;IAC5B;IACA,cACE,aAAa,OAAO,cAAc;KAChC,YAA0B;MAAE,MAAM;MAAQ;KAAK;KAC/C,MAAM,EAAE,WAAyB;MAC/B,MAAM;MACN;MACA;KACF;IACF,CAAC;GACL,CAAC;EACH;EACA,OAAO,MAAM,OAAO,QAAQ,OAAO;GACjC,gBAAgB,YAAY,aAAa,IAAI,GAAG,KAAK;GACrD,kBAAkB,YAAY,aAAa,IAAI,GAAG,IAAI;GACtD,aAAa,EAAE,UAAU,YAAY,aAAa,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI;EACtE,CAAC;CACH;CACA,OAAO,MAAM,MAAM,IAAI,CAAC,CAAC,KACvB,MAAM,eAAe;EACnB,UAAU,EAAE,eACV,kBACI,QAAQ,UAAU,IAAI,IACtB,OAAO,QAAQ,UAAU,QAAQ,CAAC;EACxC,YAAY,EAAE,eACZ,QAAQ,OAAO,KAAK,QAAQ,GAAG,eAAe;EAChD,YAAY,EAAE,eAAe,QAAQ,OAAO,KAAK,QAAQ,GAAG,IAAI;CAClE,CAAC,CACH;AACF"}
|
|
1
|
+
{"version":3,"file":"QueryStreamPagination.js","names":["QueryStreamKeyValues.Order"],"sources":["../src/QueryStreamPagination.ts"],"sourcesContent":["import * as Chunk from \"effect/Chunk\";\nimport * as Data from \"effect/Data\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport type * as QueryStreamKey from \"./QueryStreamKey.js\";\nimport * as QueryStreamKeyValues from \"./QueryStreamKeyValues.js\";\n\nconst PageSize = Schema.Natural.pipe(\n Schema.brand(\"~@confect/server/QueryStreamPagination/PageSize\"),\n);\ntype PageSize = typeof PageSize.Type;\n\n/**\n * @experimental\n */\nexport class InvalidPageSizeError extends Data.TaggedError(\n \"InvalidPageSizeError\",\n)<{\n readonly numItems: number;\n}> {\n override get message(): string {\n return `QueryStream.paginate: numItems must be a nonnegative integer (received ${this.numItems})`;\n }\n}\n\n/**\n * @experimental\n */\nexport class EmptyInitialPageError extends Data.TaggedError(\n \"EmptyInitialPageError\",\n) {\n override get message(): string {\n return \"QueryStream.paginate: numItems of 0 with a null cursor is not supported\";\n }\n}\n\n/**\n * @experimental\n */\nexport type Range = Data.TaggedEnum<{\n Unpinned: {};\n ThroughKey: { readonly key: QueryStreamKey.Complete };\n ThroughEnd: {};\n}>;\n/**\n * @experimental\n */\nexport const Range = Data.taggedEnum<Range>();\n\n/**\n * @experimental\n */\nexport type Start = Data.TaggedEnum<{\n Beginning: {};\n After: {\n readonly key: QueryStreamKey.Complete;\n readonly cursor: string;\n };\n}>;\n/**\n * @experimental\n */\nexport const Start = Data.taggedEnum<Start>();\n\n/**\n * @experimental\n */\nexport interface ScanRequest {\n readonly numItems: PageSize;\n readonly after: Option.Option<QueryStreamKey.Complete>;\n readonly range: Range;\n}\n\n/**\n * @experimental\n */\nexport type Request = Data.TaggedEnum<{\n Unchanged: { readonly cursor: string };\n Scan: ScanRequest;\n}>;\nconst Request = Data.taggedEnum<Request>();\n\n/**\n * @experimental\n */\nexport const parseRequest = (\n numItems: number,\n start: Start,\n range: Range,\n): Result.Result<Request, InvalidPageSizeError | EmptyInitialPageError> =>\n Result.flatMap(\n Schema.decodeResult(PageSize)(numItems).pipe(\n Result.mapError(() => new InvalidPageSizeError({ numItems })),\n ),\n (size): Result.Result<Request, EmptyInitialPageError> =>\n size === 0\n ? Start.$match(start, {\n Beginning: () => Result.fail(new EmptyInitialPageError()),\n After: ({ cursor }) =>\n Result.succeed(Request.Unchanged({ cursor })),\n })\n : Result.succeed(\n Request.Scan({\n numItems: size,\n after: Start.$match(start, {\n Beginning: () => Option.none(),\n After: ({ key }) => Option.some(key),\n }),\n range,\n }),\n ),\n );\n\n/**\n * A nonempty scan, including filtered markers.\n */\ntype Progress = Chunk.NonEmptyChunk<QueryStreamKey.Complete>;\nconst append = (\n progress: Option.Option<Progress>,\n key: QueryStreamKey.Complete,\n): Progress =>\n Option.match(progress, {\n onNone: () => Chunk.of(key),\n onSome: (keys) => Chunk.append(keys, key),\n });\nconst midpoint = (progress: Progress): QueryStreamKey.Complete =>\n Option.getOrElse(\n Chunk.get(progress, Math.floor((Chunk.size(progress) - 1) / 2)),\n () => Chunk.headNonEmpty(progress),\n );\n\ninterface Stopped<Doc> {\n readonly page: Chunk.Chunk<Doc>;\n readonly progress: Progress;\n}\n\n/**\n * @experimental\n */\nexport type QueryStreamPagination<Doc> = Data.TaggedEnum<{\n Reading: {\n readonly page: Chunk.Chunk<Doc>;\n readonly progress: Option.Option<Progress>;\n };\n ItemLimit: Stopped<Doc>;\n ReadLimit: Stopped<Doc>;\n}>;\ninterface PaginationDefinition extends Data.TaggedEnum.WithGenerics<1> {\n readonly taggedEnum: QueryStreamPagination<this[\"A\"]>;\n}\nconst QueryStreamPagination = Data.taggedEnum<PaginationDefinition>();\n\n/**\n * @experimental\n */\nexport const initial = <Doc>(): QueryStreamPagination<Doc> =>\n QueryStreamPagination.Reading({\n page: Chunk.empty<Doc>(),\n progress: Option.none(),\n });\n\n/**\n * @experimental\n */\nexport const record = <Doc>(\n request: ScanRequest,\n self: QueryStreamPagination<Doc>,\n doc: Option.Option<Doc>,\n key: QueryStreamKey.Complete,\n readLimit: boolean,\n): QueryStreamPagination<Doc> =>\n Match.value(self).pipe(\n Match.tagsExhaustive({\n Reading: (reading) => {\n const progress = append(reading.progress, key);\n const page = Option.match(doc, {\n onNone: () => reading.page,\n onSome: (value) => Chunk.append(reading.page, value),\n });\n const continueReading = () =>\n QueryStreamPagination.Reading({\n page,\n progress: Option.some(progress),\n });\n return readLimit\n ? QueryStreamPagination.ReadLimit({ page, progress })\n : Range.$match(request.range, {\n Unpinned: () =>\n Chunk.size(page) >= request.numItems\n ? QueryStreamPagination.ItemLimit({ page, progress })\n : continueReading(),\n ThroughKey: continueReading,\n ThroughEnd: continueReading,\n });\n },\n ItemLimit: () => self,\n ReadLimit: () => self,\n }),\n );\n\n/**\n * @experimental\n */\nexport type Continuation = Data.TaggedEnum<{\n End: {};\n Key: { readonly key: QueryStreamKey.Complete };\n}>;\nconst Continuation = Data.taggedEnum<Continuation>();\n\ninterface Split<Doc> {\n readonly page: ReadonlyArray<Doc>;\n readonly continuation: Continuation;\n readonly splitKey: QueryStreamKey.Complete;\n}\n\n/**\n * @experimental\n */\nexport type Outcome<Doc> = Data.TaggedEnum<{\n Done: { readonly page: ReadonlyArray<Doc> };\n Continue: {\n readonly page: ReadonlyArray<Doc>;\n readonly key: QueryStreamKey.Complete;\n };\n SplitRequired: Split<Doc>;\n SplitRecommended: Split<Doc>;\n}>;\n\n/**\n * @experimental\n */\nexport class UnsafePageBoundaryError extends Data.TaggedError(\n \"UnsafePageBoundaryError\",\n)<{\n readonly reason: \"NoProgress\" | \"NoInteriorSplit\";\n}> {\n override get message(): string {\n return Match.value(this.reason).pipe(\n Match.when(\n \"NoProgress\",\n () => \"The read budget stopped the page before any key was scanned\",\n ),\n Match.when(\n \"NoInteriorSplit\",\n () => \"The read budget stopped the page without an interior split key\",\n ),\n Match.exhaustive,\n );\n }\n}\n\nconst SOFT_MAX_SCAN_LENGTH = 16000;\n\n/**\n * Decide the page result without reading a stream or serializing a cursor.\n *\n * @experimental\n */\nexport const finish = <Doc>(\n request: ScanRequest,\n self: QueryStreamPagination<Doc>,\n upstreamStopped: boolean,\n): Result.Result<Outcome<Doc>, UnsafePageBoundaryError> => {\n const page = Chunk.toArray(self.page);\n const stopped = (\n progress: Option.Option<Progress>,\n readLimit: boolean,\n ): Result.Result<Outcome<Doc>, UnsafePageBoundaryError> =>\n Result.flatMap(\n Result.fromOption(\n progress,\n () => new UnsafePageBoundaryError({ reason: \"NoProgress\" }),\n ),\n (scanned): Result.Result<Outcome<Doc>, UnsafePageBoundaryError> => {\n const splitKey = midpoint(scanned);\n const atEnd = Range.$match(request.range, {\n Unpinned: () => false,\n ThroughEnd: () => false,\n ThroughKey: ({ key }) =>\n QueryStreamKeyValues.Order(\"asc\")(splitKey.values, key.values) ===\n 0,\n });\n if (readLimit && atEnd) {\n return Result.fail(\n new UnsafePageBoundaryError({ reason: \"NoInteriorSplit\" }),\n );\n }\n const key = Chunk.lastNonEmpty(scanned);\n if (readLimit)\n return Result.succeed({\n _tag: \"SplitRequired\",\n page,\n continuation: Continuation.Key({ key }),\n splitKey,\n });\n return Result.succeed(\n Chunk.size(scanned) >= SOFT_MAX_SCAN_LENGTH\n ? {\n _tag: \"SplitRecommended\",\n page,\n continuation: Continuation.Key({ key }),\n splitKey,\n }\n : { _tag: \"Continue\", page, key },\n );\n },\n );\n const exhausted = (progress: Option.Option<Progress>): Outcome<Doc> => {\n const finishRange = (\n continuation: Continuation,\n pinned: boolean,\n ): Outcome<Doc> => {\n const split = Option.filter(\n progress,\n (scanned) =>\n pinned &&\n (Chunk.size(scanned) >= SOFT_MAX_SCAN_LENGTH ||\n page.length > request.numItems + 1),\n );\n return Option.match(split, {\n onSome: (scanned): Outcome<Doc> => ({\n _tag: \"SplitRecommended\",\n page,\n continuation,\n splitKey: midpoint(scanned),\n }),\n onNone: () =>\n Continuation.$match(continuation, {\n End: (): Outcome<Doc> => ({ _tag: \"Done\", page }),\n Key: ({ key }): Outcome<Doc> => ({\n _tag: \"Continue\",\n page,\n key,\n }),\n }),\n });\n };\n return Range.$match(request.range, {\n Unpinned: () => finishRange(Continuation.End(), false),\n ThroughEnd: () => finishRange(Continuation.End(), true),\n ThroughKey: ({ key }) => finishRange(Continuation.Key({ key }), true),\n });\n };\n return Match.value(self).pipe(\n Match.tagsExhaustive({\n Reading: ({ progress }) =>\n upstreamStopped\n ? stopped(progress, true)\n : Result.succeed(exhausted(progress)),\n ItemLimit: ({ progress }) =>\n stopped(Option.some(progress), upstreamStopped),\n ReadLimit: ({ progress }) => stopped(Option.some(progress), true),\n }),\n );\n};\n"],"mappings":"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"}
|
|
@@ -14,8 +14,9 @@ export interface QueryStreamReadBudget {
|
|
|
14
14
|
readonly getReadCounts: Effect.Effect<ReadCounts>;
|
|
15
15
|
/**
|
|
16
16
|
* Returns a stream that records reads against this budget and stops
|
|
17
|
-
* requesting further batches once exhausted
|
|
18
|
-
*
|
|
17
|
+
* requesting further batches once exhausted, except for one limit-boundary
|
|
18
|
+
* lookahead to detect completion. Apply directly to the document source
|
|
19
|
+
* before buffering, filtering, or combining its output.
|
|
19
20
|
*/
|
|
20
21
|
readonly accountFor: (encodedDocuments: Stream.Stream<unknown>) => Stream.Stream<unknown>;
|
|
21
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryStreamReadBudget.d.ts","sourceRoot":"","sources":["../src/QueryStreamReadBudget.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClD
|
|
1
|
+
{"version":3,"file":"QueryStreamReadBudget.d.ts","sourceRoot":"","sources":["../src/QueryStreamReadBudget.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,CACnB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CAC7B;AAMD;;GAEG;AACH,eAAO,MAAM,MAAM;;;EAGjB,CAAC;AACH;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;;;;AAExC;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,2BAEzC;IACA,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;CACpC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AASD;;GAEG;AACH,eAAO,MAAM,qBAAqB,+DAEjC,CAAC;AA2BF;;GAEG;AACH,eAAO,MAAM,IAAI;;;wDAmEf,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
2
|
import * as Context from "effect/Context";
|
|
3
|
+
import * as Data from "effect/Data";
|
|
3
4
|
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Array from "effect/Array";
|
|
4
6
|
import * as Schema from "effect/Schema";
|
|
5
7
|
import * as Option from "effect/Option";
|
|
6
8
|
import { getDocumentSize } from "convex/values";
|
|
7
|
-
import * as Array from "effect/Array";
|
|
8
|
-
import * as Data from "effect/Data";
|
|
9
9
|
import * as Stream from "effect/Stream";
|
|
10
10
|
import * as Tuple from "effect/Tuple";
|
|
11
11
|
import * as Cause from "effect/Cause";
|
|
@@ -60,7 +60,10 @@ const make = Effect.fnUntraced(function* (limits) {
|
|
|
60
60
|
bytesRead: 0
|
|
61
61
|
}));
|
|
62
62
|
const accountForPull = unlimited ? (pull) => Effect.uninterruptibleMask((restore) => Effect.tap(restore(pull), (documents) => SynchronizedRef.update(stateRef, (state) => State.Active(record(state, documents))))) : (pull) => SynchronizedRef.modifyEffect(stateRef, (state) => Effect.gen(function* () {
|
|
63
|
-
if (isExhausted(state, limits))
|
|
63
|
+
if (isExhausted(state, limits)) {
|
|
64
|
+
const counts = State.$is("Active")(state) && !Option.exists(limits.maximumRowsRead, (limit) => state.rowsRead > limit) && !Option.exists(limits.maximumBytesRead, (limit) => state.bytesRead > limit) ? record(state, yield* pull) : readCounts(state);
|
|
65
|
+
return Tuple.make(Option.none(), State.Stopped(counts));
|
|
66
|
+
}
|
|
64
67
|
const documents = yield* pull;
|
|
65
68
|
return Tuple.make(Option.some(documents), State.Active(record(state, documents)));
|
|
66
69
|
})).pipe(Effect.flatMap(Option.match({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryStreamReadBudget.js","names":[],"sources":["../src/QueryStreamReadBudget.ts"],"sourcesContent":["import type { GenericDocument } from \"convex/server\";\nimport { getDocumentSize } from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Cause from \"effect/Cause\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport type * as Pull from \"effect/Pull\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\nimport * as Tuple from \"effect/Tuple\";\n\n/**\n * @experimental\n */\nexport interface QueryStreamReadBudget {\n readonly isUnlimited: Effect.Effect<boolean>;\n readonly isStopped: Effect.Effect<boolean>;\n readonly isExhausted: Effect.Effect<boolean>;\n readonly getReadCounts: Effect.Effect<ReadCounts>;\n /**\n * Returns a stream that records reads against this budget and stops\n * requesting further batches once exhausted. Apply directly to the document\n *
|
|
1
|
+
{"version":3,"file":"QueryStreamReadBudget.js","names":[],"sources":["../src/QueryStreamReadBudget.ts"],"sourcesContent":["import type { GenericDocument } from \"convex/server\";\nimport { getDocumentSize } from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Cause from \"effect/Cause\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport type * as Pull from \"effect/Pull\";\nimport * as Schema from \"effect/Schema\";\nimport * as Stream from \"effect/Stream\";\nimport * as SynchronizedRef from \"effect/SynchronizedRef\";\nimport * as Tuple from \"effect/Tuple\";\n\n/**\n * @experimental\n */\nexport interface QueryStreamReadBudget {\n readonly isUnlimited: Effect.Effect<boolean>;\n readonly isStopped: Effect.Effect<boolean>;\n readonly isExhausted: Effect.Effect<boolean>;\n readonly getReadCounts: Effect.Effect<ReadCounts>;\n /**\n * Returns a stream that records reads against this budget and stops\n * requesting further batches once exhausted, except for one limit-boundary\n * lookahead to detect completion. Apply directly to the document source\n * before buffering, filtering, or combining its output.\n */\n readonly accountFor: (\n encodedDocuments: Stream.Stream<unknown>,\n ) => Stream.Stream<unknown>;\n}\n\nconst ReadLimit = Schema.Natural.pipe(\n Schema.brand(\"~@confect/server/QueryStreamReadBudget/ReadLimit\"),\n);\n\n/**\n * @experimental\n */\nexport const Limits = Schema.Struct({\n maximumRowsRead: Schema.OptionFromOptionalKey(ReadLimit),\n maximumBytesRead: Schema.OptionFromOptionalKey(ReadLimit),\n});\n/**\n * @experimental\n */\nexport type Limits = typeof Limits.Type;\n\n/**\n * @experimental\n */\nexport class InvalidReadLimitError extends Data.TaggedError(\n \"InvalidReadLimitError\",\n)<{\n readonly cause: Schema.SchemaError;\n}> {\n override get message(): string {\n return `Invalid read limits: ${this.cause.message}`;\n }\n}\n\n/**\n * @experimental\n */\nexport interface ReadCounts {\n readonly rowsRead: number;\n readonly bytesRead: number;\n}\n\ntype State = Data.TaggedEnum<{\n Active: ReadCounts;\n Stopped: ReadCounts;\n}>;\n\nconst State = Data.taggedEnum<State>();\n\n/**\n * @experimental\n */\nexport const QueryStreamReadBudget = Context.Service<QueryStreamReadBudget>(\n \"@confect/server/QueryStreamReadBudget\",\n);\n\nconst isExhausted = (state: State, limits: Limits): boolean =>\n State.$match(state, {\n Stopped: () => true,\n Active: ({ rowsRead, bytesRead }) =>\n Option.exists(limits.maximumRowsRead, (limit) => rowsRead >= limit) ||\n Option.exists(limits.maximumBytesRead, (limit) => bytesRead >= limit),\n });\n\nconst readCounts = ({ rowsRead, bytesRead }: ReadCounts): ReadCounts => ({\n rowsRead,\n bytesRead,\n});\n\nconst record = (\n counts: ReadCounts,\n documents: Array.NonEmptyReadonlyArray<unknown>,\n): ReadCounts => ({\n rowsRead: counts.rowsRead + documents.length,\n bytesRead: Array.reduce(\n documents,\n counts.bytesRead,\n (bytes, document) => bytes + getDocumentSize(document as GenericDocument),\n ),\n});\n\n/**\n * @experimental\n */\nexport const make = Effect.fnUntraced(function* (\n limits: Limits,\n): Effect.fn.Return<QueryStreamReadBudget> {\n const unlimited =\n Option.isNone(limits.maximumRowsRead) &&\n Option.isNone(limits.maximumBytesRead);\n const stateRef = yield* SynchronizedRef.make<State>(\n State.Active({ rowsRead: 0, bytesRead: 0 }),\n );\n const accountForPull: (\n pull: Pull.Pull<Array.NonEmptyReadonlyArray<unknown>>,\n ) => Pull.Pull<Array.NonEmptyReadonlyArray<unknown>> = unlimited\n ? (pull) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.tap(restore(pull), (documents) =>\n SynchronizedRef.update(stateRef, (state) =>\n State.Active(record(state, documents)),\n ),\n ),\n )\n : (pull) =>\n SynchronizedRef.modifyEffect(stateRef, (state) =>\n Effect.gen(function* () {\n if (isExhausted(state, limits)) {\n const canProbeEnd =\n State.$is(\"Active\")(state) &&\n !Option.exists(\n limits.maximumRowsRead,\n (limit) => state.rowsRead > limit,\n ) &&\n !Option.exists(\n limits.maximumBytesRead,\n (limit) => state.bytesRead > limit,\n );\n // Iterators expose completion only through a pull. Count a\n // lookahead row, but never publish it beyond either limit.\n const counts = canProbeEnd\n ? record(state, yield* pull)\n : readCounts(state);\n return Tuple.make(Option.none(), State.Stopped(counts));\n }\n const documents = yield* pull;\n return Tuple.make(\n Option.some(documents),\n State.Active(record(state, documents)),\n );\n }),\n ).pipe(\n Effect.flatMap(\n Option.match({\n onNone: () => Cause.done(),\n onSome: Effect.succeed,\n }),\n ),\n );\n return QueryStreamReadBudget.of({\n isUnlimited: Effect.succeed(unlimited),\n isStopped: Effect.map(SynchronizedRef.get(stateRef), State.$is(\"Stopped\")),\n isExhausted: Effect.map(SynchronizedRef.get(stateRef), (state) =>\n isExhausted(state, limits),\n ),\n getReadCounts: Effect.map(SynchronizedRef.get(stateRef), readCounts),\n accountFor: (encodedDocuments) =>\n Stream.transformPull(encodedDocuments, (pull) =>\n Effect.succeed(accountForPull(pull)),\n ).pipe(Stream.scoped),\n });\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiCA,MAAM,YAAY,OAAO,QAAQ,KAC/B,OAAO,MAAM,kDAAkD,CACjE;;;;AAKA,MAAa,SAAS,OAAO,OAAO;CAClC,iBAAiB,OAAO,sBAAsB,SAAS;CACvD,kBAAkB,OAAO,sBAAsB,SAAS;AAC1D,CAAC;;;;AASD,IAAa,wBAAb,cAA2C,KAAK,YAC9C,uBACF,CAAC,CAEE;CACD,IAAa,UAAkB;EAC7B,OAAO,wBAAwB,KAAK,MAAM;CAC5C;AACF;AAeA,MAAM,QAAQ,KAAK,WAAkB;;;;AAKrC,MAAa,wBAAwB,QAAQ,QAC3C,uCACF;AAEA,MAAM,eAAe,OAAc,WACjC,MAAM,OAAO,OAAO;CAClB,eAAe;CACf,SAAS,EAAE,UAAU,gBACnB,OAAO,OAAO,OAAO,kBAAkB,UAAU,YAAY,KAAK,KAClE,OAAO,OAAO,OAAO,mBAAmB,UAAU,aAAa,KAAK;AACxE,CAAC;AAEH,MAAM,cAAc,EAAE,UAAU,iBAAyC;CACvE;CACA;AACF;AAEA,MAAM,UACJ,QACA,eACgB;CAChB,UAAU,OAAO,WAAW,UAAU;CACtC,WAAW,MAAM,OACf,WACA,OAAO,YACN,OAAO,aAAa,QAAQ,gBAAgB,QAA2B,CAC1E;AACF;;;;AAKA,MAAa,OAAO,OAAO,WAAW,WACpC,QACyC;CACzC,MAAM,YACJ,OAAO,OAAO,OAAO,eAAe,KACpC,OAAO,OAAO,OAAO,gBAAgB;CACvC,MAAM,WAAW,OAAO,gBAAgB,KACtC,MAAM,OAAO;EAAE,UAAU;EAAG,WAAW;CAAE,CAAC,CAC5C;CACA,MAAM,iBAEiD,aAClD,SACC,OAAO,qBAAqB,YAC1B,OAAO,IAAI,QAAQ,IAAI,IAAI,cACzB,gBAAgB,OAAO,WAAW,UAChC,MAAM,OAAO,OAAO,OAAO,SAAS,CAAC,CACvC,CACF,CACF,KACD,SACC,gBAAgB,aAAa,WAAW,UACtC,OAAO,IAAI,aAAa;EACtB,IAAI,YAAY,OAAO,MAAM,GAAG;GAa9B,MAAM,SAXJ,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,KACzB,CAAC,OAAO,OACN,OAAO,kBACN,UAAU,MAAM,WAAW,KAC9B,KACA,CAAC,OAAO,OACN,OAAO,mBACN,UAAU,MAAM,YAAY,KAC/B,IAIE,OAAO,OAAO,OAAO,IAAI,IACzB,WAAW,KAAK;GACpB,OAAO,MAAM,KAAK,OAAO,KAAK,GAAG,MAAM,QAAQ,MAAM,CAAC;EACxD;EACA,MAAM,YAAY,OAAO;EACzB,OAAO,MAAM,KACX,OAAO,KAAK,SAAS,GACrB,MAAM,OAAO,OAAO,OAAO,SAAS,CAAC,CACvC;CACF,CAAC,CACH,CAAC,CAAC,KACA,OAAO,QACL,OAAO,MAAM;EACX,cAAc,MAAM,KAAK;EACzB,QAAQ,OAAO;CACjB,CAAC,CACH,CACF;CACN,OAAO,sBAAsB,GAAG;EAC9B,aAAa,OAAO,QAAQ,SAAS;EACrC,WAAW,OAAO,IAAI,gBAAgB,IAAI,QAAQ,GAAG,MAAM,IAAI,SAAS,CAAC;EACzE,aAAa,OAAO,IAAI,gBAAgB,IAAI,QAAQ,IAAI,UACtD,YAAY,OAAO,MAAM,CAC3B;EACA,eAAe,OAAO,IAAI,gBAAgB,IAAI,QAAQ,GAAG,UAAU;EACnE,aAAa,qBACX,OAAO,cAAc,mBAAmB,SACtC,OAAO,QAAQ,eAAe,IAAI,CAAC,CACrC,CAAC,CAAC,KAAK,OAAO,MAAM;CACxB,CAAC;AACH,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
-
import * as Context from "effect/Context";
|
|
3
|
-
import * as Layer from "effect/Layer";
|
|
4
2
|
import * as Ref from "@confect/core/Ref";
|
|
3
|
+
import * as Context from "effect/Context";
|
|
5
4
|
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
6
|
//#region src/QueryTransactionContext.ts
|
|
7
7
|
var QueryTransactionContext_exports = /* @__PURE__ */ __exportAll({
|
|
8
8
|
QueryTransactionContext: () => QueryTransactionContext,
|
|
@@ -4,24 +4,24 @@ import * as Data from "effect/Data";
|
|
|
4
4
|
import * as Effect from "effect/Effect";
|
|
5
5
|
import * as Layer from "effect/Layer";
|
|
6
6
|
import * as Schema from "effect/Schema";
|
|
7
|
-
import * as Auth from "./Auth";
|
|
8
|
-
import * as DatabaseReader from "./DatabaseReader";
|
|
9
|
-
import type * as DatabaseSchema from "./DatabaseSchema";
|
|
10
|
-
import * as DatabaseWriter from "./DatabaseWriter";
|
|
11
|
-
import type * as DataModel from "./DataModel";
|
|
12
|
-
import * as ExecutionMetadata from "./ExecutionMetadata";
|
|
13
|
-
import * as RequestMetadata from "./RequestMetadata";
|
|
14
|
-
import * as TransactionMetadata from "./TransactionMetadata";
|
|
15
|
-
import * as MutationCtx from "./MutationCtx";
|
|
16
|
-
import * as MutationRunner from "./MutationRunner";
|
|
17
|
-
import * as MutationTransactionContext from "./MutationTransactionContext";
|
|
18
|
-
import * as QueryRunner from "./QueryRunner";
|
|
19
|
-
import * as QueryTransactionContext from "./QueryTransactionContext";
|
|
20
|
-
import * as RegisteredFunction from "./RegisteredFunction";
|
|
21
|
-
import type * as FunctionRegistryItem from "./FunctionRegistryItem";
|
|
22
|
-
import type * as ResolvedMiddleware from "./ResolvedMiddleware";
|
|
23
|
-
import * as Scheduler from "./Scheduler";
|
|
24
|
-
import type * as Handler from "./Handler";
|
|
7
|
+
import * as Auth from "./Auth.js";
|
|
8
|
+
import * as DatabaseReader from "./DatabaseReader.js";
|
|
9
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
10
|
+
import * as DatabaseWriter from "./DatabaseWriter.js";
|
|
11
|
+
import type * as DataModel from "./DataModel.js";
|
|
12
|
+
import * as ExecutionMetadata from "./ExecutionMetadata.js";
|
|
13
|
+
import * as RequestMetadata from "./RequestMetadata.js";
|
|
14
|
+
import * as TransactionMetadata from "./TransactionMetadata.js";
|
|
15
|
+
import * as MutationCtx from "./MutationCtx.js";
|
|
16
|
+
import * as MutationRunner from "./MutationRunner.js";
|
|
17
|
+
import * as MutationTransactionContext from "./MutationTransactionContext.js";
|
|
18
|
+
import * as QueryRunner from "./QueryRunner.js";
|
|
19
|
+
import * as QueryTransactionContext from "./QueryTransactionContext.js";
|
|
20
|
+
import * as RegisteredFunction from "./RegisteredFunction.js";
|
|
21
|
+
import type * as FunctionRegistryItem from "./FunctionRegistryItem.js";
|
|
22
|
+
import type * as ResolvedMiddleware from "./ResolvedMiddleware.js";
|
|
23
|
+
import * as Scheduler from "./Scheduler.js";
|
|
24
|
+
import type * as Handler from "./Handler.js";
|
|
25
25
|
export type Definition = Data.TaggedEnum<{
|
|
26
26
|
PublicQuery: ReturnType<typeof queryFunction>;
|
|
27
27
|
InternalQuery: ReturnType<typeof queryFunction>;
|
|
@@ -310,7 +310,7 @@ declare const queryFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProp
|
|
|
310
310
|
returns: import("convex/values").Validator<any, any, any>;
|
|
311
311
|
handler: (ctx: GenericQueryCtx<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>, actualArgs: ConvexArgs) => Promise<ConvexReturns>;
|
|
312
312
|
};
|
|
313
|
-
export declare const mutationLayer: <Schema extends DatabaseSchema.AnyWithProps>(schema: Schema, ctx: GenericMutationCtx<DataModel.ToConvex<DataModel.FromSchema<Schema>>>) => Layer.Layer<DatabaseReader.DatabaseReaderService<Schema, {}> | DatabaseWriter.DatabaseWriterService<Schema, {}> | ExecutionMetadata.ExecutionMetadata | MutationTransactionContext.MutationTransactionContext | QueryTransactionContext.QueryTransactionContext | RequestMetadata.RequestMetadata | import("./Storage").Storage | TransactionMetadata.TransactionMetadata | {
|
|
313
|
+
export declare const mutationLayer: <Schema extends DatabaseSchema.AnyWithProps>(schema: Schema, ctx: GenericMutationCtx<DataModel.ToConvex<DataModel.FromSchema<Schema>>>) => Layer.Layer<DatabaseReader.DatabaseReaderService<Schema, {}> | DatabaseWriter.DatabaseWriterService<Schema, {}> | ExecutionMetadata.ExecutionMetadata | MutationTransactionContext.MutationTransactionContext | QueryTransactionContext.QueryTransactionContext | RequestMetadata.RequestMetadata | import("./Storage.js").Storage | TransactionMetadata.TransactionMetadata | {
|
|
314
314
|
runMutation: {
|
|
315
315
|
<Mutation extends import("@confect/core/Ref").AnyMutation>(mutation: Mutation, ...args: [...import("@confect/core/Ref").OptionalArgs<Mutation>, options?: undefined]): Effect.Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | Schema.SchemaError>;
|
|
316
316
|
<Mutation extends import("@confect/core/Ref").AnyMutation>(mutation: Mutation, args: import("@confect/core/Ref").Args<Mutation>, options: MutationRunner.Options | undefined): Effect.Effect<import("@confect/core/Ref").Returns<Mutation>, import("@confect/core/Ref").Error<Mutation> | Schema.SchemaError, MutationTransactionContext.MutationTransactionContext>;
|
|
@@ -326,7 +326,7 @@ export declare const mutationLayer: <Schema extends DatabaseSchema.AnyWithProps>
|
|
|
326
326
|
}): Effect.Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | Schema.SchemaError, MutationTransactionContext.MutationTransactionContext>;
|
|
327
327
|
<Query extends import("@confect/core/Ref").AnyQuery>(query: Query, args: import("@confect/core/Ref").Args<Query>, options: QueryRunner.Options | undefined): Effect.Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | Schema.SchemaError, QueryTransactionContext.QueryTransactionContext | MutationTransactionContext.MutationTransactionContext>;
|
|
328
328
|
};
|
|
329
|
-
} | Scheduler.ForScope<DatabaseSchema.Scope<Schema>> | import("./StorageReader").ForScope<DatabaseSchema.Scope<Schema>> | import("./StorageWriter").ForScope<DatabaseSchema.Scope<Schema>> | Auth.ForTarget<Schema["target"]> | MutationCtx.MutationCtx<DataModel.ToConvex<DataModel.FromSchema<Schema>>, DatabaseSchema.Scope<Schema>>, never, never>;
|
|
329
|
+
} | Scheduler.ForScope<DatabaseSchema.Scope<Schema>> | import("./StorageReader.js").ForScope<DatabaseSchema.Scope<Schema>> | import("./StorageWriter.js").ForScope<DatabaseSchema.Scope<Schema>> | Auth.ForTarget<Schema["target"]> | MutationCtx.MutationCtx<DataModel.ToConvex<DataModel.FromSchema<Schema>>, DatabaseSchema.Scope<Schema>>, never, never>;
|
|
330
330
|
export type MutationServices<Schema extends DatabaseSchema.AnyWithProps> = Handler.MutationServices<Schema>;
|
|
331
331
|
declare const mutationFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, }: {
|
|
332
332
|
databaseSchema: DatabaseSchema_;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegisteredConvexFunction.d.ts","sourceRoot":"","sources":["../src/RegisteredConvexFunction.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAMrB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"RegisteredConvexFunction.d.ts","sourceRoot":"","sources":["../src/RegisteredConvexFunction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { layer } from "./MutationTransactionContext.js";
|
|
3
|
+
import { layer as layer$1 } from "./MutationRunner.js";
|
|
4
|
+
import { layer as layer$2 } from "./QueryTransactionContext.js";
|
|
5
|
+
import { layer as layer$3 } from "./QueryRunner.js";
|
|
6
|
+
import { layer as layer$4 } from "./Scheduler.js";
|
|
2
7
|
import { layerForTarget } from "./Auth.js";
|
|
3
|
-
import { layer } from "./ConvexConfigProvider.js";
|
|
4
|
-
import { layer as layer$
|
|
5
|
-
import { layer as layer$
|
|
6
|
-
import { layer as layer$
|
|
7
|
-
import { layer as layer$
|
|
8
|
-
import { layer as layer$
|
|
9
|
-
import { layer as layer$
|
|
10
|
-
import { layer as layer$
|
|
11
|
-
import { layer as layer$8 } from "./MutationRunner.js";
|
|
12
|
-
import { layer as layer$9 } from "./QueryCtx.js";
|
|
13
|
-
import { layer as layer$10 } from "./QueryTransactionContext.js";
|
|
14
|
-
import { layer as layer$11 } from "./QueryRunner.js";
|
|
15
|
-
import { layer as layer$12 } from "./Scheduler.js";
|
|
8
|
+
import { layer as layer$5 } from "./ConvexConfigProvider.js";
|
|
9
|
+
import { layer as layer$6 } from "./DatabaseReader.js";
|
|
10
|
+
import { layer as layer$7 } from "./DatabaseWriter.js";
|
|
11
|
+
import { layer as layer$8 } from "./ExecutionMetadata.js";
|
|
12
|
+
import { layer as layer$9 } from "./RequestMetadata.js";
|
|
13
|
+
import { layer as layer$10 } from "./TransactionMetadata.js";
|
|
14
|
+
import { layer as layer$11 } from "./MutationCtx.js";
|
|
15
|
+
import { layer as layer$12 } from "./QueryCtx.js";
|
|
16
16
|
import { StorageWriter } from "./StorageWriter.js";
|
|
17
17
|
import { actionFunctionBase, actionLayer, applyMiddleware, combineErrorSchemas, runHandlerPromise, storageLayer } from "./RegisteredFunction.js";
|
|
18
|
-
import * as
|
|
18
|
+
import * as Data from "effect/Data";
|
|
19
19
|
import * as Effect from "effect/Effect";
|
|
20
|
+
import * as Layer from "effect/Layer";
|
|
21
|
+
import * as Duration from "effect/Duration";
|
|
20
22
|
import { actionGeneric, internalActionGeneric, internalMutationGeneric, internalQueryGeneric, mutationGeneric, queryGeneric } from "convex/server";
|
|
21
23
|
import * as Schema from "effect/Schema";
|
|
22
24
|
import { pipe } from "effect/Function";
|
|
23
25
|
import * as Match from "effect/Match";
|
|
24
26
|
import { compileArgsSchema, compileReturnsSchema } from "@confect/core/SchemaToValidator";
|
|
25
27
|
import * as Clock from "effect/Clock";
|
|
26
|
-
import * as Data from "effect/Data";
|
|
27
|
-
import * as Duration from "effect/Duration";
|
|
28
28
|
import * as EffectScheduler from "effect/Scheduler";
|
|
29
29
|
//#region src/RegisteredConvexFunction.ts
|
|
30
30
|
var RegisteredConvexFunction_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -118,11 +118,11 @@ const queryFunction = ({ databaseSchema, name, functionVisibility, args, returns
|
|
|
118
118
|
functionType: "query",
|
|
119
119
|
functionVisibility,
|
|
120
120
|
args: decodedArgs
|
|
121
|
-
}).pipe(Effect.provide(Layer.mergeAll(layer$
|
|
121
|
+
}).pipe(Effect.provide(Layer.mergeAll(layer$6(databaseSchema, ctx.db), layer$8(ctx.meta), layer$10(ctx.meta), layer$2(ctx), layerForTarget(databaseSchema.target, ctx.auth), storageLayer(ctx.storage), layer$3(ctx.runQuery), layer$12(ctx, databaseSchema.target.scope), layer$5)));
|
|
122
122
|
return yield* pipe(decodedReturns, Schema.encodeEffect(returns), Effect.catchTag("SchemaError", Effect.die));
|
|
123
123
|
}).pipe(Effect.provideService(Clock.Clock, queryClock), runHandlerPromise(combineErrorSchemas(error, resolvedMiddlewares), { scheduler: new EffectScheduler.MixedScheduler("sync") }))
|
|
124
124
|
});
|
|
125
|
-
const mutationLayer = (schema, ctx) => Layer.mergeAll(layer$
|
|
125
|
+
const mutationLayer = (schema, ctx) => Layer.mergeAll(layer$6(schema, ctx.db), layer$7(schema, ctx.db), layer$8(ctx.meta), layer$9(ctx.meta), layer$10(ctx.meta), layerForTarget(schema.target, ctx.auth), layer$4(ctx.scheduler, schema.target.scope), storageLayer(ctx.storage), StorageWriter.layer(ctx.storage, schema.target.scope), layer$3(ctx.runQuery), layer$1(ctx.runMutation), layer$2(ctx), layer(ctx), layer$11(ctx, schema.target.scope), layer$5);
|
|
126
126
|
const mutationFunction = ({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares }) => ({
|
|
127
127
|
args: compileArgsSchema(args, databaseSchema.target.scope),
|
|
128
128
|
returns: compileReturnsSchema(returns, databaseSchema.target.scope),
|
|
@@ -146,7 +146,7 @@ const convexActionFunction = (schema, { name, functionVisibility, args, returns,
|
|
|
146
146
|
error,
|
|
147
147
|
handler,
|
|
148
148
|
resolvedMiddlewares,
|
|
149
|
-
createLayer: (ctx) => Layer.mergeAll(actionLayer(schema, ctx), layer)
|
|
149
|
+
createLayer: (ctx) => Layer.mergeAll(actionLayer(schema, ctx), layer$5)
|
|
150
150
|
});
|
|
151
151
|
//#endregion
|
|
152
152
|
export { Definition, RegisteredConvexFunction_exports, make, mutationLayer, prepare, register };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegisteredConvexFunction.js","names":["RegisteredFunction.applyMiddleware","DatabaseReader.layer","ExecutionMetadata.layer","TransactionMetadata.layer","QueryTransactionContext.layer","Auth.layerForTarget","RegisteredFunction.storageLayer","QueryRunner.layer","QueryCtx.layer","ConvexConfigProvider.layer","RegisteredFunction.runHandlerPromise","RegisteredFunction.combineErrorSchemas","DatabaseWriter.layer","RequestMetadata.layer","Scheduler.layer","MutationRunner.layer","MutationTransactionContext.layer","MutationCtx.layer","RegisteredFunction.actionFunctionBase","RegisteredFunction.actionLayer"],"sources":["../src/RegisteredConvexFunction.ts"],"sourcesContent":["import {\n compileArgsSchema,\n compileReturnsSchema,\n} from \"@confect/core/SchemaToValidator\";\nimport {\n actionGeneric,\n type DefaultFunctionArgs,\n type FunctionVisibility,\n type GenericMutationCtx,\n type GenericQueryCtx,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { Value } from \"convex/values\";\nimport { pipe } from \"effect/Function\";\nimport * as Clock from \"effect/Clock\";\nimport * as Data from \"effect/Data\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Schema from \"effect/Schema\";\nimport * as EffectScheduler from \"effect/Scheduler\";\nimport * as Auth from \"./Auth\";\nimport * as ConvexConfigProvider from \"./ConvexConfigProvider\";\nimport * as DatabaseReader from \"./DatabaseReader\";\nimport type * as DatabaseSchema from \"./DatabaseSchema\";\nimport * as DatabaseWriter from \"./DatabaseWriter\";\nimport type * as DataModel from \"./DataModel\";\nimport * as ExecutionMetadata from \"./ExecutionMetadata\";\nimport * as RequestMetadata from \"./RequestMetadata\";\nimport * as TransactionMetadata from \"./TransactionMetadata\";\nimport * as MutationCtx from \"./MutationCtx\";\nimport * as MutationRunner from \"./MutationRunner\";\nimport * as MutationTransactionContext from \"./MutationTransactionContext\";\nimport * as QueryCtx from \"./QueryCtx\";\nimport * as QueryRunner from \"./QueryRunner\";\nimport * as QueryTransactionContext from \"./QueryTransactionContext\";\nimport * as RegisteredFunction from \"./RegisteredFunction\";\nimport type * as FunctionRegistryItem from \"./FunctionRegistryItem\";\nimport type * as ResolvedMiddleware from \"./ResolvedMiddleware\";\nimport * as Scheduler from \"./Scheduler\";\nimport { StorageWriter } from \"./StorageWriter\";\nimport type * as Handler from \"./Handler\";\n\nexport type Definition = Data.TaggedEnum<{\n PublicQuery: ReturnType<typeof queryFunction>;\n InternalQuery: ReturnType<typeof queryFunction>;\n PublicMutation: ReturnType<typeof mutationFunction>;\n InternalMutation: ReturnType<typeof mutationFunction>;\n PublicAction: ReturnType<typeof convexActionFunction>;\n InternalAction: ReturnType<typeof convexActionFunction>;\n Registered: { readonly handler: RegisteredFunction.Any };\n}>;\nexport const Definition = Data.taggedEnum<Definition>();\n\nexport const prepare = (\n databaseSchema: DatabaseSchema.AnyWithProps,\n item: FunctionRegistryItem.ConfectFunctionRegistryItem,\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware> = [],\n) =>\n Match.value(item.functionType).pipe(\n Match.when(\"query\", () => {\n const definition = queryFunction({\n databaseSchema,\n name: item.name,\n functionVisibility: item.functionVisibility,\n args: item.args,\n returns: item.returns,\n error: item.error,\n handler: item.handler,\n resolvedMiddlewares,\n });\n return Match.value(item.functionVisibility).pipe(\n Match.when(\"public\", () => Definition.PublicQuery(definition)),\n Match.when(\"internal\", () => Definition.InternalQuery(definition)),\n Match.exhaustive,\n );\n }),\n Match.when(\"mutation\", () => {\n const definition = mutationFunction({\n databaseSchema,\n name: item.name,\n functionVisibility: item.functionVisibility,\n args: item.args,\n returns: item.returns,\n error: item.error,\n handler: item.handler,\n resolvedMiddlewares,\n });\n return Match.value(item.functionVisibility).pipe(\n Match.when(\"public\", () => Definition.PublicMutation(definition)),\n Match.when(\"internal\", () => Definition.InternalMutation(definition)),\n Match.exhaustive,\n );\n }),\n Match.when(\"action\", () => {\n const definition = convexActionFunction(databaseSchema, {\n name: item.name,\n functionVisibility: item.functionVisibility,\n args: item.args,\n returns: item.returns,\n error: item.error,\n handler: item.handler,\n resolvedMiddlewares,\n });\n return Match.value(item.functionVisibility).pipe(\n Match.when(\"public\", () => Definition.PublicAction(definition)),\n Match.when(\"internal\", () => Definition.InternalAction(definition)),\n Match.exhaustive,\n );\n }),\n Match.exhaustive,\n );\n\nexport const make = (\n databaseSchema: DatabaseSchema.AnyWithProps,\n item: FunctionRegistryItem.ConfectFunctionRegistryItem,\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware> = [],\n): RegisteredFunction.Any =>\n register(prepare(databaseSchema, item, resolvedMiddlewares));\n\nexport const register = (self: Definition): RegisteredFunction.Any =>\n Definition.$match(self, {\n PublicQuery: (definition) => queryGeneric(definition),\n InternalQuery: (definition) => internalQueryGeneric(definition),\n PublicMutation: (definition) => mutationGeneric(definition),\n InternalMutation: (definition) => internalMutationGeneric(definition),\n PublicAction: (definition) => actionGeneric(definition),\n InternalAction: (definition) => internalActionGeneric(definition),\n Registered: ({ handler }) => handler,\n });\n\n/**\n * Convex evicts a query from its cache once the execution observes the current\n * time (every `Date.now()` read is tracked). Effect's logging, span, and\n * elapsed-time machinery reads timestamps through the ambient `Clock`'s unsafe\n * accessors, which would silently opt any logging or timing query out of the\n * cache—and there is no untracked time source in the isolate to serve them\n * from, since Effect's own live clock falls back to `Date.now()` for monotonic\n * time when neither `process.hrtime` nor `performance.now` exists. Queries\n * therefore run with a `Clock` whose unsafe accessors all return constants, so\n * logging and spans never touch the tracker and `Effect.timed` and duration\n * metrics report a zero elapsed time, while the effectful accessors\n * (`Clock.currentTimeMillis`/`currentTimeNanos`/`monotonicTimeNanos`) read the\n * real time, making them an explicit opt-in to cache eviction. Raw `Date.now()`\n * calls in handler code likewise opt out honestly.\n */\nconst queryClock: Clock.Clock = {\n currentTimeMillisUnsafe: () => 0,\n currentTimeNanosUnsafe: () => 0n,\n monotonicTimeNanosUnsafe: () => 0n,\n // oxlint-disable-next-line effecttsgo/global-date-in-effect -- This access intentionally notifies Convex's query-cache tracker.\n currentTimeMillis: Effect.sync(() => Date.now()),\n // oxlint-disable-next-line effecttsgo/global-date-in-effect -- This access intentionally notifies Convex's query-cache tracker.\n currentTimeNanos: Effect.sync(() => BigInt(Date.now()) * 1_000_000n),\n // oxlint-disable-next-line effecttsgo/global-date-in-effect -- This access intentionally notifies Convex's query-cache tracker.\n monotonicTimeNanos: Effect.sync(() => BigInt(Date.now()) * 1_000_000n),\n // `Effect.sleep` resolves the ambient clock, so it cannot be used here—it\n // would recurse straight back into this `sleep`.\n sleep: (duration) =>\n Effect.callback<void>((resume) => {\n // oxlint-disable-next-line effecttsgo/global-timers-in-effect -- Effect.sleep would resolve this Clock and recurse.\n const handle = setTimeout(\n () => resume(Effect.void),\n Duration.toMillis(duration),\n );\n return Effect.sync(() => clearTimeout(handle));\n }),\n};\n\nconst queryFunction = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Args,\n ConvexArgs extends DefaultFunctionArgs,\n Returns,\n ConvexReturns,\n E,\n>({\n databaseSchema,\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n}: {\n databaseSchema: DatabaseSchema_;\n name: string;\n functionVisibility: FunctionVisibility;\n args: Schema.Codec<Args, ConvexArgs>;\n returns: Schema.Codec<Returns, ConvexReturns>;\n error: Schema.Codec<Error, Value> | undefined;\n handler: (\n a: Args,\n ) => Effect.Effect<Returns, E, Handler.QueryServices<DatabaseSchema_>>;\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;\n}) => ({\n args: compileArgsSchema(args, databaseSchema.target.scope),\n returns: compileReturnsSchema(returns, databaseSchema.target.scope),\n handler: (\n ctx: GenericQueryCtx<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n actualArgs: ConvexArgs,\n ): Promise<ConvexReturns> =>\n Effect.gen(function* () {\n const decodedArgs = yield* pipe(\n actualArgs,\n Schema.decodeUnknownEffect(args),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context -- Middleware errors are intentionally erased here and validated by runHandlerPromise against the combined error schema below.\n const decodedReturns = yield* RegisteredFunction.applyMiddleware(\n handler(decodedArgs),\n resolvedMiddlewares,\n {\n name,\n functionType: \"query\",\n functionVisibility,\n args: decodedArgs,\n },\n ).pipe(\n Effect.provide(\n Layer.mergeAll(\n DatabaseReader.layer(databaseSchema, ctx.db),\n ExecutionMetadata.layer(ctx.meta),\n TransactionMetadata.layer(ctx.meta),\n QueryTransactionContext.layer(ctx),\n Auth.layerForTarget<DatabaseSchema_[\"target\"]>(\n databaseSchema.target,\n ctx.auth,\n ),\n RegisteredFunction.storageLayer<\n DatabaseSchema.Scope<DatabaseSchema_>\n >(ctx.storage),\n QueryRunner.layer(ctx.runQuery),\n QueryCtx.layer<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>,\n DatabaseSchema.Scope<DatabaseSchema_>\n >(ctx, databaseSchema.target.scope),\n ConvexConfigProvider.layer,\n ),\n ),\n );\n return yield* pipe(\n decodedReturns,\n Schema.encodeEffect(returns),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n }).pipe(\n Effect.provideService(Clock.Clock, queryClock),\n RegisteredFunction.runHandlerPromise(\n RegisteredFunction.combineErrorSchemas(error, resolvedMiddlewares),\n {\n scheduler: new EffectScheduler.MixedScheduler(\"sync\"),\n },\n ),\n ),\n});\n\nexport const mutationLayer = <Schema extends DatabaseSchema.AnyWithProps>(\n schema: Schema,\n ctx: GenericMutationCtx<DataModel.ToConvex<DataModel.FromSchema<Schema>>>,\n) =>\n Layer.mergeAll(\n DatabaseReader.layer(schema, ctx.db),\n DatabaseWriter.layer(schema, ctx.db),\n ExecutionMetadata.layer(ctx.meta),\n RequestMetadata.layer(ctx.meta),\n TransactionMetadata.layer(ctx.meta),\n Auth.layerForTarget<Schema[\"target\"]>(schema.target, ctx.auth),\n Scheduler.layer<DatabaseSchema.Scope<Schema>>(\n ctx.scheduler,\n schema.target.scope,\n ),\n RegisteredFunction.storageLayer<DatabaseSchema.Scope<Schema>>(ctx.storage),\n StorageWriter.layer<DatabaseSchema.Scope<Schema>>(\n ctx.storage,\n schema.target.scope,\n ),\n QueryRunner.layer(ctx.runQuery),\n MutationRunner.layer(ctx.runMutation),\n QueryTransactionContext.layer(ctx),\n MutationTransactionContext.layer(ctx),\n MutationCtx.layer<\n DataModel.ToConvex<DataModel.FromSchema<Schema>>,\n DatabaseSchema.Scope<Schema>\n >(ctx, schema.target.scope),\n ConvexConfigProvider.layer,\n );\n\nexport type MutationServices<Schema extends DatabaseSchema.AnyWithProps> =\n Handler.MutationServices<Schema>;\n\nconst mutationFunction = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Args,\n ConvexArgs extends DefaultFunctionArgs,\n Returns,\n ConvexReturns,\n E,\n>({\n databaseSchema,\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n}: {\n databaseSchema: DatabaseSchema_;\n name: string;\n functionVisibility: FunctionVisibility;\n args: Schema.Codec<Args, ConvexArgs>;\n returns: Schema.Codec<Returns, ConvexReturns>;\n error: Schema.Codec<Error, Value> | undefined;\n handler: (\n a: Args,\n ) => Effect.Effect<Returns, E, MutationServices<DatabaseSchema_>>;\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;\n}) => ({\n args: compileArgsSchema(args, databaseSchema.target.scope),\n returns: compileReturnsSchema(returns, databaseSchema.target.scope),\n handler: (\n ctx: GenericMutationCtx<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n actualArgs: ConvexArgs,\n ): Promise<ConvexReturns> =>\n Effect.gen(function* () {\n const decodedArgs = yield* pipe(\n actualArgs,\n Schema.decodeUnknownEffect(args),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context -- Middleware errors are intentionally erased here and validated by runHandlerPromise against the combined error schema below.\n const decodedReturns = yield* RegisteredFunction.applyMiddleware(\n handler(decodedArgs),\n resolvedMiddlewares,\n {\n name,\n functionType: \"mutation\",\n functionVisibility,\n args: decodedArgs,\n },\n ).pipe(Effect.provide(mutationLayer(databaseSchema, ctx)));\n return yield* pipe(\n decodedReturns,\n Schema.encodeEffect(returns),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n }).pipe(\n RegisteredFunction.runHandlerPromise(\n RegisteredFunction.combineErrorSchemas(error, resolvedMiddlewares),\n {\n scheduler: new EffectScheduler.MixedScheduler(\"sync\"),\n },\n ),\n ),\n});\n\nconst convexActionFunction = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Args,\n ConvexArgs extends DefaultFunctionArgs,\n Returns,\n ConvexReturns,\n E,\n>(\n schema: DatabaseSchema_,\n {\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n }: {\n name: string;\n functionVisibility: FunctionVisibility;\n args: Schema.Codec<Args, ConvexArgs>;\n returns: Schema.Codec<Returns, ConvexReturns>;\n error: Schema.Codec<any, any> | undefined;\n handler: (\n a: Args,\n ) => Effect.Effect<\n Returns,\n E,\n RegisteredFunction.ActionServices<DatabaseSchema_>\n >;\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;\n },\n) =>\n RegisteredFunction.actionFunctionBase({\n scope: schema.target.scope,\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n createLayer: (ctx) =>\n Layer.mergeAll(\n RegisteredFunction.actionLayer(schema, ctx),\n ConvexConfigProvider.layer,\n ),\n });\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RegisteredConvexFunction.js","names":["RegisteredFunction.applyMiddleware","DatabaseReader.layer","ExecutionMetadata.layer","TransactionMetadata.layer","QueryTransactionContext.layer","Auth.layerForTarget","RegisteredFunction.storageLayer","QueryRunner.layer","QueryCtx.layer","ConvexConfigProvider.layer","RegisteredFunction.runHandlerPromise","RegisteredFunction.combineErrorSchemas","DatabaseWriter.layer","RequestMetadata.layer","Scheduler.layer","MutationRunner.layer","MutationTransactionContext.layer","MutationCtx.layer","RegisteredFunction.actionFunctionBase","RegisteredFunction.actionLayer"],"sources":["../src/RegisteredConvexFunction.ts"],"sourcesContent":["import {\n compileArgsSchema,\n compileReturnsSchema,\n} from \"@confect/core/SchemaToValidator\";\nimport {\n actionGeneric,\n type DefaultFunctionArgs,\n type FunctionVisibility,\n type GenericMutationCtx,\n type GenericQueryCtx,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { Value } from \"convex/values\";\nimport { pipe } from \"effect/Function\";\nimport * as Clock from \"effect/Clock\";\nimport * as Data from \"effect/Data\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Schema from \"effect/Schema\";\nimport * as EffectScheduler from \"effect/Scheduler\";\nimport * as Auth from \"./Auth.js\";\nimport * as ConvexConfigProvider from \"./ConvexConfigProvider.js\";\nimport * as DatabaseReader from \"./DatabaseReader.js\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport * as DatabaseWriter from \"./DatabaseWriter.js\";\nimport type * as DataModel from \"./DataModel.js\";\nimport * as ExecutionMetadata from \"./ExecutionMetadata.js\";\nimport * as RequestMetadata from \"./RequestMetadata.js\";\nimport * as TransactionMetadata from \"./TransactionMetadata.js\";\nimport * as MutationCtx from \"./MutationCtx.js\";\nimport * as MutationRunner from \"./MutationRunner.js\";\nimport * as MutationTransactionContext from \"./MutationTransactionContext.js\";\nimport * as QueryCtx from \"./QueryCtx.js\";\nimport * as QueryRunner from \"./QueryRunner.js\";\nimport * as QueryTransactionContext from \"./QueryTransactionContext.js\";\nimport * as RegisteredFunction from \"./RegisteredFunction.js\";\nimport type * as FunctionRegistryItem from \"./FunctionRegistryItem.js\";\nimport type * as ResolvedMiddleware from \"./ResolvedMiddleware.js\";\nimport * as Scheduler from \"./Scheduler.js\";\nimport { StorageWriter } from \"./StorageWriter.js\";\nimport type * as Handler from \"./Handler.js\";\n\nexport type Definition = Data.TaggedEnum<{\n PublicQuery: ReturnType<typeof queryFunction>;\n InternalQuery: ReturnType<typeof queryFunction>;\n PublicMutation: ReturnType<typeof mutationFunction>;\n InternalMutation: ReturnType<typeof mutationFunction>;\n PublicAction: ReturnType<typeof convexActionFunction>;\n InternalAction: ReturnType<typeof convexActionFunction>;\n Registered: { readonly handler: RegisteredFunction.Any };\n}>;\nexport const Definition = Data.taggedEnum<Definition>();\n\nexport const prepare = (\n databaseSchema: DatabaseSchema.AnyWithProps,\n item: FunctionRegistryItem.ConfectFunctionRegistryItem,\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware> = [],\n) =>\n Match.value(item.functionType).pipe(\n Match.when(\"query\", () => {\n const definition = queryFunction({\n databaseSchema,\n name: item.name,\n functionVisibility: item.functionVisibility,\n args: item.args,\n returns: item.returns,\n error: item.error,\n handler: item.handler,\n resolvedMiddlewares,\n });\n return Match.value(item.functionVisibility).pipe(\n Match.when(\"public\", () => Definition.PublicQuery(definition)),\n Match.when(\"internal\", () => Definition.InternalQuery(definition)),\n Match.exhaustive,\n );\n }),\n Match.when(\"mutation\", () => {\n const definition = mutationFunction({\n databaseSchema,\n name: item.name,\n functionVisibility: item.functionVisibility,\n args: item.args,\n returns: item.returns,\n error: item.error,\n handler: item.handler,\n resolvedMiddlewares,\n });\n return Match.value(item.functionVisibility).pipe(\n Match.when(\"public\", () => Definition.PublicMutation(definition)),\n Match.when(\"internal\", () => Definition.InternalMutation(definition)),\n Match.exhaustive,\n );\n }),\n Match.when(\"action\", () => {\n const definition = convexActionFunction(databaseSchema, {\n name: item.name,\n functionVisibility: item.functionVisibility,\n args: item.args,\n returns: item.returns,\n error: item.error,\n handler: item.handler,\n resolvedMiddlewares,\n });\n return Match.value(item.functionVisibility).pipe(\n Match.when(\"public\", () => Definition.PublicAction(definition)),\n Match.when(\"internal\", () => Definition.InternalAction(definition)),\n Match.exhaustive,\n );\n }),\n Match.exhaustive,\n );\n\nexport const make = (\n databaseSchema: DatabaseSchema.AnyWithProps,\n item: FunctionRegistryItem.ConfectFunctionRegistryItem,\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware> = [],\n): RegisteredFunction.Any =>\n register(prepare(databaseSchema, item, resolvedMiddlewares));\n\nexport const register = (self: Definition): RegisteredFunction.Any =>\n Definition.$match(self, {\n PublicQuery: (definition) => queryGeneric(definition),\n InternalQuery: (definition) => internalQueryGeneric(definition),\n PublicMutation: (definition) => mutationGeneric(definition),\n InternalMutation: (definition) => internalMutationGeneric(definition),\n PublicAction: (definition) => actionGeneric(definition),\n InternalAction: (definition) => internalActionGeneric(definition),\n Registered: ({ handler }) => handler,\n });\n\n/**\n * Convex evicts a query from its cache once the execution observes the current\n * time (every `Date.now()` read is tracked). Effect's logging, span, and\n * elapsed-time machinery reads timestamps through the ambient `Clock`'s unsafe\n * accessors, which would silently opt any logging or timing query out of the\n * cache—and there is no untracked time source in the isolate to serve them\n * from, since Effect's own live clock falls back to `Date.now()` for monotonic\n * time when neither `process.hrtime` nor `performance.now` exists. Queries\n * therefore run with a `Clock` whose unsafe accessors all return constants, so\n * logging and spans never touch the tracker and `Effect.timed` and duration\n * metrics report a zero elapsed time, while the effectful accessors\n * (`Clock.currentTimeMillis`/`currentTimeNanos`/`monotonicTimeNanos`) read the\n * real time, making them an explicit opt-in to cache eviction. Raw `Date.now()`\n * calls in handler code likewise opt out honestly.\n */\nconst queryClock: Clock.Clock = {\n currentTimeMillisUnsafe: () => 0,\n currentTimeNanosUnsafe: () => 0n,\n monotonicTimeNanosUnsafe: () => 0n,\n // oxlint-disable-next-line effecttsgo/global-date-in-effect -- This access intentionally notifies Convex's query-cache tracker.\n currentTimeMillis: Effect.sync(() => Date.now()),\n // oxlint-disable-next-line effecttsgo/global-date-in-effect -- This access intentionally notifies Convex's query-cache tracker.\n currentTimeNanos: Effect.sync(() => BigInt(Date.now()) * 1_000_000n),\n // oxlint-disable-next-line effecttsgo/global-date-in-effect -- This access intentionally notifies Convex's query-cache tracker.\n monotonicTimeNanos: Effect.sync(() => BigInt(Date.now()) * 1_000_000n),\n // `Effect.sleep` resolves the ambient clock, so it cannot be used here—it\n // would recurse straight back into this `sleep`.\n sleep: (duration) =>\n Effect.callback<void>((resume) => {\n // oxlint-disable-next-line effecttsgo/global-timers-in-effect -- Effect.sleep would resolve this Clock and recurse.\n const handle = setTimeout(\n () => resume(Effect.void),\n Duration.toMillis(duration),\n );\n return Effect.sync(() => clearTimeout(handle));\n }),\n};\n\nconst queryFunction = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Args,\n ConvexArgs extends DefaultFunctionArgs,\n Returns,\n ConvexReturns,\n E,\n>({\n databaseSchema,\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n}: {\n databaseSchema: DatabaseSchema_;\n name: string;\n functionVisibility: FunctionVisibility;\n args: Schema.Codec<Args, ConvexArgs>;\n returns: Schema.Codec<Returns, ConvexReturns>;\n error: Schema.Codec<Error, Value> | undefined;\n handler: (\n a: Args,\n ) => Effect.Effect<Returns, E, Handler.QueryServices<DatabaseSchema_>>;\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;\n}) => ({\n args: compileArgsSchema(args, databaseSchema.target.scope),\n returns: compileReturnsSchema(returns, databaseSchema.target.scope),\n handler: (\n ctx: GenericQueryCtx<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n actualArgs: ConvexArgs,\n ): Promise<ConvexReturns> =>\n Effect.gen(function* () {\n const decodedArgs = yield* pipe(\n actualArgs,\n Schema.decodeUnknownEffect(args),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context -- Middleware errors are intentionally erased here and validated by runHandlerPromise against the combined error schema below.\n const decodedReturns = yield* RegisteredFunction.applyMiddleware(\n handler(decodedArgs),\n resolvedMiddlewares,\n {\n name,\n functionType: \"query\",\n functionVisibility,\n args: decodedArgs,\n },\n ).pipe(\n Effect.provide(\n Layer.mergeAll(\n DatabaseReader.layer(databaseSchema, ctx.db),\n ExecutionMetadata.layer(ctx.meta),\n TransactionMetadata.layer(ctx.meta),\n QueryTransactionContext.layer(ctx),\n Auth.layerForTarget<DatabaseSchema_[\"target\"]>(\n databaseSchema.target,\n ctx.auth,\n ),\n RegisteredFunction.storageLayer<\n DatabaseSchema.Scope<DatabaseSchema_>\n >(ctx.storage),\n QueryRunner.layer(ctx.runQuery),\n QueryCtx.layer<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>,\n DatabaseSchema.Scope<DatabaseSchema_>\n >(ctx, databaseSchema.target.scope),\n ConvexConfigProvider.layer,\n ),\n ),\n );\n return yield* pipe(\n decodedReturns,\n Schema.encodeEffect(returns),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n }).pipe(\n Effect.provideService(Clock.Clock, queryClock),\n RegisteredFunction.runHandlerPromise(\n RegisteredFunction.combineErrorSchemas(error, resolvedMiddlewares),\n {\n scheduler: new EffectScheduler.MixedScheduler(\"sync\"),\n },\n ),\n ),\n});\n\nexport const mutationLayer = <Schema extends DatabaseSchema.AnyWithProps>(\n schema: Schema,\n ctx: GenericMutationCtx<DataModel.ToConvex<DataModel.FromSchema<Schema>>>,\n) =>\n Layer.mergeAll(\n DatabaseReader.layer(schema, ctx.db),\n DatabaseWriter.layer(schema, ctx.db),\n ExecutionMetadata.layer(ctx.meta),\n RequestMetadata.layer(ctx.meta),\n TransactionMetadata.layer(ctx.meta),\n Auth.layerForTarget<Schema[\"target\"]>(schema.target, ctx.auth),\n Scheduler.layer<DatabaseSchema.Scope<Schema>>(\n ctx.scheduler,\n schema.target.scope,\n ),\n RegisteredFunction.storageLayer<DatabaseSchema.Scope<Schema>>(ctx.storage),\n StorageWriter.layer<DatabaseSchema.Scope<Schema>>(\n ctx.storage,\n schema.target.scope,\n ),\n QueryRunner.layer(ctx.runQuery),\n MutationRunner.layer(ctx.runMutation),\n QueryTransactionContext.layer(ctx),\n MutationTransactionContext.layer(ctx),\n MutationCtx.layer<\n DataModel.ToConvex<DataModel.FromSchema<Schema>>,\n DatabaseSchema.Scope<Schema>\n >(ctx, schema.target.scope),\n ConvexConfigProvider.layer,\n );\n\nexport type MutationServices<Schema extends DatabaseSchema.AnyWithProps> =\n Handler.MutationServices<Schema>;\n\nconst mutationFunction = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Args,\n ConvexArgs extends DefaultFunctionArgs,\n Returns,\n ConvexReturns,\n E,\n>({\n databaseSchema,\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n}: {\n databaseSchema: DatabaseSchema_;\n name: string;\n functionVisibility: FunctionVisibility;\n args: Schema.Codec<Args, ConvexArgs>;\n returns: Schema.Codec<Returns, ConvexReturns>;\n error: Schema.Codec<Error, Value> | undefined;\n handler: (\n a: Args,\n ) => Effect.Effect<Returns, E, MutationServices<DatabaseSchema_>>;\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;\n}) => ({\n args: compileArgsSchema(args, databaseSchema.target.scope),\n returns: compileReturnsSchema(returns, databaseSchema.target.scope),\n handler: (\n ctx: GenericMutationCtx<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n actualArgs: ConvexArgs,\n ): Promise<ConvexReturns> =>\n Effect.gen(function* () {\n const decodedArgs = yield* pipe(\n actualArgs,\n Schema.decodeUnknownEffect(args),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context -- Middleware errors are intentionally erased here and validated by runHandlerPromise against the combined error schema below.\n const decodedReturns = yield* RegisteredFunction.applyMiddleware(\n handler(decodedArgs),\n resolvedMiddlewares,\n {\n name,\n functionType: \"mutation\",\n functionVisibility,\n args: decodedArgs,\n },\n ).pipe(Effect.provide(mutationLayer(databaseSchema, ctx)));\n return yield* pipe(\n decodedReturns,\n Schema.encodeEffect(returns),\n Effect.catchTag(\"SchemaError\", Effect.die),\n );\n }).pipe(\n RegisteredFunction.runHandlerPromise(\n RegisteredFunction.combineErrorSchemas(error, resolvedMiddlewares),\n {\n scheduler: new EffectScheduler.MixedScheduler(\"sync\"),\n },\n ),\n ),\n});\n\nconst convexActionFunction = <\n DatabaseSchema_ extends DatabaseSchema.AnyWithProps,\n Args,\n ConvexArgs extends DefaultFunctionArgs,\n Returns,\n ConvexReturns,\n E,\n>(\n schema: DatabaseSchema_,\n {\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n }: {\n name: string;\n functionVisibility: FunctionVisibility;\n args: Schema.Codec<Args, ConvexArgs>;\n returns: Schema.Codec<Returns, ConvexReturns>;\n error: Schema.Codec<any, any> | undefined;\n handler: (\n a: Args,\n ) => Effect.Effect<\n Returns,\n E,\n RegisteredFunction.ActionServices<DatabaseSchema_>\n >;\n resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;\n },\n) =>\n RegisteredFunction.actionFunctionBase({\n scope: schema.target.scope,\n name,\n functionVisibility,\n args,\n returns,\n error,\n handler,\n resolvedMiddlewares,\n createLayer: (ctx) =>\n Layer.mergeAll(\n RegisteredFunction.actionLayer(schema, ctx),\n ConvexConfigProvider.layer,\n ),\n });\n"],"mappings":"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"}
|