@gaganref/confect-server 10.3.1-fork.4 → 10.3.1-fork.41
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 +14 -2
- package/dist/Auth.d.ts.map +1 -1
- package/dist/Auth.js +13 -3
- 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 +4 -4
- 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 +3 -2
- package/dist/GroupRegistry.d.ts.map +1 -1
- package/dist/GroupRegistry.js +10 -3
- package/dist/GroupRegistry.js.map +1 -1
- package/dist/Handler.d.ts +31 -27
- package/dist/Handler.d.ts.map +1 -1
- package/dist/Handler.js.map +1 -1
- package/dist/HttpRouter.d.ts +15 -13
- package/dist/HttpRouter.d.ts.map +1 -1
- package/dist/HttpRouter.js +16 -7
- 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 +131 -23
- package/dist/QueryStream.d.ts.map +1 -1
- package/dist/QueryStream.js +142 -40
- 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 +7 -4
- package/dist/QueryStreamReadBudget.js.map +1 -1
- package/dist/QueryTransactionContext.js +2 -2
- package/dist/RegisteredConvexFunction.d.ts +27 -24
- package/dist/RegisteredConvexFunction.d.ts.map +1 -1
- package/dist/RegisteredConvexFunction.js +39 -26
- package/dist/RegisteredConvexFunction.js.map +1 -1
- package/dist/RegisteredFunction.d.ts +51 -47
- package/dist/RegisteredFunction.d.ts.map +1 -1
- package/dist/RegisteredFunction.js +126 -37
- 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 +7 -7
- package/dist/RegisteredNodeFunction.d.ts.map +1 -1
- package/dist/RegisteredNodeFunction.js +8 -6
- 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 +20 -18
- 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/internal/observability.d.ts +5 -0
- package/dist/internal/observability.d.ts.map +1 -0
- package/dist/internal/observability.js +21 -0
- package/dist/internal/observability.js.map +1 -0
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/package.json +5 -5
- 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 +24 -2
- package/src/ComponentCtx.ts +1 -1
- package/src/ConvexFunctionDefinitions.ts +10 -9
- 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 +11 -7
- package/src/Handler.ts +44 -28
- package/src/HttpRouter.ts +71 -21
- 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 +406 -76
- 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 +38 -21
- package/src/RegisteredFunction.ts +209 -60
- package/src/RegisteredFunctions.ts +4 -4
- package/src/RegisteredNodeFunction.ts +15 -9
- 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/internal/observability.ts +27 -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":"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"}
|
|
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,14 +1,14 @@
|
|
|
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
|
|
8
|
-
import * as Data from "effect/Data";
|
|
9
|
+
import * as Cause from "effect/Cause";
|
|
9
10
|
import * as Stream from "effect/Stream";
|
|
10
11
|
import * as Tuple from "effect/Tuple";
|
|
11
|
-
import * as Cause from "effect/Cause";
|
|
12
12
|
import * as SynchronizedRef from "effect/SynchronizedRef";
|
|
13
13
|
//#region src/QueryStreamReadBudget.ts
|
|
14
14
|
var QueryStreamReadBudget_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -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>;
|
|
@@ -263,7 +263,7 @@ export declare const Definition: {
|
|
|
263
263
|
readonly handler: RegisteredFunction.Any;
|
|
264
264
|
}, "_tag">;
|
|
265
265
|
};
|
|
266
|
-
export declare const prepare: (databaseSchema: DatabaseSchema.AnyWithProps, item: FunctionRegistryItem.ConfectFunctionRegistryItem, resolvedMiddlewares?: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>) => {
|
|
266
|
+
export declare const prepare: (databaseSchema: DatabaseSchema.AnyWithProps, item: FunctionRegistryItem.ConfectFunctionRegistryItem, resolvedMiddlewares?: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>, observability?: Layer.Layer<never>) => {
|
|
267
267
|
readonly _tag: "InternalAction";
|
|
268
268
|
readonly args: import("convex/values").PropertyValidators;
|
|
269
269
|
readonly returns: import("convex/values").Validator<any, any, any>;
|
|
@@ -296,7 +296,7 @@ export declare const prepare: (databaseSchema: DatabaseSchema.AnyWithProps, item
|
|
|
296
296
|
};
|
|
297
297
|
export declare const make: (databaseSchema: DatabaseSchema.AnyWithProps, item: FunctionRegistryItem.ConfectFunctionRegistryItem, resolvedMiddlewares?: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>) => RegisteredFunction.Any;
|
|
298
298
|
export declare const register: (self: Definition) => RegisteredFunction.Any;
|
|
299
|
-
declare const queryFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, }: {
|
|
299
|
+
declare const queryFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, observability, }: {
|
|
300
300
|
databaseSchema: DatabaseSchema_;
|
|
301
301
|
name: string;
|
|
302
302
|
functionVisibility: FunctionVisibility;
|
|
@@ -305,12 +305,13 @@ declare const queryFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProp
|
|
|
305
305
|
error: Schema.Codec<Error, Value> | undefined;
|
|
306
306
|
handler: (a: Args) => Effect.Effect<Returns, E, Handler.QueryServices<DatabaseSchema_>>;
|
|
307
307
|
resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;
|
|
308
|
+
observability?: Layer.Layer<never> | undefined;
|
|
308
309
|
}) => {
|
|
309
310
|
args: import("convex/values").PropertyValidators;
|
|
310
311
|
returns: import("convex/values").Validator<any, any, any>;
|
|
311
312
|
handler: (ctx: GenericQueryCtx<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>, actualArgs: ConvexArgs) => Promise<ConvexReturns>;
|
|
312
313
|
};
|
|
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 | {
|
|
314
|
+
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 | Auth.MutationAuth | MutationTransactionContext.MutationTransactionContext | QueryTransactionContext.QueryTransactionContext | RequestMetadata.RequestMetadata | import("./Storage.js").Storage | TransactionMetadata.TransactionMetadata | {
|
|
314
315
|
runMutation: {
|
|
315
316
|
<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
317
|
<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,9 +327,9 @@ export declare const mutationLayer: <Schema extends DatabaseSchema.AnyWithProps>
|
|
|
326
327
|
}): Effect.Effect<import("@confect/core/Ref").Returns<Query>, import("@confect/core/Ref").Error<Query> | Schema.SchemaError, MutationTransactionContext.MutationTransactionContext>;
|
|
327
328
|
<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
329
|
};
|
|
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>;
|
|
330
|
+
} | 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
331
|
export type MutationServices<Schema extends DatabaseSchema.AnyWithProps> = Handler.MutationServices<Schema>;
|
|
331
|
-
declare const mutationFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, }: {
|
|
332
|
+
declare const mutationFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, observability, }: {
|
|
332
333
|
databaseSchema: DatabaseSchema_;
|
|
333
334
|
name: string;
|
|
334
335
|
functionVisibility: FunctionVisibility;
|
|
@@ -337,12 +338,13 @@ declare const mutationFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithP
|
|
|
337
338
|
error: Schema.Codec<Error, Value> | undefined;
|
|
338
339
|
handler: (a: Args) => Effect.Effect<Returns, E, MutationServices<DatabaseSchema_>>;
|
|
339
340
|
resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;
|
|
341
|
+
observability?: Layer.Layer<never> | undefined;
|
|
340
342
|
}) => {
|
|
341
343
|
args: import("convex/values").PropertyValidators;
|
|
342
344
|
returns: import("convex/values").Validator<any, any, any>;
|
|
343
345
|
handler: (ctx: GenericMutationCtx<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>, actualArgs: ConvexArgs) => Promise<ConvexReturns>;
|
|
344
346
|
};
|
|
345
|
-
declare const convexActionFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>(schema: DatabaseSchema_, { name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, }: {
|
|
347
|
+
declare const convexActionFunction: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Args, ConvexArgs extends DefaultFunctionArgs, Returns, ConvexReturns, E>(schema: DatabaseSchema_, { name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, observability, }: {
|
|
346
348
|
name: string;
|
|
347
349
|
functionVisibility: FunctionVisibility;
|
|
348
350
|
args: Schema.Codec<Args, ConvexArgs>;
|
|
@@ -350,6 +352,7 @@ declare const convexActionFunction: <DatabaseSchema_ extends DatabaseSchema.AnyW
|
|
|
350
352
|
error: Schema.Codec<any, any> | undefined;
|
|
351
353
|
handler: (a: Args) => Effect.Effect<Returns, E, RegisteredFunction.ActionServices<DatabaseSchema_>>;
|
|
352
354
|
resolvedMiddlewares: ReadonlyArray<ResolvedMiddleware.ResolvedMiddleware>;
|
|
355
|
+
observability?: Layer.Layer<never> | undefined;
|
|
353
356
|
}) => {
|
|
354
357
|
args: import("convex/values").PropertyValidators;
|
|
355
358
|
returns: import("convex/values").Validator<any, any, any>;
|
|
@@ -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 {
|
|
3
|
-
import { layer } from "./
|
|
4
|
-
import { layer as layer$
|
|
5
|
-
import { layer as layer$
|
|
6
|
-
import { layer as layer$
|
|
7
|
-
import {
|
|
8
|
-
import { layer as layer$5 } from "./
|
|
9
|
-
import { layer as layer$6 } from "./
|
|
10
|
-
import { layer as layer$7 } from "./
|
|
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";
|
|
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";
|
|
7
|
+
import { layerForTarget, mutationLayer as mutationLayer$1 } from "./Auth.js";
|
|
8
|
+
import { layer as layer$5 } from "./ConvexConfigProvider.js";
|
|
9
|
+
import { layer as layer$6 } from "./ExecutionMetadata.js";
|
|
10
|
+
import { layer as layer$7 } from "./RequestMetadata.js";
|
|
16
11
|
import { StorageWriter } from "./StorageWriter.js";
|
|
17
12
|
import { actionFunctionBase, actionLayer, applyMiddleware, combineErrorSchemas, runHandlerPromise, storageLayer } from "./RegisteredFunction.js";
|
|
18
|
-
import
|
|
13
|
+
import { layer as layer$8 } from "./DatabaseReader.js";
|
|
14
|
+
import { layer as layer$9 } from "./DatabaseWriter.js";
|
|
15
|
+
import { layer as layer$10 } from "./TransactionMetadata.js";
|
|
16
|
+
import { layer as layer$11 } from "./MutationCtx.js";
|
|
17
|
+
import { layer as layer$12 } from "./QueryCtx.js";
|
|
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({
|
|
@@ -35,10 +35,11 @@ var RegisteredConvexFunction_exports = /* @__PURE__ */ __exportAll({
|
|
|
35
35
|
register: () => register
|
|
36
36
|
});
|
|
37
37
|
const Definition = Data.taggedEnum();
|
|
38
|
-
const prepare = (databaseSchema, item, resolvedMiddlewares = []) => Match.value(item.functionType).pipe(Match.when("query", () => {
|
|
38
|
+
const prepare = (databaseSchema, item, resolvedMiddlewares = [], observability) => Match.value(item.functionType).pipe(Match.when("query", () => {
|
|
39
39
|
const definition = queryFunction({
|
|
40
40
|
databaseSchema,
|
|
41
41
|
name: item.name,
|
|
42
|
+
observability,
|
|
42
43
|
functionVisibility: item.functionVisibility,
|
|
43
44
|
args: item.args,
|
|
44
45
|
returns: item.returns,
|
|
@@ -51,6 +52,7 @@ const prepare = (databaseSchema, item, resolvedMiddlewares = []) => Match.value(
|
|
|
51
52
|
const definition = mutationFunction({
|
|
52
53
|
databaseSchema,
|
|
53
54
|
name: item.name,
|
|
55
|
+
observability,
|
|
54
56
|
functionVisibility: item.functionVisibility,
|
|
55
57
|
args: item.args,
|
|
56
58
|
returns: item.returns,
|
|
@@ -62,6 +64,7 @@ const prepare = (databaseSchema, item, resolvedMiddlewares = []) => Match.value(
|
|
|
62
64
|
}), Match.when("action", () => {
|
|
63
65
|
const definition = convexActionFunction(databaseSchema, {
|
|
64
66
|
name: item.name,
|
|
67
|
+
observability,
|
|
65
68
|
functionVisibility: item.functionVisibility,
|
|
66
69
|
args: item.args,
|
|
67
70
|
returns: item.returns,
|
|
@@ -108,7 +111,7 @@ const queryClock = {
|
|
|
108
111
|
return Effect.sync(() => clearTimeout(handle));
|
|
109
112
|
})
|
|
110
113
|
};
|
|
111
|
-
const queryFunction = ({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares }) => ({
|
|
114
|
+
const queryFunction = ({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, observability }) => ({
|
|
112
115
|
args: compileArgsSchema(args, databaseSchema.target.scope),
|
|
113
116
|
returns: compileReturnsSchema(returns, databaseSchema.target.scope),
|
|
114
117
|
handler: (ctx, actualArgs) => Effect.gen(function* () {
|
|
@@ -118,12 +121,17 @@ const queryFunction = ({ databaseSchema, name, functionVisibility, args, returns
|
|
|
118
121
|
functionType: "query",
|
|
119
122
|
functionVisibility,
|
|
120
123
|
args: decodedArgs
|
|
121
|
-
}).pipe(Effect.provide(Layer.mergeAll(layer$
|
|
124
|
+
}).pipe(Effect.provide(Layer.mergeAll(layer$8(databaseSchema, ctx.db), layer$6(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
125
|
return yield* pipe(decodedReturns, Schema.encodeEffect(returns), Effect.catchTag("SchemaError", Effect.die));
|
|
123
|
-
}).pipe(Effect.provideService(Clock.Clock, queryClock), runHandlerPromise(combineErrorSchemas(error, resolvedMiddlewares), {
|
|
126
|
+
}).pipe(Effect.provideService(Clock.Clock, queryClock), runHandlerPromise(combineErrorSchemas(error, resolvedMiddlewares), {
|
|
127
|
+
scheduler: new EffectScheduler.MixedScheduler("sync"),
|
|
128
|
+
invocation: Effect.promise(() => ctx.meta.getFunctionMetadata()),
|
|
129
|
+
clock: observability === void 0 ? void 0 : queryClock,
|
|
130
|
+
observability
|
|
131
|
+
}))
|
|
124
132
|
});
|
|
125
|
-
const mutationLayer = (schema, ctx) => Layer.mergeAll(layer$
|
|
126
|
-
const mutationFunction = ({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares }) => ({
|
|
133
|
+
const mutationLayer = (schema, ctx) => Layer.mergeAll(layer$8(schema, ctx.db), layer$9(schema, ctx.db), layer$6(ctx.meta), layer$7(ctx.meta), layer$10(ctx.meta), layerForTarget(schema.target, ctx.auth), mutationLayer$1(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);
|
|
134
|
+
const mutationFunction = ({ databaseSchema, name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, observability }) => ({
|
|
127
135
|
args: compileArgsSchema(args, databaseSchema.target.scope),
|
|
128
136
|
returns: compileReturnsSchema(returns, databaseSchema.target.scope),
|
|
129
137
|
handler: (ctx, actualArgs) => Effect.gen(function* () {
|
|
@@ -135,9 +143,13 @@ const mutationFunction = ({ databaseSchema, name, functionVisibility, args, retu
|
|
|
135
143
|
args: decodedArgs
|
|
136
144
|
}).pipe(Effect.provide(mutationLayer(databaseSchema, ctx)));
|
|
137
145
|
return yield* pipe(decodedReturns, Schema.encodeEffect(returns), Effect.catchTag("SchemaError", Effect.die));
|
|
138
|
-
}).pipe(runHandlerPromise(combineErrorSchemas(error, resolvedMiddlewares), {
|
|
146
|
+
}).pipe(runHandlerPromise(combineErrorSchemas(error, resolvedMiddlewares), {
|
|
147
|
+
scheduler: new EffectScheduler.MixedScheduler("sync"),
|
|
148
|
+
invocation: Effect.promise(() => ctx.meta.getFunctionMetadata()),
|
|
149
|
+
observability
|
|
150
|
+
}))
|
|
139
151
|
});
|
|
140
|
-
const convexActionFunction = (schema, { name, functionVisibility, args, returns, error, handler, resolvedMiddlewares }) => actionFunctionBase({
|
|
152
|
+
const convexActionFunction = (schema, { name, functionVisibility, args, returns, error, handler, resolvedMiddlewares, observability }) => actionFunctionBase({
|
|
141
153
|
scope: schema.target.scope,
|
|
142
154
|
name,
|
|
143
155
|
functionVisibility,
|
|
@@ -146,7 +158,8 @@ const convexActionFunction = (schema, { name, functionVisibility, args, returns,
|
|
|
146
158
|
error,
|
|
147
159
|
handler,
|
|
148
160
|
resolvedMiddlewares,
|
|
149
|
-
|
|
161
|
+
observability,
|
|
162
|
+
createLayer: (ctx) => Layer.mergeAll(actionLayer(schema, ctx), layer$5)
|
|
150
163
|
});
|
|
151
164
|
//#endregion
|
|
152
165
|
export { Definition, RegisteredConvexFunction_exports, make, mutationLayer, prepare, register };
|