@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.
Files changed (279) hide show
  1. package/dist/ActionCall.d.ts +30 -0
  2. package/dist/ActionCall.d.ts.map +1 -0
  3. package/dist/ActionCall.js +41 -0
  4. package/dist/ActionCall.js.map +1 -0
  5. package/dist/ActionCtx.d.ts +1 -1
  6. package/dist/ActionCtx.d.ts.map +1 -1
  7. package/dist/ActionCtx.js.map +1 -1
  8. package/dist/ActionRunner.js +2 -2
  9. package/dist/AiGatewayDecisionClient.d.ts +2 -2
  10. package/dist/AiGatewayDecisionClient.d.ts.map +1 -1
  11. package/dist/AiGatewayDecisionClient.js +1 -1
  12. package/dist/AiGatewayDecisionClient.js.map +1 -1
  13. package/dist/AiGatewayLanguageClient.d.ts +2 -2
  14. package/dist/AiGatewayLanguageClient.d.ts.map +1 -1
  15. package/dist/AiGatewayLanguageClient.js +1 -1
  16. package/dist/AiGatewayLanguageClient.js.map +1 -1
  17. package/dist/Auth.d.ts +14 -2
  18. package/dist/Auth.d.ts.map +1 -1
  19. package/dist/Auth.js +13 -3
  20. package/dist/Auth.js.map +1 -1
  21. package/dist/Callback.js +3 -3
  22. package/dist/ComponentCtx.d.ts +1 -1
  23. package/dist/ComponentCtx.d.ts.map +1 -1
  24. package/dist/ConvexConfigProvider.js +2 -2
  25. package/dist/ConvexFunctionDefinitions.d.ts +4 -4
  26. package/dist/ConvexFunctionDefinitions.d.ts.map +1 -1
  27. package/dist/ConvexFunctionDefinitions.js +4 -4
  28. package/dist/ConvexFunctionDefinitions.js.map +1 -1
  29. package/dist/ConvexLogger.js +1 -1
  30. package/dist/CronJobs.d.ts +1 -1
  31. package/dist/CronJobs.d.ts.map +1 -1
  32. package/dist/CronJobs.js +6 -6
  33. package/dist/CronJobs.js.map +1 -1
  34. package/dist/DataModel.d.ts +3 -3
  35. package/dist/DataModel.d.ts.map +1 -1
  36. package/dist/DataModel.js.map +1 -1
  37. package/dist/DatabaseReader.d.ts +4 -4
  38. package/dist/DatabaseReader.d.ts.map +1 -1
  39. package/dist/DatabaseReader.js.map +1 -1
  40. package/dist/DatabaseSchema.d.ts +1 -1
  41. package/dist/DatabaseSchema.d.ts.map +1 -1
  42. package/dist/DatabaseSchema.js +2 -2
  43. package/dist/DatabaseSchema.js.map +1 -1
  44. package/dist/DatabaseWriter.d.ts +41 -7
  45. package/dist/DatabaseWriter.d.ts.map +1 -1
  46. package/dist/DatabaseWriter.js +55 -8
  47. package/dist/DatabaseWriter.js.map +1 -1
  48. package/dist/Document.d.ts +4 -4
  49. package/dist/Document.d.ts.map +1 -1
  50. package/dist/Document.js.map +1 -1
  51. package/dist/ExecutionMetadata.js +1 -1
  52. package/dist/FunctionImpl.d.ts +2 -2
  53. package/dist/FunctionImpl.d.ts.map +1 -1
  54. package/dist/FunctionImpl.js +2 -2
  55. package/dist/FunctionImpl.js.map +1 -1
  56. package/dist/FunctionRegistryItem.d.ts +1 -1
  57. package/dist/FunctionRegistryItem.d.ts.map +1 -1
  58. package/dist/FunctionRegistryItem.js +1 -1
  59. package/dist/FunctionRegistryItem.js.map +1 -1
  60. package/dist/GroupImpl.d.ts +24 -5
  61. package/dist/GroupImpl.d.ts.map +1 -1
  62. package/dist/GroupImpl.js +21 -22
  63. package/dist/GroupImpl.js.map +1 -1
  64. package/dist/GroupRegistry.d.ts +3 -2
  65. package/dist/GroupRegistry.d.ts.map +1 -1
  66. package/dist/GroupRegistry.js +10 -3
  67. package/dist/GroupRegistry.js.map +1 -1
  68. package/dist/Handler.d.ts +31 -27
  69. package/dist/Handler.d.ts.map +1 -1
  70. package/dist/Handler.js.map +1 -1
  71. package/dist/HttpRouter.d.ts +15 -13
  72. package/dist/HttpRouter.d.ts.map +1 -1
  73. package/dist/HttpRouter.js +16 -7
  74. package/dist/HttpRouter.js.map +1 -1
  75. package/dist/MiddlewareImpl.d.ts +14 -14
  76. package/dist/MiddlewareImpl.d.ts.map +1 -1
  77. package/dist/MiddlewareImpl.js +1 -1
  78. package/dist/MiddlewareImpl.js.map +1 -1
  79. package/dist/MutationCtx.d.ts +1 -1
  80. package/dist/MutationCtx.d.ts.map +1 -1
  81. package/dist/MutationCtx.js.map +1 -1
  82. package/dist/MutationRunner.d.ts +1 -1
  83. package/dist/MutationRunner.d.ts.map +1 -1
  84. package/dist/MutationRunner.js +2 -2
  85. package/dist/MutationRunner.js.map +1 -1
  86. package/dist/MutationTransactionContext.d.ts +2 -2
  87. package/dist/MutationTransactionContext.d.ts.map +1 -1
  88. package/dist/MutationTransactionContext.js +2 -2
  89. package/dist/MutationTransactionContext.js.map +1 -1
  90. package/dist/OfficialComponent.d.ts +50 -0
  91. package/dist/OfficialComponent.d.ts.map +1 -0
  92. package/dist/OfficialComponent.js +70 -0
  93. package/dist/OfficialComponent.js.map +1 -0
  94. package/dist/OrderedQuery.d.ts +4 -4
  95. package/dist/OrderedQuery.d.ts.map +1 -1
  96. package/dist/OrderedQuery.js.map +1 -1
  97. package/dist/QueryCtx.d.ts +1 -1
  98. package/dist/QueryCtx.d.ts.map +1 -1
  99. package/dist/QueryCtx.js.map +1 -1
  100. package/dist/QueryInitializer.d.ts +10 -10
  101. package/dist/QueryInitializer.d.ts.map +1 -1
  102. package/dist/QueryInitializer.js +2 -2
  103. package/dist/QueryInitializer.js.map +1 -1
  104. package/dist/QueryRunner.d.ts +2 -2
  105. package/dist/QueryRunner.d.ts.map +1 -1
  106. package/dist/QueryRunner.js +2 -2
  107. package/dist/QueryRunner.js.map +1 -1
  108. package/dist/QueryStream.d.ts +131 -23
  109. package/dist/QueryStream.d.ts.map +1 -1
  110. package/dist/QueryStream.js +142 -40
  111. package/dist/QueryStream.js.map +1 -1
  112. package/dist/QueryStreamCursor.d.ts +2 -2
  113. package/dist/QueryStreamCursor.d.ts.map +1 -1
  114. package/dist/QueryStreamCursor.js +1 -1
  115. package/dist/QueryStreamCursor.js.map +1 -1
  116. package/dist/QueryStreamIndexPrefix.d.ts +2 -2
  117. package/dist/QueryStreamIndexPrefix.d.ts.map +1 -1
  118. package/dist/QueryStreamIndexPrefix.js +1 -1
  119. package/dist/QueryStreamIndexPrefix.js.map +1 -1
  120. package/dist/QueryStreamIndexRange.d.ts +4 -4
  121. package/dist/QueryStreamIndexRange.d.ts.map +1 -1
  122. package/dist/QueryStreamIndexRange.js +2 -2
  123. package/dist/QueryStreamIndexRange.js.map +1 -1
  124. package/dist/QueryStreamKey.d.ts +2 -2
  125. package/dist/QueryStreamKey.d.ts.map +1 -1
  126. package/dist/QueryStreamKey.js +1 -1
  127. package/dist/QueryStreamKey.js.map +1 -1
  128. package/dist/QueryStreamKeyBounds.d.ts +3 -3
  129. package/dist/QueryStreamKeyBounds.d.ts.map +1 -1
  130. package/dist/QueryStreamKeyBounds.js +2 -2
  131. package/dist/QueryStreamKeyBounds.js.map +1 -1
  132. package/dist/QueryStreamKeyLayout.d.ts +1 -1
  133. package/dist/QueryStreamKeyLayout.d.ts.map +1 -1
  134. package/dist/QueryStreamKeyLayout.js +2 -2
  135. package/dist/QueryStreamKeyLayout.js.map +1 -1
  136. package/dist/QueryStreamKeyValues.d.ts +1 -1
  137. package/dist/QueryStreamKeyValues.d.ts.map +1 -1
  138. package/dist/QueryStreamKeyValues.js +1 -1
  139. package/dist/QueryStreamKeyValues.js.map +1 -1
  140. package/dist/QueryStreamPagination.d.ts +1 -1
  141. package/dist/QueryStreamPagination.d.ts.map +1 -1
  142. package/dist/QueryStreamPagination.js +1 -1
  143. package/dist/QueryStreamPagination.js.map +1 -1
  144. package/dist/QueryStreamReadBudget.d.ts +3 -2
  145. package/dist/QueryStreamReadBudget.d.ts.map +1 -1
  146. package/dist/QueryStreamReadBudget.js +7 -4
  147. package/dist/QueryStreamReadBudget.js.map +1 -1
  148. package/dist/QueryTransactionContext.js +2 -2
  149. package/dist/RegisteredConvexFunction.d.ts +27 -24
  150. package/dist/RegisteredConvexFunction.d.ts.map +1 -1
  151. package/dist/RegisteredConvexFunction.js +39 -26
  152. package/dist/RegisteredConvexFunction.js.map +1 -1
  153. package/dist/RegisteredFunction.d.ts +51 -47
  154. package/dist/RegisteredFunction.d.ts.map +1 -1
  155. package/dist/RegisteredFunction.js +126 -37
  156. package/dist/RegisteredFunction.js.map +1 -1
  157. package/dist/RegisteredFunctions.d.ts +3 -3
  158. package/dist/RegisteredFunctions.d.ts.map +1 -1
  159. package/dist/RegisteredFunctions.js.map +1 -1
  160. package/dist/RegisteredNodeFunction.d.ts +7 -7
  161. package/dist/RegisteredNodeFunction.d.ts.map +1 -1
  162. package/dist/RegisteredNodeFunction.js +8 -6
  163. package/dist/RegisteredNodeFunction.js.map +1 -1
  164. package/dist/Registry.d.ts +1 -1
  165. package/dist/Registry.d.ts.map +1 -1
  166. package/dist/Registry.js.map +1 -1
  167. package/dist/RegistryItems.d.ts +7 -0
  168. package/dist/RegistryItems.d.ts.map +1 -1
  169. package/dist/RegistryItems.js +8 -3
  170. package/dist/RegistryItems.js.map +1 -1
  171. package/dist/RequestMetadata.js +1 -1
  172. package/dist/ResolvedMiddleware.d.ts +2 -2
  173. package/dist/ResolvedMiddleware.d.ts.map +1 -1
  174. package/dist/ResolvedMiddleware.js.map +1 -1
  175. package/dist/Scheduler.js +2 -2
  176. package/dist/Storage.d.ts +6 -6
  177. package/dist/Storage.d.ts.map +1 -1
  178. package/dist/Storage.js +1 -1
  179. package/dist/Storage.js.map +1 -1
  180. package/dist/StorageActionWriter.d.ts +1 -1
  181. package/dist/StorageActionWriter.d.ts.map +1 -1
  182. package/dist/StorageActionWriter.js +1 -1
  183. package/dist/StorageActionWriter.js.map +1 -1
  184. package/dist/StorageReader.d.ts +1 -1
  185. package/dist/StorageReader.d.ts.map +1 -1
  186. package/dist/StorageReader.js +1 -1
  187. package/dist/StorageReader.js.map +1 -1
  188. package/dist/StorageWriter.d.ts +1 -1
  189. package/dist/StorageWriter.d.ts.map +1 -1
  190. package/dist/StorageWriter.js +1 -1
  191. package/dist/StorageWriter.js.map +1 -1
  192. package/dist/TableInfo.d.ts +2 -2
  193. package/dist/TableInfo.d.ts.map +1 -1
  194. package/dist/TableInfo.js.map +1 -1
  195. package/dist/TransactionMetadata.js +1 -1
  196. package/dist/VectorSearch.d.ts +1 -1
  197. package/dist/VectorSearch.d.ts.map +1 -1
  198. package/dist/VectorSearch.js +1 -1
  199. package/dist/VectorSearch.js.map +1 -1
  200. package/dist/index.d.ts +62 -60
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +20 -18
  203. package/dist/internal/AiGatewayDecisionClient.d.ts +1 -1
  204. package/dist/internal/AiGatewayDecisionClient.d.ts.map +1 -1
  205. package/dist/internal/AiGatewayDecisionClient.js +1 -1
  206. package/dist/internal/AiGatewayDecisionClient.js.map +1 -1
  207. package/dist/internal/AiGatewayLanguageClient.d.ts +1 -1
  208. package/dist/internal/AiGatewayLanguageClient.d.ts.map +1 -1
  209. package/dist/internal/AiGatewayLanguageClient.js +1 -1
  210. package/dist/internal/AiGatewayLanguageClient.js.map +1 -1
  211. package/dist/internal/AiGatewayServiceToken.js +1 -1
  212. package/dist/internal/DocumentPatch.d.ts +16 -0
  213. package/dist/internal/DocumentPatch.d.ts.map +1 -0
  214. package/dist/internal/DocumentPatch.js +36 -0
  215. package/dist/internal/DocumentPatch.js.map +1 -0
  216. package/dist/internal/observability.d.ts +5 -0
  217. package/dist/internal/observability.d.ts.map +1 -0
  218. package/dist/internal/observability.js +21 -0
  219. package/dist/internal/observability.js.map +1 -0
  220. package/dist/node.d.ts +1 -1
  221. package/dist/node.d.ts.map +1 -1
  222. package/package.json +5 -5
  223. package/src/ActionCall.ts +82 -0
  224. package/src/ActionCtx.ts +1 -1
  225. package/src/AiGatewayDecisionClient.ts +3 -3
  226. package/src/AiGatewayLanguageClient.ts +3 -3
  227. package/src/Auth.ts +24 -2
  228. package/src/ComponentCtx.ts +1 -1
  229. package/src/ConvexFunctionDefinitions.ts +10 -9
  230. package/src/CronJobs.ts +1 -1
  231. package/src/DataModel.ts +3 -3
  232. package/src/DatabaseReader.ts +4 -4
  233. package/src/DatabaseSchema.ts +1 -1
  234. package/src/DatabaseWriter.ts +189 -31
  235. package/src/Document.ts +4 -4
  236. package/src/FunctionImpl.ts +5 -5
  237. package/src/FunctionRegistryItem.ts +1 -1
  238. package/src/GroupImpl.ts +66 -13
  239. package/src/GroupRegistry.ts +11 -7
  240. package/src/Handler.ts +44 -28
  241. package/src/HttpRouter.ts +71 -21
  242. package/src/MiddlewareImpl.ts +17 -17
  243. package/src/MutationCtx.ts +1 -1
  244. package/src/MutationRunner.ts +1 -1
  245. package/src/MutationTransactionContext.ts +2 -2
  246. package/src/OfficialComponent.ts +151 -0
  247. package/src/OrderedQuery.ts +4 -4
  248. package/src/QueryCtx.ts +1 -1
  249. package/src/QueryInitializer.ts +9 -9
  250. package/src/QueryRunner.ts +2 -2
  251. package/src/QueryStream.ts +406 -76
  252. package/src/QueryStreamCursor.ts +3 -3
  253. package/src/QueryStreamIndexPrefix.ts +2 -2
  254. package/src/QueryStreamIndexRange.ts +4 -4
  255. package/src/QueryStreamKey.ts +2 -2
  256. package/src/QueryStreamKeyBounds.ts +3 -3
  257. package/src/QueryStreamKeyLayout.ts +1 -1
  258. package/src/QueryStreamKeyValues.ts +1 -1
  259. package/src/QueryStreamPagination.ts +2 -2
  260. package/src/QueryStreamReadBudget.ts +19 -6
  261. package/src/RegisteredConvexFunction.ts +38 -21
  262. package/src/RegisteredFunction.ts +209 -60
  263. package/src/RegisteredFunctions.ts +4 -4
  264. package/src/RegisteredNodeFunction.ts +15 -9
  265. package/src/Registry.ts +1 -1
  266. package/src/RegistryItems.ts +33 -2
  267. package/src/ResolvedMiddleware.ts +2 -2
  268. package/src/Storage.ts +3 -3
  269. package/src/StorageActionWriter.ts +1 -1
  270. package/src/StorageReader.ts +1 -1
  271. package/src/StorageWriter.ts +1 -1
  272. package/src/TableInfo.ts +2 -2
  273. package/src/VectorSearch.ts +1 -1
  274. package/src/index.ts +62 -60
  275. package/src/internal/AiGatewayDecisionClient.ts +2 -2
  276. package/src/internal/AiGatewayLanguageClient.ts +2 -2
  277. package/src/internal/DocumentPatch.ts +87 -0
  278. package/src/internal/observability.ts +27 -0
  279. 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":"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"}
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. Apply directly to the document
18
- * source before buffering, filtering, or combining its output.
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;;;;OAIG;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;;;wDAuDf,CAAC"}
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 Array from "effect/Array";
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)) return Tuple.make(Option.none(), State.Stopped(readCounts(state)));
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 * source 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 return Tuple.make(\n Option.none(),\n State.Stopped(readCounts(state)),\n );\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":";;;;;;;;;;;;;;;;;;;AAgCA,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,GAC3B,OAAO,MAAM,KACX,OAAO,KAAK,GACZ,MAAM,QAAQ,WAAW,KAAK,CAAC,CACjC;EAEF,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
+ {"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":"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"}
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 { layerForTarget } from "./Auth.js";
3
- import { layer } from "./ConvexConfigProvider.js";
4
- import { layer as layer$1 } from "./DatabaseReader.js";
5
- import { layer as layer$2 } from "./DatabaseWriter.js";
6
- import { layer as layer$3 } from "./ExecutionMetadata.js";
7
- import { layer as layer$4 } from "./RequestMetadata.js";
8
- import { layer as layer$5 } from "./TransactionMetadata.js";
9
- import { layer as layer$6 } from "./MutationCtx.js";
10
- import { layer as layer$7 } from "./MutationTransactionContext.js";
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 * as Layer from "effect/Layer";
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$1(databaseSchema, ctx.db), layer$3(ctx.meta), layer$5(ctx.meta), layer$10(ctx), layerForTarget(databaseSchema.target, ctx.auth), storageLayer(ctx.storage), layer$11(ctx.runQuery), layer$9(ctx, databaseSchema.target.scope), 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), { scheduler: new EffectScheduler.MixedScheduler("sync") }))
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$1(schema, ctx.db), layer$2(schema, ctx.db), layer$3(ctx.meta), layer$4(ctx.meta), layer$5(ctx.meta), layerForTarget(schema.target, ctx.auth), layer$12(ctx.scheduler, schema.target.scope), storageLayer(ctx.storage), StorageWriter.layer(ctx.storage, schema.target.scope), layer$11(ctx.runQuery), layer$8(ctx.runMutation), layer$10(ctx), layer$7(ctx), layer$6(ctx, schema.target.scope), 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), { scheduler: new EffectScheduler.MixedScheduler("sync") }))
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
- createLayer: (ctx) => Layer.mergeAll(actionLayer(schema, ctx), layer)
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 };