@gaganref/confect-server 0.0.0-stage → 10.3.1-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/CHANGELOG.md +2119 -0
  2. package/LICENSE +7 -0
  3. package/README.md +16 -2
  4. package/dist/ActionCtx.d.ts +10 -0
  5. package/dist/ActionCtx.d.ts.map +1 -0
  6. package/dist/ActionCtx.js +18 -0
  7. package/dist/ActionCtx.js.map +1 -0
  8. package/dist/ActionRunner.d.ts +16 -0
  9. package/dist/ActionRunner.d.ts.map +1 -0
  10. package/dist/ActionRunner.js +18 -0
  11. package/dist/ActionRunner.js.map +1 -0
  12. package/dist/AiGatewayDecisionClient.d.ts +20 -0
  13. package/dist/AiGatewayDecisionClient.d.ts.map +1 -0
  14. package/dist/AiGatewayDecisionClient.js +31 -0
  15. package/dist/AiGatewayDecisionClient.js.map +1 -0
  16. package/dist/AiGatewayDecisionModel.d.ts +24 -0
  17. package/dist/AiGatewayDecisionModel.d.ts.map +1 -0
  18. package/dist/AiGatewayDecisionModel.js +27 -0
  19. package/dist/AiGatewayDecisionModel.js.map +1 -0
  20. package/dist/AiGatewayLanguageClient.d.ts +21 -0
  21. package/dist/AiGatewayLanguageClient.d.ts.map +1 -0
  22. package/dist/AiGatewayLanguageClient.js +32 -0
  23. package/dist/AiGatewayLanguageClient.js.map +1 -0
  24. package/dist/AiGatewayLanguageModel.d.ts +95 -0
  25. package/dist/AiGatewayLanguageModel.d.ts.map +1 -0
  26. package/dist/AiGatewayLanguageModel.js +42 -0
  27. package/dist/AiGatewayLanguageModel.js.map +1 -0
  28. package/dist/Auth.d.ts +20 -0
  29. package/dist/Auth.d.ts.map +1 -0
  30. package/dist/Auth.js +31 -0
  31. package/dist/Auth.js.map +1 -0
  32. package/dist/BlobNotFoundError.d.ts +9 -0
  33. package/dist/BlobNotFoundError.d.ts.map +1 -0
  34. package/dist/BlobNotFoundError.js +13 -0
  35. package/dist/BlobNotFoundError.js.map +1 -0
  36. package/dist/Callback.d.ts +31 -0
  37. package/dist/Callback.d.ts.map +1 -0
  38. package/dist/Callback.js +182 -0
  39. package/dist/Callback.js.map +1 -0
  40. package/dist/ComponentCtx.d.ts +71 -0
  41. package/dist/ComponentCtx.d.ts.map +1 -0
  42. package/dist/ComponentCtx.js +0 -0
  43. package/dist/ConvexConfigProvider.d.ts +21 -0
  44. package/dist/ConvexConfigProvider.d.ts.map +1 -0
  45. package/dist/ConvexConfigProvider.js +36 -0
  46. package/dist/ConvexConfigProvider.js.map +1 -0
  47. package/dist/ConvexFunctionDefinitions.d.ts +25 -0
  48. package/dist/ConvexFunctionDefinitions.d.ts.map +1 -0
  49. package/dist/ConvexFunctionDefinitions.js +25 -0
  50. package/dist/ConvexFunctionDefinitions.js.map +1 -0
  51. package/dist/ConvexLogger.d.ts +17 -0
  52. package/dist/ConvexLogger.d.ts.map +1 -0
  53. package/dist/ConvexLogger.js +33 -0
  54. package/dist/ConvexLogger.js.map +1 -0
  55. package/dist/CronJob.d.ts +14 -0
  56. package/dist/CronJob.d.ts.map +1 -0
  57. package/dist/CronJob.js +22 -0
  58. package/dist/CronJob.js.map +1 -0
  59. package/dist/CronJobs.d.ts +22 -0
  60. package/dist/CronJobs.d.ts.map +1 -0
  61. package/dist/CronJobs.js +83 -0
  62. package/dist/CronJobs.js.map +1 -0
  63. package/dist/DataModel.d.ts +28 -0
  64. package/dist/DataModel.d.ts.map +1 -0
  65. package/dist/DataModel.js +7 -0
  66. package/dist/DataModel.js.map +1 -0
  67. package/dist/DatabaseReader.d.ts +26 -0
  68. package/dist/DatabaseReader.d.ts.map +1 -0
  69. package/dist/DatabaseReader.js +33 -0
  70. package/dist/DatabaseReader.js.map +1 -0
  71. package/dist/DatabaseSchema.d.ts +67 -0
  72. package/dist/DatabaseSchema.d.ts.map +1 -0
  73. package/dist/DatabaseSchema.js +61 -0
  74. package/dist/DatabaseSchema.js.map +1 -0
  75. package/dist/DatabaseWriter.d.ts +44 -0
  76. package/dist/DatabaseWriter.d.ts.map +1 -0
  77. package/dist/DatabaseWriter.js +47 -0
  78. package/dist/DatabaseWriter.js.map +1 -0
  79. package/dist/Document.d.ts +37 -0
  80. package/dist/Document.d.ts.map +1 -0
  81. package/dist/Document.js +54 -0
  82. package/dist/Document.js.map +1 -0
  83. package/dist/ExecutionMetadata.d.ts +13 -0
  84. package/dist/ExecutionMetadata.d.ts.map +1 -0
  85. package/dist/ExecutionMetadata.js +19 -0
  86. package/dist/ExecutionMetadata.js.map +1 -0
  87. package/dist/FunctionImpl.d.ts +39 -0
  88. package/dist/FunctionImpl.d.ts.map +1 -0
  89. package/dist/FunctionImpl.js +46 -0
  90. package/dist/FunctionImpl.js.map +1 -0
  91. package/dist/FunctionRegistryItem.d.ts +36 -0
  92. package/dist/FunctionRegistryItem.d.ts.map +1 -0
  93. package/dist/FunctionRegistryItem.js +34 -0
  94. package/dist/FunctionRegistryItem.js.map +1 -0
  95. package/dist/GroupImpl.d.ts +77 -0
  96. package/dist/GroupImpl.d.ts.map +1 -0
  97. package/dist/GroupImpl.js +81 -0
  98. package/dist/GroupImpl.js.map +1 -0
  99. package/dist/GroupRegistry.d.ts +8 -0
  100. package/dist/GroupRegistry.d.ts.map +1 -0
  101. package/dist/GroupRegistry.js +26 -0
  102. package/dist/GroupRegistry.js.map +1 -0
  103. package/dist/Handler.d.ts +47 -0
  104. package/dist/Handler.d.ts.map +1 -0
  105. package/dist/Handler.js +7 -0
  106. package/dist/Handler.js.map +1 -0
  107. package/dist/HttpRouter.d.ts +80 -0
  108. package/dist/HttpRouter.d.ts.map +1 -0
  109. package/dist/HttpRouter.js +195 -0
  110. package/dist/HttpRouter.js.map +1 -0
  111. package/dist/MiddlewareImpl.d.ts +79 -0
  112. package/dist/MiddlewareImpl.d.ts.map +1 -0
  113. package/dist/MiddlewareImpl.js +58 -0
  114. package/dist/MiddlewareImpl.js.map +1 -0
  115. package/dist/MiddlewareRegistryItem.d.ts +12 -0
  116. package/dist/MiddlewareRegistryItem.d.ts.map +1 -0
  117. package/dist/MiddlewareRegistryItem.js +15 -0
  118. package/dist/MiddlewareRegistryItem.js.map +1 -0
  119. package/dist/MutationCtx.d.ts +10 -0
  120. package/dist/MutationCtx.d.ts.map +1 -0
  121. package/dist/MutationCtx.js +18 -0
  122. package/dist/MutationCtx.js.map +1 -0
  123. package/dist/MutationRunner.d.ts +27 -0
  124. package/dist/MutationRunner.d.ts.map +1 -0
  125. package/dist/MutationRunner.js +28 -0
  126. package/dist/MutationRunner.js.map +1 -0
  127. package/dist/MutationTransactionContext.d.ts +17 -0
  128. package/dist/MutationTransactionContext.d.ts.map +1 -0
  129. package/dist/MutationTransactionContext.js +20 -0
  130. package/dist/MutationTransactionContext.js.map +1 -0
  131. package/dist/OrderedQuery.d.ts +32 -0
  132. package/dist/OrderedQuery.d.ts.map +1 -0
  133. package/dist/OrderedQuery.js +36 -0
  134. package/dist/OrderedQuery.js.map +1 -0
  135. package/dist/QueryCtx.d.ts +10 -0
  136. package/dist/QueryCtx.d.ts.map +1 -0
  137. package/dist/QueryCtx.js +18 -0
  138. package/dist/QueryCtx.js.map +1 -0
  139. package/dist/QueryInitializer.d.ts +75 -0
  140. package/dist/QueryInitializer.d.ts.map +1 -0
  141. package/dist/QueryInitializer.js +105 -0
  142. package/dist/QueryInitializer.js.map +1 -0
  143. package/dist/QueryRunner.d.ts +46 -0
  144. package/dist/QueryRunner.d.ts.map +1 -0
  145. package/dist/QueryRunner.js +30 -0
  146. package/dist/QueryRunner.js.map +1 -0
  147. package/dist/QueryStream.d.ts +678 -0
  148. package/dist/QueryStream.d.ts.map +1 -0
  149. package/dist/QueryStream.js +943 -0
  150. package/dist/QueryStream.js.map +1 -0
  151. package/dist/QueryStreamCursor.d.ts +39 -0
  152. package/dist/QueryStreamCursor.d.ts.map +1 -0
  153. package/dist/QueryStreamCursor.js +52 -0
  154. package/dist/QueryStreamCursor.js.map +1 -0
  155. package/dist/QueryStreamIndexPrefix.d.ts +48 -0
  156. package/dist/QueryStreamIndexPrefix.d.ts.map +1 -0
  157. package/dist/QueryStreamIndexPrefix.js +38 -0
  158. package/dist/QueryStreamIndexPrefix.js.map +1 -0
  159. package/dist/QueryStreamIndexRange.d.ts +193 -0
  160. package/dist/QueryStreamIndexRange.d.ts.map +1 -0
  161. package/dist/QueryStreamIndexRange.js +241 -0
  162. package/dist/QueryStreamIndexRange.js.map +1 -0
  163. package/dist/QueryStreamKey.d.ts +64 -0
  164. package/dist/QueryStreamKey.d.ts.map +1 -0
  165. package/dist/QueryStreamKey.js +69 -0
  166. package/dist/QueryStreamKey.js.map +1 -0
  167. package/dist/QueryStreamKeyBounds.d.ts +136 -0
  168. package/dist/QueryStreamKeyBounds.d.ts.map +1 -0
  169. package/dist/QueryStreamKeyBounds.js +208 -0
  170. package/dist/QueryStreamKeyBounds.js.map +1 -0
  171. package/dist/QueryStreamKeyLabels.d.ts +27 -0
  172. package/dist/QueryStreamKeyLabels.d.ts.map +1 -0
  173. package/dist/QueryStreamKeyLabels.js +22 -0
  174. package/dist/QueryStreamKeyLabels.js.map +1 -0
  175. package/dist/QueryStreamKeyLayout.d.ts +179 -0
  176. package/dist/QueryStreamKeyLayout.d.ts.map +1 -0
  177. package/dist/QueryStreamKeyLayout.js +167 -0
  178. package/dist/QueryStreamKeyLayout.js.map +1 -0
  179. package/dist/QueryStreamKeyValues.d.ts +40 -0
  180. package/dist/QueryStreamKeyValues.d.ts.map +1 -0
  181. package/dist/QueryStreamKeyValues.js +57 -0
  182. package/dist/QueryStreamKeyValues.js.map +1 -0
  183. package/dist/QueryStreamOrderDirection.d.ts +24 -0
  184. package/dist/QueryStreamOrderDirection.d.ts.map +1 -0
  185. package/dist/QueryStreamOrderDirection.js +11 -0
  186. package/dist/QueryStreamOrderDirection.js.map +1 -0
  187. package/dist/QueryStreamPagination.d.ts +264 -0
  188. package/dist/QueryStreamPagination.d.ts.map +1 -0
  189. package/dist/QueryStreamPagination.js +172 -0
  190. package/dist/QueryStreamPagination.js.map +1 -0
  191. package/dist/QueryStreamReadBudget.d.ts +63 -0
  192. package/dist/QueryStreamReadBudget.d.ts.map +1 -0
  193. package/dist/QueryStreamReadBudget.js +81 -0
  194. package/dist/QueryStreamReadBudget.js.map +1 -0
  195. package/dist/QueryTransactionContext.d.ts +16 -0
  196. package/dist/QueryTransactionContext.d.ts.map +1 -0
  197. package/dist/QueryTransactionContext.js +17 -0
  198. package/dist/QueryTransactionContext.js.map +1 -0
  199. package/dist/RegisteredConvexFunction.d.ts +359 -0
  200. package/dist/RegisteredConvexFunction.d.ts.map +1 -0
  201. package/dist/RegisteredConvexFunction.js +154 -0
  202. package/dist/RegisteredConvexFunction.js.map +1 -0
  203. package/dist/RegisteredFunction.d.ts +143 -0
  204. package/dist/RegisteredFunction.d.ts.map +1 -0
  205. package/dist/RegisteredFunction.js +125 -0
  206. package/dist/RegisteredFunction.js.map +1 -0
  207. package/dist/RegisteredFunctions.d.ts +57 -0
  208. package/dist/RegisteredFunctions.d.ts.map +1 -0
  209. package/dist/RegisteredFunctions.js +32 -0
  210. package/dist/RegisteredFunctions.js.map +1 -0
  211. package/dist/RegisteredNodeFunction.d.ts +11 -0
  212. package/dist/RegisteredNodeFunction.d.ts.map +1 -0
  213. package/dist/RegisteredNodeFunction.js +45 -0
  214. package/dist/RegisteredNodeFunction.js.map +1 -0
  215. package/dist/Registry.d.ts +12 -0
  216. package/dist/Registry.d.ts.map +1 -0
  217. package/dist/Registry.js +17 -0
  218. package/dist/Registry.js.map +1 -0
  219. package/dist/RegistryItems.d.ts +21 -0
  220. package/dist/RegistryItems.d.ts.map +1 -0
  221. package/dist/RegistryItems.js +27 -0
  222. package/dist/RegistryItems.js.map +1 -0
  223. package/dist/RequestMetadata.d.ts +12 -0
  224. package/dist/RequestMetadata.d.ts.map +1 -0
  225. package/dist/RequestMetadata.js +16 -0
  226. package/dist/RequestMetadata.js.map +1 -0
  227. package/dist/ResolvedMiddleware.d.ts +24 -0
  228. package/dist/ResolvedMiddleware.d.ts.map +1 -0
  229. package/dist/ResolvedMiddleware.js +34 -0
  230. package/dist/ResolvedMiddleware.js.map +1 -0
  231. package/dist/Scheduler.d.ts +31 -0
  232. package/dist/Scheduler.d.ts.map +1 -0
  233. package/dist/Scheduler.js +35 -0
  234. package/dist/Scheduler.js.map +1 -0
  235. package/dist/Storage.d.ts +22 -0
  236. package/dist/Storage.d.ts.map +1 -0
  237. package/dist/Storage.js +27 -0
  238. package/dist/Storage.js.map +1 -0
  239. package/dist/StorageActionWriter.d.ts +35 -0
  240. package/dist/StorageActionWriter.d.ts.map +1 -0
  241. package/dist/StorageActionWriter.js +24 -0
  242. package/dist/StorageActionWriter.js.map +1 -0
  243. package/dist/StorageReader.d.ts +26 -0
  244. package/dist/StorageReader.d.ts.map +1 -0
  245. package/dist/StorageReader.js +22 -0
  246. package/dist/StorageReader.js.map +1 -0
  247. package/dist/StorageWriter.d.ts +29 -0
  248. package/dist/StorageWriter.d.ts.map +1 -0
  249. package/dist/StorageWriter.js +24 -0
  250. package/dist/StorageWriter.js.map +1 -0
  251. package/dist/Table.d.ts +274 -0
  252. package/dist/Table.d.ts.map +1 -0
  253. package/dist/Table.js +70 -0
  254. package/dist/Table.js.map +1 -0
  255. package/dist/TableInfo.d.ts +44 -0
  256. package/dist/TableInfo.d.ts.map +1 -0
  257. package/dist/TableInfo.js +7 -0
  258. package/dist/TableInfo.js.map +1 -0
  259. package/dist/TransactionMetadata.d.ts +12 -0
  260. package/dist/TransactionMetadata.d.ts.map +1 -0
  261. package/dist/TransactionMetadata.js +16 -0
  262. package/dist/TransactionMetadata.js.map +1 -0
  263. package/dist/VectorSearch.d.ts +23 -0
  264. package/dist/VectorSearch.d.ts.map +1 -0
  265. package/dist/VectorSearch.js +17 -0
  266. package/dist/VectorSearch.js.map +1 -0
  267. package/dist/_virtual/_rolldown/runtime.js +13 -0
  268. package/dist/index.d.ts +88 -0
  269. package/dist/index.d.ts.map +1 -0
  270. package/dist/index.js +61 -0
  271. package/dist/internal/AiGatewayDecisionClient.d.ts +7 -0
  272. package/dist/internal/AiGatewayDecisionClient.d.ts.map +1 -0
  273. package/dist/internal/AiGatewayDecisionClient.js +19 -0
  274. package/dist/internal/AiGatewayDecisionClient.js.map +1 -0
  275. package/dist/internal/AiGatewayLanguageClient.d.ts +7 -0
  276. package/dist/internal/AiGatewayLanguageClient.d.ts.map +1 -0
  277. package/dist/internal/AiGatewayLanguageClient.js +19 -0
  278. package/dist/internal/AiGatewayLanguageClient.js.map +1 -0
  279. package/dist/internal/AiGatewayServiceToken.d.ts +46 -0
  280. package/dist/internal/AiGatewayServiceToken.d.ts.map +1 -0
  281. package/dist/internal/AiGatewayServiceToken.js +62 -0
  282. package/dist/internal/AiGatewayServiceToken.js.map +1 -0
  283. package/dist/internal/constants.d.ts +2 -0
  284. package/dist/internal/constants.d.ts.map +1 -0
  285. package/dist/internal/constants.js +6 -0
  286. package/dist/internal/constants.js.map +1 -0
  287. package/dist/internal/utils.d.ts +13 -0
  288. package/dist/internal/utils.d.ts.map +1 -0
  289. package/dist/internal/utils.js +50 -0
  290. package/dist/internal/utils.js.map +1 -0
  291. package/dist/node.d.ts +2 -0
  292. package/dist/node.d.ts.map +1 -0
  293. package/dist/node.js +1 -0
  294. package/package.json +68 -3
  295. package/src/ActionCtx.ts +45 -0
  296. package/src/ActionRunner.ts +36 -0
  297. package/src/AiGatewayDecisionClient.ts +40 -0
  298. package/src/AiGatewayDecisionModel.ts +46 -0
  299. package/src/AiGatewayLanguageClient.ts +41 -0
  300. package/src/AiGatewayLanguageModel.ts +61 -0
  301. package/src/Auth.ts +51 -0
  302. package/src/BlobNotFoundError.ts +12 -0
  303. package/src/Callback.ts +313 -0
  304. package/src/ComponentCtx.ts +192 -0
  305. package/src/ConvexConfigProvider.ts +39 -0
  306. package/src/ConvexFunctionDefinitions.ts +91 -0
  307. package/src/ConvexLogger.ts +43 -0
  308. package/src/CronJob.ts +42 -0
  309. package/src/CronJobs.ts +165 -0
  310. package/src/DataModel.ts +81 -0
  311. package/src/DatabaseReader.ts +118 -0
  312. package/src/DatabaseSchema.ts +139 -0
  313. package/src/DatabaseWriter.ts +232 -0
  314. package/src/Document.ts +146 -0
  315. package/src/ExecutionMetadata.ts +26 -0
  316. package/src/FunctionImpl.ts +96 -0
  317. package/src/FunctionRegistryItem.ts +85 -0
  318. package/src/GroupImpl.ts +167 -0
  319. package/src/GroupRegistry.ts +41 -0
  320. package/src/Handler.ts +191 -0
  321. package/src/HttpRouter.ts +388 -0
  322. package/src/MiddlewareImpl.ts +247 -0
  323. package/src/MiddlewareRegistryItem.ts +21 -0
  324. package/src/MutationCtx.ts +45 -0
  325. package/src/MutationRunner.ts +66 -0
  326. package/src/MutationTransactionContext.ts +48 -0
  327. package/src/OrderedQuery.ts +136 -0
  328. package/src/QueryCtx.ts +45 -0
  329. package/src/QueryInitializer.ts +537 -0
  330. package/src/QueryRunner.ts +91 -0
  331. package/src/QueryStream.ts +2476 -0
  332. package/src/QueryStreamCursor.ts +99 -0
  333. package/src/QueryStreamIndexPrefix.ts +79 -0
  334. package/src/QueryStreamIndexRange.ts +489 -0
  335. package/src/QueryStreamKey.ts +118 -0
  336. package/src/QueryStreamKeyBounds.ts +395 -0
  337. package/src/QueryStreamKeyLabels.ts +56 -0
  338. package/src/QueryStreamKeyLayout.ts +382 -0
  339. package/src/QueryStreamKeyValues.ts +112 -0
  340. package/src/QueryStreamOrderDirection.ts +29 -0
  341. package/src/QueryStreamPagination.ts +357 -0
  342. package/src/QueryStreamReadBudget.ts +167 -0
  343. package/src/QueryTransactionContext.ts +37 -0
  344. package/src/RegisteredConvexFunction.ts +415 -0
  345. package/src/RegisteredFunction.ts +391 -0
  346. package/src/RegisteredFunctions.ts +88 -0
  347. package/src/RegisteredNodeFunction.ts +120 -0
  348. package/src/Registry.ts +17 -0
  349. package/src/RegistryItems.ts +40 -0
  350. package/src/RequestMetadata.ts +20 -0
  351. package/src/ResolvedMiddleware.ts +70 -0
  352. package/src/Scheduler.ts +85 -0
  353. package/src/Storage.ts +37 -0
  354. package/src/StorageActionWriter.ts +59 -0
  355. package/src/StorageReader.ts +59 -0
  356. package/src/StorageWriter.ts +58 -0
  357. package/src/Table.ts +156 -0
  358. package/src/TableInfo.ts +106 -0
  359. package/src/TransactionMetadata.ts +20 -0
  360. package/src/VectorSearch.ts +75 -0
  361. package/src/index.ts +87 -0
  362. package/src/internal/AiGatewayDecisionClient.ts +16 -0
  363. package/src/internal/AiGatewayLanguageClient.ts +16 -0
  364. package/src/internal/AiGatewayServiceToken.ts +129 -0
  365. package/src/internal/constants.ts +1 -0
  366. package/src/internal/utils.ts +89 -0
  367. package/src/node.ts +1 -0
@@ -0,0 +1,182 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Ref from "@confect/core/Ref";
3
+ import * as Effect from "effect/Effect";
4
+ import { createFunctionHandle } from "convex/server";
5
+ import * as Schema from "effect/Schema";
6
+ import { pipe } from "effect/Function";
7
+ import * as Option from "effect/Option";
8
+ import * as Callback from "@confect/core/Callback";
9
+ import * as MiddlewareSpec from "@confect/core/MiddlewareSpec";
10
+ import { UnsupportedPropertySignatureKeyTypeError, compileAst } from "@confect/core/SchemaToValidator";
11
+ import { convexToJson, v } from "convex/values";
12
+ import * as Array from "effect/Array";
13
+ import * as Number from "effect/Number";
14
+ import * as Order from "effect/Order";
15
+ import * as Predicate from "effect/Predicate";
16
+ import * as Result from "effect/Result";
17
+ import * as SchemaAST from "effect/SchemaAST";
18
+ //#region src/Callback.ts
19
+ var Callback_exports = /* @__PURE__ */ __exportAll({
20
+ CallbackContractMismatch: () => CallbackContractMismatch,
21
+ create: () => create
22
+ });
23
+ /**
24
+ * The host function does not satisfy the contract on one side. `expected` and
25
+ * `actual` describe the contract's and the host's validators, with union
26
+ * members in a fixed order, or the reason a schema is unsupported.
27
+ */
28
+ var CallbackContractMismatch = class extends Schema.TaggedError()("CallbackContractMismatch", {
29
+ contract: Schema.String,
30
+ side: Schema.Literals([
31
+ "args",
32
+ "returns",
33
+ "error"
34
+ ]),
35
+ expected: Schema.Json,
36
+ actual: Schema.Json
37
+ }) {
38
+ get message() {
39
+ return `The host function does not satisfy callback contract "${this.contract}": its ${this.side === "error" ? "errors" : this.side} compile to ${JSON.stringify(this.actual)}, the contract's to ${JSON.stringify(this.expected)}.`;
40
+ }
41
+ };
42
+ const alternatives = (validator) => validator.kind === "union" ? validator.members.flatMap(alternatives) : [validator];
43
+ const literalKinds = {
44
+ string: "string",
45
+ number: "float64",
46
+ bigint: "int64",
47
+ boolean: "boolean"
48
+ };
49
+ /**
50
+ * The alternatives `validators` accept, without those another alternative
51
+ * already covers: everything under `v.any()`, and a literal under its base
52
+ * kind. `true` and `false` together are `v.boolean()`.
53
+ */
54
+ const alternativesOf = (validators) => {
55
+ const flat = validators.flatMap(alternatives);
56
+ if (flat.some(({ kind }) => kind === "any")) return [v.any()];
57
+ const booleans = new Set(flat.flatMap((validator) => validator.kind === "literal" && typeof validator.value === "boolean" ? [validator.value] : []));
58
+ const widened = booleans.has(true) && booleans.has(false) ? [...flat, v.boolean()] : flat;
59
+ const kinds = new Set(widened.map(({ kind }) => kind));
60
+ return widened.filter((validator) => validator.kind !== "literal" || !kinds.has(literalKinds[typeof validator.value] ?? ""));
61
+ };
62
+ const keyed = (described) => pipe(described, Array.map((json) => [JSON.stringify(json), json]), Array.dedupeWith(([a], [b]) => a === b), Array.sortWith(([key]) => key, Order.String));
63
+ /**
64
+ * The distinct alternatives `validators` accept, keyed by their description and
65
+ * sorted by it, so union order and repetition do not count as differences.
66
+ */
67
+ const membersOf = (validators) => keyed(alternativesOf(validators).map(describe));
68
+ const unionOf = (members) => {
69
+ const [only, ...rest] = members;
70
+ return only !== void 0 && rest.length === 0 ? only[1] : {
71
+ kind: "union",
72
+ members: members.map(([, described]) => described)
73
+ };
74
+ };
75
+ const describe = (validator) => {
76
+ switch (validator.kind) {
77
+ case "id": return {
78
+ kind: "id",
79
+ tableName: validator.tableName
80
+ };
81
+ case "literal": return {
82
+ kind: "literal",
83
+ value: convexToJson(validator.value)
84
+ };
85
+ case "array": return {
86
+ kind: "array",
87
+ element: describe(validator.element)
88
+ };
89
+ case "record": return {
90
+ kind: "record",
91
+ key: describe(validator.key),
92
+ value: describe(validator.value)
93
+ };
94
+ case "object": return {
95
+ kind: "object",
96
+ fields: Object.fromEntries(pipe(Object.entries(validator.fields), Array.sortWith(([name]) => name, Order.String), Array.map(([name, field]) => [name, field.isOptional === "optional" ? {
97
+ kind: "optional",
98
+ value: describe(field)
99
+ } : describe(field)])))
100
+ };
101
+ case "union": return unionOf(membersOf([validator]));
102
+ default: return { kind: validator.kind };
103
+ }
104
+ };
105
+ const ownError = (provenance) => "error" in provenance && provenance.error !== void 0 ? [provenance.error] : [];
106
+ const errorAlternatives = (schema) => SchemaAST.isUnion(schema.ast) && Predicate.hasProperty(schema, "members") && Array.isArray(schema.members) ? schema.members.flatMap((member) => Schema.isSchema(member) ? errorAlternatives(member) : []) : [schema];
107
+ /**
108
+ * Compile args field by field, as registration does, so a recursive field does
109
+ * not widen the entire args object to `v.any()`.
110
+ */
111
+ const compileArgs = (ast) => Effect.forEach(ast.propertySignatures, ({ name, type }) => {
112
+ if (typeof name !== "string") return Effect.fail(new UnsupportedPropertySignatureKeyTypeError({ propertyKey: name }));
113
+ return Option.match(Number.parse(name), {
114
+ onSome: (propertyKey) => Effect.fail(new UnsupportedPropertySignatureKeyTypeError({ propertyKey })),
115
+ onNone: () => {
116
+ const optional = SchemaAST.isOptional(type);
117
+ return compileAst(type, optional).pipe(Effect.map((validator) => [name, optional ? v.optional(validator) : validator]));
118
+ }
119
+ });
120
+ }).pipe(Effect.map((fields) => v.object(Object.fromEntries(fields))));
121
+ const compileSchema = (schema, side) => {
122
+ const ast = Schema.toEncoded(schema).ast;
123
+ return Effect.runSync(Effect.result(side === "args" && SchemaAST.isObjects(ast) ? compileArgs(ast) : compileAst(ast)));
124
+ };
125
+ const describeCompiled = (compiled) => unionOf(keyed([...membersOf(Array.getSuccesses(compiled)).map(([, json]) => json), ...Array.getFailures(compiled).map((error) => ({
126
+ kind: "unsupported",
127
+ reason: error.message
128
+ }))]));
129
+ /**
130
+ * Compare the validators Convex would compile for the contract and for the host
131
+ * function, both in the application's ID scope, so a component's IDs are
132
+ * strings on both sides and the host's own IDs stay `v.id`. A host that is
133
+ * itself a component registers its own IDs as `v.id` in its scope, which this
134
+ * check cannot see and compares as strings. Args and returns must be equal.
135
+ * Every error the host may fail with, its middleware's included, must be one
136
+ * the contract declares: the same schema, or one compiling to the same
137
+ * validator. The host may declare fewer errors.
138
+ */
139
+ const verify = (contract, ref) => {
140
+ const mismatch = (side, expected, actual) => Result.fail(new CallbackContractMismatch({
141
+ contract: contract.id,
142
+ side,
143
+ expected,
144
+ actual
145
+ }));
146
+ const provenance = contract.functionProvenance;
147
+ for (const side of ["args", "returns"]) {
148
+ const expected = compileSchema(provenance[side], side);
149
+ const actual = compileSchema(ref[side], side);
150
+ const expectedDescription = describeCompiled([expected]);
151
+ const actualDescription = describeCompiled([actual]);
152
+ if (Result.isFailure(expected) || Result.isFailure(actual) || JSON.stringify(expectedDescription) !== JSON.stringify(actualDescription)) return mismatch(side, expectedDescription, actualDescription);
153
+ }
154
+ const declared = ownError(provenance).flatMap(errorAlternatives);
155
+ const undeclared = [...ownError(ref), ...MiddlewareSpec.errorSchemas(ref.middlewareSpecs)].flatMap(errorAlternatives).filter((schema) => !declared.includes(schema));
156
+ if (undeclared.length > 0) {
157
+ const expectedErrors = declared.map((schema) => compileSchema(schema));
158
+ const actualErrors = undeclared.map((schema) => compileSchema(schema));
159
+ const keys = new Set(membersOf(Array.getSuccesses(expectedErrors)).map(([key]) => key));
160
+ if (Array.getFailures(actualErrors).length > 0 || !membersOf(Array.getSuccesses(actualErrors)).every(([key]) => keys.has(key))) return mismatch("error", describeCompiled(expectedErrors), describeCompiled(actualErrors));
161
+ }
162
+ return Result.void;
163
+ };
164
+ /**
165
+ * Create a handle a component can store and run to call `ref` under `contract`.
166
+ * A ref whose function type, args or returns visibly differ from the contract
167
+ * on the wire, or whose errors are undeclared, is a type error. The host may
168
+ * declare fewer errors. Before asking Convex for the handle, a Confect ref's
169
+ * compiled validators are checked against the contract's. A mismatch or an
170
+ * unsupported schema fails with `CallbackContractMismatch`. A plain Convex ref
171
+ * has no codecs to compile, so only the type check applies to it. A ref to a
172
+ * function that is not deployed is a defect.
173
+ */
174
+ const create = Effect.fn("Callback.create")(function* (contract, ref) {
175
+ if (ref._tag === "Confect") yield* Effect.fromResult(verify(contract, ref));
176
+ const text = yield* Effect.promise(() => createFunctionHandle(Ref.getFunctionReference(ref)));
177
+ return yield* Schema.decodeEffect(Callback.handle(contract))(text).pipe(Effect.orDie);
178
+ });
179
+ //#endregion
180
+ export { CallbackContractMismatch, Callback_exports, create };
181
+
182
+ //# sourceMappingURL=Callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Callback.js","names":[],"sources":["../src/Callback.ts"],"sourcesContent":["import * as Callback from \"@confect/core/Callback\";\nimport * as MiddlewareSpec from \"@confect/core/MiddlewareSpec\";\nimport * as Ref from \"@confect/core/Ref\";\nimport {\n compileAst,\n UnsupportedPropertySignatureKeyTypeError,\n} from \"@confect/core/SchemaToValidator\";\nimport { createFunctionHandle } from \"convex/server\";\nimport { convexToJson, v, type GenericValidator } from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport { pipe } from \"effect/Function\";\nimport * as Number from \"effect/Number\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaAST from \"effect/SchemaAST\";\n\n/**\n * The host function does not satisfy the contract on one side. `expected` and\n * `actual` describe the contract's and the host's validators, with union\n * members in a fixed order, or the reason a schema is unsupported.\n */\nexport class CallbackContractMismatch extends Schema.TaggedError<CallbackContractMismatch>()(\n \"CallbackContractMismatch\",\n {\n contract: Schema.String,\n side: Schema.Literals([\"args\", \"returns\", \"error\"]),\n expected: Schema.Json,\n actual: Schema.Json,\n },\n) {\n override get message(): string {\n return `The host function does not satisfy callback contract \"${this.contract}\": its ${this.side === \"error\" ? \"errors\" : this.side} compile to ${JSON.stringify(this.actual)}, the contract's to ${JSON.stringify(this.expected)}.`;\n }\n}\n\nconst alternatives = (\n validator: GenericValidator,\n): ReadonlyArray<GenericValidator> =>\n validator.kind === \"union\"\n ? validator.members.flatMap(alternatives)\n : [validator];\n\nconst literalKinds: Record<string, string> = {\n string: \"string\",\n number: \"float64\",\n bigint: \"int64\",\n boolean: \"boolean\",\n};\n\n/**\n * The alternatives `validators` accept, without those another alternative\n * already covers: everything under `v.any()`, and a literal under its base\n * kind. `true` and `false` together are `v.boolean()`.\n */\nconst alternativesOf = (\n validators: ReadonlyArray<GenericValidator>,\n): ReadonlyArray<GenericValidator> => {\n const flat = validators.flatMap(alternatives);\n if (flat.some(({ kind }) => kind === \"any\")) {\n return [v.any()];\n }\n const booleans = new Set(\n flat.flatMap((validator) =>\n validator.kind === \"literal\" && typeof validator.value === \"boolean\"\n ? [validator.value]\n : [],\n ),\n );\n const widened =\n booleans.has(true) && booleans.has(false) ? [...flat, v.boolean()] : flat;\n const kinds = new Set<string>(widened.map(({ kind }) => kind));\n return widened.filter(\n (validator) =>\n validator.kind !== \"literal\" ||\n !kinds.has(literalKinds[typeof validator.value] ?? \"\"),\n );\n};\n\nconst keyed = (\n described: ReadonlyArray<Schema.Json>,\n): ReadonlyArray<readonly [string, Schema.Json]> =>\n pipe(\n described,\n Array.map((json) => [JSON.stringify(json), json] as const),\n Array.dedupeWith(([a], [b]) => a === b),\n Array.sortWith(([key]) => key, Order.String),\n );\n\n/**\n * The distinct alternatives `validators` accept, keyed by their description and\n * sorted by it, so union order and repetition do not count as differences.\n */\nconst membersOf = (validators: ReadonlyArray<GenericValidator>) =>\n keyed(alternativesOf(validators).map(describe));\n\nconst unionOf = (\n members: ReadonlyArray<readonly [string, Schema.Json]>,\n): Schema.Json => {\n const [only, ...rest] = members;\n return only !== undefined && rest.length === 0\n ? only[1]\n : { kind: \"union\", members: members.map(([, described]) => described) };\n};\n\nconst describe = (validator: GenericValidator): Schema.Json => {\n switch (validator.kind) {\n case \"id\":\n return { kind: \"id\", tableName: validator.tableName };\n case \"literal\":\n return { kind: \"literal\", value: convexToJson(validator.value) };\n case \"array\":\n return { kind: \"array\", element: describe(validator.element) };\n case \"record\":\n return {\n kind: \"record\",\n key: describe(validator.key),\n value: describe(validator.value),\n };\n case \"object\":\n return {\n kind: \"object\",\n fields: Object.fromEntries(\n pipe(\n Object.entries(validator.fields),\n Array.sortWith(([name]) => name, Order.String),\n Array.map(([name, field]) => [\n name,\n field.isOptional === \"optional\"\n ? { kind: \"optional\", value: describe(field) }\n : describe(field),\n ]),\n ),\n ),\n };\n case \"union\":\n return unionOf(membersOf([validator]));\n default:\n return { kind: validator.kind };\n }\n};\n\nconst ownError = (provenance: {\n readonly error?: Schema.Codec<any, any>;\n}): ReadonlyArray<Schema.Codec<any, any>> =>\n \"error\" in provenance && provenance.error !== undefined\n ? [provenance.error]\n : [];\n\nconst errorAlternatives = (schema: Schema.Top): ReadonlyArray<Schema.Top> =>\n SchemaAST.isUnion(schema.ast) &&\n Predicate.hasProperty(schema, \"members\") &&\n Array.isArray(schema.members)\n ? schema.members.flatMap((member) =>\n Schema.isSchema(member) ? errorAlternatives(member) : [],\n )\n : [schema];\n\n/**\n * Compile args field by field, as registration does, so a recursive field does\n * not widen the entire args object to `v.any()`.\n */\nconst compileArgs = (ast: SchemaAST.Objects): ReturnType<typeof compileAst> =>\n Effect.forEach(ast.propertySignatures, ({ name, type }) => {\n if (typeof name !== \"string\") {\n return Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey: name }),\n );\n }\n return Option.match(Number.parse(name), {\n onSome: (propertyKey) =>\n Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey }),\n ),\n onNone: () => {\n const optional = SchemaAST.isOptional(type);\n return compileAst(type, optional).pipe(\n Effect.map(\n (validator) =>\n [name, optional ? v.optional(validator) : validator] as const,\n ),\n );\n },\n });\n }).pipe(Effect.map((fields) => v.object(Object.fromEntries(fields))));\n\nconst compileSchema = (schema: Schema.Top, side?: \"args\" | \"returns\") => {\n const ast = Schema.toEncoded(schema).ast;\n return Effect.runSync(\n Effect.result(\n side === \"args\" && SchemaAST.isObjects(ast)\n ? compileArgs(ast)\n : compileAst(ast),\n ),\n );\n};\n\nconst describeCompiled = (\n compiled: ReadonlyArray<ReturnType<typeof compileSchema>>,\n): Schema.Json =>\n unionOf(\n keyed([\n ...membersOf(Array.getSuccesses(compiled)).map(([, json]) => json),\n ...Array.getFailures(compiled).map((error) => ({\n kind: \"unsupported\",\n reason: error.message,\n })),\n ]),\n );\n\n/**\n * Compare the validators Convex would compile for the contract and for the host\n * function, both in the application's ID scope, so a component's IDs are\n * strings on both sides and the host's own IDs stay `v.id`. A host that is\n * itself a component registers its own IDs as `v.id` in its scope, which this\n * check cannot see and compares as strings. Args and returns must be equal.\n * Every error the host may fail with, its middleware's included, must be one\n * the contract declares: the same schema, or one compiling to the same\n * validator. The host may declare fewer errors.\n */\nconst verify = (\n contract: Callback.Any,\n ref: Ref.AnyConfect,\n): Result.Result<void, CallbackContractMismatch> => {\n const mismatch = (\n side: CallbackContractMismatch[\"side\"],\n expected: Schema.Json,\n actual: Schema.Json,\n ) =>\n Result.fail(\n new CallbackContractMismatch({\n contract: contract.id,\n side,\n expected,\n actual,\n }),\n );\n const provenance = contract.functionProvenance;\n\n for (const side of [\"args\", \"returns\"] as const) {\n const expected = compileSchema(provenance[side], side);\n const actual = compileSchema(ref[side], side);\n const expectedDescription = describeCompiled([expected]);\n const actualDescription = describeCompiled([actual]);\n if (\n Result.isFailure(expected) ||\n Result.isFailure(actual) ||\n JSON.stringify(expectedDescription) !== JSON.stringify(actualDescription)\n ) {\n return mismatch(side, expectedDescription, actualDescription);\n }\n }\n\n const declared = ownError(provenance).flatMap(errorAlternatives);\n const undeclared = [\n ...ownError(ref),\n ...MiddlewareSpec.errorSchemas(ref.middlewareSpecs),\n ]\n .flatMap(errorAlternatives)\n .filter((schema) => !declared.includes(schema));\n if (undeclared.length > 0) {\n const expectedErrors = declared.map((schema) => compileSchema(schema));\n const actualErrors = undeclared.map((schema) => compileSchema(schema));\n const keys = new Set(\n membersOf(Array.getSuccesses(expectedErrors)).map(([key]) => key),\n );\n if (\n Array.getFailures(actualErrors).length > 0 ||\n !membersOf(Array.getSuccesses(actualErrors)).every(([key]) =>\n keys.has(key),\n )\n ) {\n return mismatch(\n \"error\",\n describeCompiled(expectedErrors),\n describeCompiled(actualErrors),\n );\n }\n }\n\n return Result.void;\n};\n\n/**\n * Create a handle a component can store and run to call `ref` under `contract`.\n * A ref whose function type, args or returns visibly differ from the contract\n * on the wire, or whose errors are undeclared, is a type error. The host may\n * declare fewer errors. Before asking Convex for the handle, a Confect ref's\n * compiled validators are checked against the contract's. A mismatch or an\n * unsupported schema fails with `CallbackContractMismatch`. A plain Convex ref\n * has no codecs to compile, so only the type check applies to it. A ref to a\n * function that is not deployed is a defect.\n */\nexport const create = Effect.fn(\"Callback.create\")(function* <\n Contract_ extends Callback.Any,\n Ref_ extends Ref.Any,\n>(\n contract: Contract_,\n ref: Ref_ & Callback.Check<Contract_, Ref_>,\n): Effect.fn.Return<Callback.Handle<Contract_>, CallbackContractMismatch> {\n if (ref._tag === \"Confect\") {\n yield* Effect.fromResult(verify(contract, ref));\n }\n const text = yield* Effect.promise(() =>\n createFunctionHandle(Ref.getFunctionReference(ref)),\n );\n return yield* Schema.decodeEffect(Callback.handle(contract))(text).pipe(\n Effect.orDie,\n );\n});\n"],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type * as IdScope from "@confect/core/IdScope";
2
+ import type { GenericId, Rebase } from "@confect/core/GenericId";
3
+ import type { DocumentByName, GenericActionCtx, GenericDataModel, GenericMutationCtx, GenericQueryCtx, QueryInitializer, NamedTableInfo, TableNamesInDataModel, SystemDataModel, WithoutSystemFields, WithOptionalSystemFields, SchedulableFunctionReference, OptionalRestArgs, VectorIndexNames, VectorSearchQuery } from "convex/server";
4
+ import type { PatchValue } from "./DatabaseWriter";
5
+ /**
6
+ * Distinguishes raw component services from structurally compatible app ctxs.
7
+ */
8
+ export interface Identifier<Kind extends string, DataModel, Scope extends IdScope.IdScope> {
9
+ readonly "~@confect/server/ComponentCtx": {
10
+ readonly kind: Kind;
11
+ readonly dataModel: DataModel;
12
+ readonly scope: Scope;
13
+ };
14
+ }
15
+ interface Reader<DataModel extends GenericDataModel, Scope extends IdScope.IdScope> {
16
+ get<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, id: GenericId<NoInfer<TableName>, Scope>): Promise<DocumentByName<DataModel, TableName> | null>;
17
+ get<TableName extends TableNamesInDataModel<DataModel>>(id: GenericId<TableName, Scope>): Promise<DocumentByName<DataModel, TableName> | null>;
18
+ normalizeId<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, id: string): GenericId<TableName, Scope> | null;
19
+ query<TableName extends TableNamesInDataModel<DataModel>>(table: TableName): QueryInitializer<NamedTableInfo<DataModel, TableName>>;
20
+ }
21
+ type ScopedSystem<Scope extends IdScope.IdScope> = Rebase<SystemDataModel, IdScope.App, Scope>;
22
+ export interface DatabaseReader<DataModel extends GenericDataModel, Scope extends IdScope.IdScope> extends Reader<DataModel, Scope> {
23
+ readonly system: Reader<ScopedSystem<Scope>, Scope>;
24
+ }
25
+ export interface DatabaseWriter<DataModel extends GenericDataModel, Scope extends IdScope.IdScope> extends DatabaseReader<DataModel, Scope> {
26
+ insert<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, value: WithoutSystemFields<DocumentByName<DataModel, TableName>>): Promise<GenericId<TableName, Scope>>;
27
+ patch<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, id: GenericId<NoInfer<TableName>, Scope>, value: PatchValue<WithoutSystemFields<DocumentByName<DataModel, TableName>>>): Promise<void>;
28
+ patch<TableName extends TableNamesInDataModel<DataModel>>(id: GenericId<TableName, Scope>, value: PatchValue<WithoutSystemFields<DocumentByName<DataModel, TableName>>>): Promise<void>;
29
+ replace<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, id: GenericId<NoInfer<TableName>, Scope>, value: WithOptionalSystemFields<DocumentByName<DataModel, TableName>>): Promise<void>;
30
+ replace<TableName extends TableNamesInDataModel<DataModel>>(id: GenericId<TableName, Scope>, value: WithOptionalSystemFields<DocumentByName<DataModel, TableName>>): Promise<void>;
31
+ delete<TableName extends TableNamesInDataModel<DataModel>>(table: TableName, id: GenericId<NoInfer<TableName>, Scope>): Promise<void>;
32
+ delete<TableName extends TableNamesInDataModel<DataModel>>(id: GenericId<TableName, Scope>): Promise<void>;
33
+ }
34
+ export interface StorageReader<Scope extends IdScope.IdScope> {
35
+ getUrl(id: GenericId<"_storage", Scope>): Promise<string | null>;
36
+ getMetadata(id: GenericId<"_storage", Scope>): Promise<Rebase<Awaited<ReturnType<GenericQueryCtx<GenericDataModel>["storage"]["getMetadata"]>>, IdScope.App, Scope>>;
37
+ }
38
+ export interface StorageWriter<Scope extends IdScope.IdScope> extends StorageReader<Scope> {
39
+ generateUploadUrl(): Promise<string>;
40
+ delete(id: GenericId<"_storage", Scope>): Promise<void>;
41
+ }
42
+ export interface StorageActionWriter<Scope extends IdScope.IdScope> extends StorageWriter<Scope> {
43
+ get(id: GenericId<"_storage", Scope>): Promise<Blob | null>;
44
+ store(blob: Blob, options?: {
45
+ sha256?: string;
46
+ }): Promise<GenericId<"_storage", Scope>>;
47
+ }
48
+ export interface Scheduler<Scope extends IdScope.IdScope> {
49
+ runAfter<FunctionReference extends SchedulableFunctionReference>(delayMs: number, ref: FunctionReference, ...args: OptionalRestArgs<FunctionReference>): Promise<GenericId<"_scheduled_functions", Scope>>;
50
+ runAt<FunctionReference extends SchedulableFunctionReference>(timestamp: number | Date, ref: FunctionReference, ...args: OptionalRestArgs<FunctionReference>): Promise<GenericId<"_scheduled_functions", Scope>>;
51
+ cancel(id: GenericId<"_scheduled_functions", Scope>): Promise<void>;
52
+ }
53
+ export type Query<DataModel extends GenericDataModel, Scope extends IdScope.IdScope> = Omit<GenericQueryCtx<DataModel>, "auth" | "db" | "storage"> & {
54
+ readonly db: DatabaseReader<DataModel, Scope>;
55
+ readonly storage: StorageReader<Scope>;
56
+ };
57
+ export type Mutation<DataModel extends GenericDataModel, Scope extends IdScope.IdScope> = Omit<GenericMutationCtx<DataModel>, "auth" | "db" | "storage" | "scheduler"> & {
58
+ readonly db: DatabaseWriter<DataModel, Scope>;
59
+ readonly storage: StorageWriter<Scope>;
60
+ readonly scheduler: Scheduler<Scope>;
61
+ };
62
+ export type Action<DataModel extends GenericDataModel, Scope extends IdScope.IdScope> = Omit<GenericActionCtx<DataModel>, "auth" | "storage" | "vectorSearch" | "scheduler"> & {
63
+ readonly storage: StorageActionWriter<Scope>;
64
+ readonly scheduler: Scheduler<Scope>;
65
+ readonly vectorSearch: <TableName extends TableNamesInDataModel<DataModel>, IndexName extends VectorIndexNames<NamedTableInfo<DataModel, TableName>>>(table: TableName, index: IndexName, query: VectorSearchQuery<NamedTableInfo<DataModel, TableName>, IndexName>) => Promise<Array<{
66
+ _id: GenericId<TableName, Scope>;
67
+ _score: number;
68
+ }>>;
69
+ };
70
+ export {};
71
+ //# sourceMappingURL=ComponentCtx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentCtx.d.ts","sourceRoot":"","sources":["../src/ComponentCtx.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,21 @@
1
+ import * as ConfigProvider from "effect/ConfigProvider";
2
+ import * as Layer from "effect/Layer";
3
+ /**
4
+ * A `ConfigProvider` that reads configuration directly from `process.env` by
5
+ * exact path lookup.
6
+ *
7
+ * The Convex runtime exposes `process.env` for direct key access but does not
8
+ * make it enumerable, so the built-in `ConfigProvider.fromEnv` (which builds a
9
+ * trie over the environment to resolve and enumerate config paths) cannot be
10
+ * used. This provider resolves each requested path to a single environment
11
+ * variable, joining the path segments with `"_"` to match the key convention
12
+ * `fromEnv` uses. As with the built-in providers, an empty string is treated as
13
+ * a missing value, so `Config.withDefault` and `Config.option` recover from
14
+ * it.
15
+ */
16
+ export declare const make: () => ConfigProvider.ConfigProvider;
17
+ /**
18
+ * Installs the Convex-aware `ConfigProvider` as the ambient provider.
19
+ */
20
+ export declare const layer: Layer.Layer<never>;
21
+ //# sourceMappingURL=ConvexConfigProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexConfigProvider.d.ts","sourceRoot":"","sources":["../src/ConvexConfigProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,QAAO,cAAc,CAAC,cASnC,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAGpC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Effect from "effect/Effect";
4
+ import { pipe } from "effect/Function";
5
+ import * as Array from "effect/Array";
6
+ import * as ConfigProvider from "effect/ConfigProvider";
7
+ //#region src/ConvexConfigProvider.ts
8
+ var ConvexConfigProvider_exports = /* @__PURE__ */ __exportAll({
9
+ layer: () => layer,
10
+ make: () => make
11
+ });
12
+ /**
13
+ * A `ConfigProvider` that reads configuration directly from `process.env` by
14
+ * exact path lookup.
15
+ *
16
+ * The Convex runtime exposes `process.env` for direct key access but does not
17
+ * make it enumerable, so the built-in `ConfigProvider.fromEnv` (which builds a
18
+ * trie over the environment to resolve and enumerate config paths) cannot be
19
+ * used. This provider resolves each requested path to a single environment
20
+ * variable, joining the path segments with `"_"` to match the key convention
21
+ * `fromEnv` uses. As with the built-in providers, an empty string is treated as
22
+ * a missing value, so `Config.withDefault` and `Config.option` recover from
23
+ * it.
24
+ */
25
+ const make = () => ConfigProvider.make((path) => {
26
+ const value = process.env[pipe(path, Array.map(String), Array.join("_"))];
27
+ return Effect.succeed(value === void 0 || value === "" ? void 0 : ConfigProvider.makeValue(value));
28
+ });
29
+ /**
30
+ * Installs the Convex-aware `ConfigProvider` as the ambient provider.
31
+ */
32
+ const layer = Layer.succeed(ConfigProvider.ConfigProvider, make());
33
+ //#endregion
34
+ export { ConvexConfigProvider_exports, layer, make };
35
+
36
+ //# sourceMappingURL=ConvexConfigProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexConfigProvider.js","names":[],"sources":["../src/ConvexConfigProvider.ts"],"sourcesContent":["import { pipe } from \"effect/Function\";\nimport * as Array from \"effect/Array\";\nimport * as ConfigProvider from \"effect/ConfigProvider\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\ndeclare const process: { env: Record<string, string | undefined> };\n\n/**\n * A `ConfigProvider` that reads configuration directly from `process.env` by\n * exact path lookup.\n *\n * The Convex runtime exposes `process.env` for direct key access but does not\n * make it enumerable, so the built-in `ConfigProvider.fromEnv` (which builds a\n * trie over the environment to resolve and enumerate config paths) cannot be\n * used. This provider resolves each requested path to a single environment\n * variable, joining the path segments with `\"_\"` to match the key convention\n * `fromEnv` uses. As with the built-in providers, an empty string is treated as\n * a missing value, so `Config.withDefault` and `Config.option` recover from\n * it.\n */\nexport const make = (): ConfigProvider.ConfigProvider =>\n ConfigProvider.make((path) => {\n const value = process.env[pipe(path, Array.map(String), Array.join(\"_\"))];\n\n return Effect.succeed(\n value === undefined || value === \"\"\n ? undefined\n : ConfigProvider.makeValue(value),\n );\n });\n\n/**\n * Installs the Convex-aware `ConfigProvider` as the ambient provider.\n */\nexport const layer: Layer.Layer<never> = Layer.succeed(\n ConfigProvider.ConfigProvider,\n make(),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,aACX,eAAe,MAAM,SAAS;CAC5B,MAAM,QAAQ,QAAQ,IAAI,KAAK,MAAM,MAAM,IAAI,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;CAEvE,OAAO,OAAO,QACZ,UAAU,KAAA,KAAa,UAAU,KAC7B,KAAA,IACA,eAAe,UAAU,KAAK,CACpC;AACF,CAAC;;;;AAKH,MAAa,QAA4B,MAAM,QAC7C,eAAe,gBACf,KAAK,CACP"}
@@ -0,0 +1,25 @@
1
+ import type * as Layer from "effect/Layer";
2
+ import type * as GroupSpec from "@confect/core/GroupSpec";
3
+ import type * as FunctionSpec from "@confect/core/FunctionSpec";
4
+ import type * as DatabaseSchema from "./DatabaseSchema";
5
+ import type * as GroupImpl from "./GroupImpl";
6
+ import * as RegisteredConvexFunction from "./RegisteredConvexFunction";
7
+ import type * as RegisteredFunctions from "./RegisteredFunctions";
8
+ export interface Definitions {
9
+ readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;
10
+ }
11
+ type DefinitionTag<Function extends FunctionSpec.AnyWithProps, Provenance = Function["functionProvenance"]> = Provenance extends {
12
+ readonly _tag: "Convex";
13
+ } ? "Registered" : `${Capitalize<Function["functionVisibility"]>}${Capitalize<Function["runtimeAndFunctionType"]["functionType"]>}`;
14
+ export type ForGroup<Group extends GroupSpec.AnyWithProps> = {
15
+ readonly [Name in FunctionSpec.Name<GroupSpec.Functions<Group>>]: Extract<RegisteredConvexFunction.Definition, {
16
+ readonly _tag: DefinitionTag<FunctionSpec.WithName<GroupSpec.Functions<Group>, Name>>;
17
+ }>;
18
+ } & {
19
+ readonly [Name in GroupSpec.Name<GroupSpec.Groups<Group>>]: ForGroup<GroupSpec.WithName<GroupSpec.Groups<Group>, Name>>;
20
+ };
21
+ export declare const isDefinition: (value: RegisteredConvexFunction.Definition | Definitions) => value is RegisteredConvexFunction.Definition;
22
+ export declare const register: <Group extends GroupSpec.AnyWithProps>(definitions: Definitions) => RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group>;
23
+ export declare const buildForGroup: <Group extends GroupSpec.AnyWithProps>(databaseSchema: DatabaseSchema.AnyWithProps, groupLayer: Layer.Layer<GroupImpl.GroupImpl<"Finalized">>) => ForGroup<Group>;
24
+ export {};
25
+ //# sourceMappingURL=ConvexFunctionDefinitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexFunctionDefinitions.d.ts","sourceRoot":"","sources":["../src/ConvexFunctionDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,KAAK,SAAS,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,wBAAwB,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAIlE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC,UAAU,GAAG,WAAW,CAAC;CAC5E;AAED,KAAK,aAAa,CAChB,QAAQ,SAAS,YAAY,CAAC,YAAY,EAC1C,UAAU,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IACzC,UAAU,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC9C,YAAY,GACZ,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;AAErH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,SAAS,CAAC,YAAY,IAAI;IAC3D,QAAQ,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CACvE,wBAAwB,CAAC,UAAU,EACnC;QACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAC1B,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACxD,CAAC;KACH,CACF;CACF,GAAG;IACF,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAClD;CACF,CAAC;AAEF,eAAO,MAAM,YAAY,UAChB,wBAAwB,CAAC,UAAU,GAAG,WAAW,KACvD,KAAK,IAAI,wBAAwB,CAAC,UACL,CAAC;AAWjC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,eAC9C,WAAW,KACvB,mBAAmB,CAAC,+BAA+B,CAAC,KAAK,CAGK,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,kBAChD,cAAc,CAAC,YAAY,cAC/B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KACxD,QAAQ,CAAC,KAAK,CA0BhB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { make } from "./GroupRegistry.js";
3
+ import { isFunctionRegistryItem } from "./FunctionRegistryItem.js";
4
+ import { Definition, prepare, register as register$1 } from "./RegisteredConvexFunction.js";
5
+ import { resolve } from "./ResolvedMiddleware.js";
6
+ import { mapLeaves } from "./internal/utils.js";
7
+ import * as Match from "effect/Match";
8
+ import * as Record from "effect/Record";
9
+ //#region src/ConvexFunctionDefinitions.ts
10
+ var ConvexFunctionDefinitions_exports = /* @__PURE__ */ __exportAll({
11
+ buildForGroup: () => buildForGroup,
12
+ isDefinition: () => isDefinition,
13
+ register: () => register
14
+ });
15
+ const isDefinition = (value) => typeof value._tag === "string";
16
+ const registerDefinitions = (definitions) => Record.map(definitions, (value) => isDefinition(value) ? register$1(value) : registerDefinitions(value));
17
+ const register = (definitions) => registerDefinitions(definitions);
18
+ const buildForGroup = (databaseSchema, groupLayer) => {
19
+ const { functionRegistryItems, middlewareRegistryItems } = make(groupLayer);
20
+ return mapLeaves(functionRegistryItems, isFunctionRegistryItem, (item) => Match.value(item).pipe(Match.tag("Convex", ({ handler }) => Definition.Registered({ handler })), Match.tag("Confect", (confect) => prepare(databaseSchema, confect, resolve(confect, middlewareRegistryItems))), Match.exhaustive));
21
+ };
22
+ //#endregion
23
+ export { ConvexFunctionDefinitions_exports, buildForGroup, isDefinition, register };
24
+
25
+ //# sourceMappingURL=ConvexFunctionDefinitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexFunctionDefinitions.js","names":["RegisteredConvexFunction.register","GroupRegistry.make","FunctionRegistryItem.isFunctionRegistryItem","RegisteredConvexFunction.prepare","ResolvedMiddleware.resolve"],"sources":["../src/ConvexFunctionDefinitions.ts"],"sourcesContent":["import type * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Record from \"effect/Record\";\nimport type * as GroupSpec from \"@confect/core/GroupSpec\";\nimport type * as FunctionSpec from \"@confect/core/FunctionSpec\";\nimport type * as DatabaseSchema from \"./DatabaseSchema\";\nimport type * as GroupImpl from \"./GroupImpl\";\nimport * as GroupRegistry from \"./GroupRegistry\";\nimport * as FunctionRegistryItem from \"./FunctionRegistryItem\";\nimport * as RegisteredConvexFunction from \"./RegisteredConvexFunction\";\nimport type * as RegisteredFunctions from \"./RegisteredFunctions\";\nimport * as ResolvedMiddleware from \"./ResolvedMiddleware\";\nimport { mapLeaves } from \"./internal/utils\";\n\nexport interface Definitions {\n readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;\n}\n\ntype DefinitionTag<\n Function extends FunctionSpec.AnyWithProps,\n Provenance = Function[\"functionProvenance\"],\n> = Provenance extends { readonly _tag: \"Convex\" }\n ? \"Registered\"\n : `${Capitalize<Function[\"functionVisibility\"]>}${Capitalize<Function[\"runtimeAndFunctionType\"][\"functionType\"]>}`;\n\nexport type ForGroup<Group extends GroupSpec.AnyWithProps> = {\n readonly [Name in FunctionSpec.Name<GroupSpec.Functions<Group>>]: Extract<\n RegisteredConvexFunction.Definition,\n {\n readonly _tag: DefinitionTag<\n FunctionSpec.WithName<GroupSpec.Functions<Group>, Name>\n >;\n }\n >;\n} & {\n readonly [Name in GroupSpec.Name<GroupSpec.Groups<Group>>]: ForGroup<\n GroupSpec.WithName<GroupSpec.Groups<Group>, Name>\n >;\n};\n\nexport const isDefinition = (\n value: RegisteredConvexFunction.Definition | Definitions,\n): value is RegisteredConvexFunction.Definition =>\n typeof value._tag === \"string\";\n\nconst registerDefinitions = (\n definitions: Definitions,\n): RegisteredFunctions.AnyWithProps =>\n Record.map(definitions, (value) =>\n isDefinition(value)\n ? RegisteredConvexFunction.register(value)\n : registerDefinitions(value),\n );\n\nexport const register = <Group extends GroupSpec.AnyWithProps>(\n definitions: Definitions,\n): RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group> =>\n registerDefinitions(\n definitions,\n ) as RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group>;\n\nexport const buildForGroup = <Group extends GroupSpec.AnyWithProps>(\n databaseSchema: DatabaseSchema.AnyWithProps,\n groupLayer: Layer.Layer<GroupImpl.GroupImpl<\"Finalized\">>,\n): ForGroup<Group> => {\n const { functionRegistryItems, middlewareRegistryItems } =\n GroupRegistry.make(groupLayer);\n return mapLeaves<\n FunctionRegistryItem.AnyWithProps,\n RegisteredConvexFunction.Definition\n >(\n functionRegistryItems as {\n [key: string]: FunctionRegistryItem.AnyWithProps;\n },\n FunctionRegistryItem.isFunctionRegistryItem,\n (item) =>\n Match.value(item).pipe(\n Match.tag(\"Convex\", ({ handler }) =>\n RegisteredConvexFunction.Definition.Registered({ handler }),\n ),\n Match.tag(\"Confect\", (confect) =>\n RegisteredConvexFunction.prepare(\n databaseSchema,\n confect,\n ResolvedMiddleware.resolve(confect, middlewareRegistryItems),\n ),\n ),\n Match.exhaustive,\n ),\n ) as ForGroup<Group>;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAa,gBACX,UAEA,OAAO,MAAM,SAAS;AAExB,MAAM,uBACJ,gBAEA,OAAO,IAAI,cAAc,UACvB,aAAa,KAAK,IACdA,WAAkC,KAAK,IACvC,oBAAoB,KAAK,CAC/B;AAEF,MAAa,YACX,gBAEA,oBACE,WACF;AAEF,MAAa,iBACX,gBACA,eACoB;CACpB,MAAM,EAAE,uBAAuB,4BAC7BC,KAAmB,UAAU;CAC/B,OAAO,UAIL,uBAGAC,yBACC,SACC,MAAM,MAAM,IAAI,CAAC,CAAC,KAChB,MAAM,IAAI,WAAW,EAAE,cAAA,WACe,WAAW,EAAE,QAAQ,CAAC,CAC5D,GACA,MAAM,IAAI,YAAY,YACpBC,QACE,gBACA,SACAC,QAA2B,SAAS,uBAAuB,CAC7D,CACF,GACA,MAAM,UACR,CACJ;AACF"}
@@ -0,0 +1,17 @@
1
+ import * as Layer from "effect/Layer";
2
+ import * as Logger from "effect/Logger";
3
+ /**
4
+ * Writes structured Effect logs through Convex's severity-aware console
5
+ * methods. Trace and Debug use `console.debug`, Info uses `console.info`, Warn
6
+ * uses `console.warn`, and Error and Fatal use `console.error`. The payload
7
+ * retains the original Effect level, cause, annotations, spans, timestamp, and
8
+ * fiber ID.
9
+ */
10
+ export declare const logger: Logger.Logger<unknown, void>;
11
+ /**
12
+ * Replaces Effect's default console logger without changing custom loggers,
13
+ * tracing, or the minimum log level. Confect installs this layer automatically
14
+ * for function handlers and HTTP routes.
15
+ */
16
+ export declare const layer: Layer.Layer<never>;
17
+ //# sourceMappingURL=ConvexLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexLogger.d.ts","sourceRoot":"","sources":["../src/ConvexLogger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAW9C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAWpC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Match from "effect/Match";
5
+ import * as Console from "effect/Console";
6
+ import * as Logger from "effect/Logger";
7
+ //#region src/ConvexLogger.ts
8
+ var ConvexLogger_exports = /* @__PURE__ */ __exportAll({
9
+ layer: () => layer,
10
+ logger: () => logger
11
+ });
12
+ /**
13
+ * Writes structured Effect logs through Convex's severity-aware console
14
+ * methods. Trace and Debug use `console.debug`, Info uses `console.info`, Warn
15
+ * uses `console.warn`, and Error and Fatal use `console.error`. The payload
16
+ * retains the original Effect level, cause, annotations, spans, timestamp, and
17
+ * fiber ID.
18
+ */
19
+ const logger = Logger.make((options) => {
20
+ const console = options.fiber.getRef(Console.Console);
21
+ const output = Logger.formatStructured.log(options);
22
+ return Match.value(options.logLevel).pipe(Match.whenOr("Trace", "Debug", () => console.debug(output)), Match.when("Info", () => console.info(output)), Match.when("Warn", () => console.warn(output)), Match.whenOr("Error", "Fatal", () => console.error(output)), Match.whenOr("All", "None", () => console.log(output)), Match.exhaustive);
23
+ });
24
+ /**
25
+ * Replaces Effect's default console logger without changing custom loggers,
26
+ * tracing, or the minimum log level. Confect installs this layer automatically
27
+ * for function handlers and HTTP routes.
28
+ */
29
+ const layer = Layer.effect(Logger.CurrentLoggers, Effect.map(Logger.CurrentLoggers, (loggers) => new Set(Array.from(loggers, (current) => current === Logger.defaultLogger ? logger : current))));
30
+ //#endregion
31
+ export { ConvexLogger_exports, layer, logger };
32
+
33
+ //# sourceMappingURL=ConvexLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexLogger.js","names":[],"sources":["../src/ConvexLogger.ts"],"sourcesContent":["import * as Console from \"effect/Console\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Logger from \"effect/Logger\";\nimport * as Match from \"effect/Match\";\n\n/**\n * Writes structured Effect logs through Convex's severity-aware console\n * methods. Trace and Debug use `console.debug`, Info uses `console.info`, Warn\n * uses `console.warn`, and Error and Fatal use `console.error`. The payload\n * retains the original Effect level, cause, annotations, spans, timestamp, and\n * fiber ID.\n */\nexport const logger: Logger.Logger<unknown, void> = Logger.make((options) => {\n const console = options.fiber.getRef(Console.Console);\n const output = Logger.formatStructured.log(options);\n return Match.value(options.logLevel).pipe(\n Match.whenOr(\"Trace\", \"Debug\", () => console.debug(output)),\n Match.when(\"Info\", () => console.info(output)),\n Match.when(\"Warn\", () => console.warn(output)),\n Match.whenOr(\"Error\", \"Fatal\", () => console.error(output)),\n Match.whenOr(\"All\", \"None\", () => console.log(output)),\n Match.exhaustive,\n );\n});\n\n/**\n * Replaces Effect's default console logger without changing custom loggers,\n * tracing, or the minimum log level. Confect installs this layer automatically\n * for function handlers and HTTP routes.\n */\nexport const layer: Layer.Layer<never> = Layer.effect(\n Logger.CurrentLoggers,\n Effect.map(\n Logger.CurrentLoggers,\n (loggers) =>\n new Set(\n Array.from(loggers, (current) =>\n current === Logger.defaultLogger ? logger : current,\n ),\n ),\n ),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAaA,MAAa,SAAuC,OAAO,MAAM,YAAY;CAC3E,MAAM,UAAU,QAAQ,MAAM,OAAO,QAAQ,OAAO;CACpD,MAAM,SAAS,OAAO,iBAAiB,IAAI,OAAO;CAClD,OAAO,MAAM,MAAM,QAAQ,QAAQ,CAAC,CAAC,KACnC,MAAM,OAAO,SAAS,eAAe,QAAQ,MAAM,MAAM,CAAC,GAC1D,MAAM,KAAK,cAAc,QAAQ,KAAK,MAAM,CAAC,GAC7C,MAAM,KAAK,cAAc,QAAQ,KAAK,MAAM,CAAC,GAC7C,MAAM,OAAO,SAAS,eAAe,QAAQ,MAAM,MAAM,CAAC,GAC1D,MAAM,OAAO,OAAO,cAAc,QAAQ,IAAI,MAAM,CAAC,GACrD,MAAM,UACR;AACF,CAAC;;;;;;AAOD,MAAa,QAA4B,MAAM,OAC7C,OAAO,gBACP,OAAO,IACL,OAAO,iBACN,YACC,IAAI,IACF,MAAM,KAAK,UAAU,YACnB,YAAY,OAAO,gBAAgB,SAAS,OAC9C,CACF,CACJ,CACF"}
@@ -0,0 +1,14 @@
1
+ import type { Ref } from "@confect/core";
2
+ import type { Cron, Duration } from "effect";
3
+ export declare const TypeId = "~@confect/server/CronJob";
4
+ export type TypeId = typeof TypeId;
5
+ export interface CronJob {
6
+ readonly [TypeId]: TypeId;
7
+ readonly identifier: string;
8
+ readonly schedule: Cron.Cron | Duration.Duration;
9
+ readonly ref: Ref.AnyMutation | Ref.AnyAction;
10
+ readonly args: Record<string, unknown>;
11
+ }
12
+ export declare const isCronJob: (u: unknown) => u is CronJob;
13
+ export declare const make: <R extends Ref.AnyMutation | Ref.AnyAction>(identifier: string, schedule: Cron.Cron | Duration.Duration, ref: R, ...args: Ref.OptionalArgs<R>) => CronJob;
14
+ //# sourceMappingURL=CronJob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronJob.d.ts","sourceRoot":"","sources":["../src/CronJob.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAG7C,eAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACjD,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,SAAS,MAAO,OAAO,KAAG,CAAC,IAAI,OACV,CAAC;AAmBnC,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,cAChD,MAAM,YACR,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,OAClC,CAAC,WACG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAC3B,OAA8D,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Predicate from "effect/Predicate";
3
+ //#region src/CronJob.ts
4
+ var CronJob_exports = /* @__PURE__ */ __exportAll({
5
+ TypeId: () => TypeId,
6
+ isCronJob: () => isCronJob,
7
+ make: () => make
8
+ });
9
+ const TypeId = "~@confect/server/CronJob";
10
+ const isCronJob = (u) => Predicate.hasProperty(u, TypeId);
11
+ const Proto = { [TypeId]: TypeId };
12
+ const makeProto = (identifier, schedule, ref, args) => Object.assign(Object.create(Proto), {
13
+ identifier,
14
+ schedule,
15
+ ref,
16
+ args
17
+ });
18
+ const make = (identifier, schedule, ref, ...args) => makeProto(identifier, schedule, ref, args[0] ?? {});
19
+ //#endregion
20
+ export { CronJob_exports, TypeId, isCronJob, make };
21
+
22
+ //# sourceMappingURL=CronJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronJob.js","names":[],"sources":["../src/CronJob.ts"],"sourcesContent":["import type { Ref } from \"@confect/core\";\nimport type { Cron, Duration } from \"effect\";\nimport * as Predicate from \"effect/Predicate\";\n\nexport const TypeId = \"~@confect/server/CronJob\";\nexport type TypeId = typeof TypeId;\n\nexport interface CronJob {\n readonly [TypeId]: TypeId;\n\n readonly identifier: string;\n readonly schedule: Cron.Cron | Duration.Duration;\n readonly ref: Ref.AnyMutation | Ref.AnyAction;\n readonly args: Record<string, unknown>;\n}\n\nexport const isCronJob = (u: unknown): u is CronJob =>\n Predicate.hasProperty(u, TypeId);\n\nconst Proto = {\n [TypeId]: TypeId,\n};\n\nconst makeProto = (\n identifier: string,\n schedule: Cron.Cron | Duration.Duration,\n ref: Ref.AnyMutation | Ref.AnyAction,\n args: Record<string, unknown>,\n): CronJob =>\n Object.assign(Object.create(Proto), {\n identifier,\n schedule,\n ref,\n args,\n });\n\nexport const make = <R extends Ref.AnyMutation | Ref.AnyAction>(\n identifier: string,\n schedule: Cron.Cron | Duration.Duration,\n ref: R,\n ...args: Ref.OptionalArgs<R>\n): CronJob => makeProto(identifier, schedule, ref, args[0] ?? {});\n"],"mappings":";;;;;;;;AAIA,MAAa,SAAS;AAYtB,MAAa,aAAa,MACxB,UAAU,YAAY,GAAG,MAAM;AAEjC,MAAM,QAAQ,GACX,SAAS,OACZ;AAEA,MAAM,aACJ,YACA,UACA,KACA,SAEA,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG;CAClC;CACA;CACA;CACA;AACF,CAAC;AAEH,MAAa,QACX,YACA,UACA,KACA,GAAG,SACS,UAAU,YAAY,UAAU,KAAK,KAAK,MAAM,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CronJob as ConvexCronJob } from "convex/server";
2
+ import { type Crons } from "convex/server";
3
+ import * as Cron from "effect/Cron";
4
+ import * as Duration from "effect/Duration";
5
+ import type * as CronJob from "./CronJob";
6
+ export declare const TypeId = "~@confect/server/CronJobs";
7
+ export type TypeId = typeof TypeId;
8
+ export interface CronJobs {
9
+ readonly [TypeId]: TypeId;
10
+ readonly cronJobs: Record<string, CronJob.CronJob>;
11
+ readonly convexCronJobs: Crons;
12
+ add(cron: CronJob.CronJob): CronJobs;
13
+ }
14
+ export declare const isCronJobs: (u: unknown) => u is CronJobs;
15
+ export declare const make: () => CronJobs;
16
+ export declare const cronToConvexCronString: (cron: Cron.Cron) => string;
17
+ export declare const durationToConvexIntervalSchedule: (duration: Duration.Duration) => IntervalSchedule;
18
+ type IntervalSchedule = Extract<ConvexCronJob["schedule"], {
19
+ type: "interval";
20
+ }>;
21
+ export {};
22
+ //# sourceMappingURL=CronJobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronJobs.d.ts","sourceRoot":"","sources":["../src/CronJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAA+B,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAM5C,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAC;AAE1C,eAAO,MAAM,MAAM,8BAA8B,CAAC;AAClD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;IAE/B,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC;CACtC;AAED,eAAO,MAAM,UAAU,MAAO,OAAO,KAAG,CAAC,IAAI,QACX,CAAC;AAiDnC,eAAO,MAAM,IAAI,QAAO,QAA4C,CAAC;AAErE,eAAO,MAAM,sBAAsB,SAAU,IAAI,CAAC,IAAI,KAAG,MAwCxD,CAAC;AAYF,eAAO,MAAM,gCAAgC,aACjC,QAAQ,CAAC,QAAQ,KAC1B,gBA2BF,CAAC;AAEF,KAAK,gBAAgB,GAAG,OAAO,CAC7B,aAAa,CAAC,UAAU,CAAC,EACzB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CACrB,CAAC"}