@geekmidas/constructs 0.3.2 → 0.6.0

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 (557) hide show
  1. package/dist/{AWSLambdaFunction-C54a1doJ.mjs → AWSLambdaFunction-BMTaCrG9.mjs} +6 -6
  2. package/dist/AWSLambdaFunction-BMTaCrG9.mjs.map +1 -0
  3. package/dist/{AWSLambdaFunction-BdebRMUh.d.mts → AWSLambdaFunction-BfLF5vNa.d.cts} +6 -6
  4. package/dist/AWSLambdaFunction-BfLF5vNa.d.cts.map +1 -0
  5. package/dist/{AWSLambdaFunction-EPGY4s7i.cjs → AWSLambdaFunction-C1gRqLO7.cjs} +6 -6
  6. package/dist/AWSLambdaFunction-C1gRqLO7.cjs.map +1 -0
  7. package/dist/{AWSLambdaFunction-D0tEOTXQ.d.cts → AWSLambdaFunction-K94K8JU2.d.mts} +6 -6
  8. package/dist/AWSLambdaFunction-K94K8JU2.d.mts.map +1 -0
  9. package/dist/{AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts → AWSLambdaSubscriberAdaptor-B2Gk3fgx.d.cts} +2 -2
  10. package/dist/AWSLambdaSubscriberAdaptor-B2Gk3fgx.d.cts.map +1 -0
  11. package/dist/{AWSLambdaSubscriberAdaptor-BLfO612H.mjs → AWSLambdaSubscriberAdaptor-BD3FwGUb.mjs} +3 -3
  12. package/dist/AWSLambdaSubscriberAdaptor-BD3FwGUb.mjs.map +1 -0
  13. package/dist/{AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs → AWSLambdaSubscriberAdaptor-DQDnt1Xk.cjs} +3 -3
  14. package/dist/AWSLambdaSubscriberAdaptor-DQDnt1Xk.cjs.map +1 -0
  15. package/dist/{AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts → AWSLambdaSubscriberAdaptor-QuMFwltJ.d.mts} +2 -2
  16. package/dist/AWSLambdaSubscriberAdaptor-QuMFwltJ.d.mts.map +1 -0
  17. package/dist/{AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs → AmazonApiGatewayEndpointAdaptor-B4gLJ2dx.mjs} +56 -14
  18. package/dist/AmazonApiGatewayEndpointAdaptor-B4gLJ2dx.mjs.map +1 -0
  19. package/dist/{AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts → AmazonApiGatewayEndpointAdaptor-C987ZCsM.d.cts} +51 -5
  20. package/dist/AmazonApiGatewayEndpointAdaptor-C987ZCsM.d.cts.map +1 -0
  21. package/dist/{AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs → AmazonApiGatewayEndpointAdaptor-CwRKMRr_.cjs} +55 -13
  22. package/dist/AmazonApiGatewayEndpointAdaptor-CwRKMRr_.cjs.map +1 -0
  23. package/dist/{AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts → AmazonApiGatewayEndpointAdaptor-DpPfO6Vj.d.mts} +52 -6
  24. package/dist/AmazonApiGatewayEndpointAdaptor-DpPfO6Vj.d.mts.map +1 -0
  25. package/dist/{AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs → AmazonApiGatewayV1EndpointAdaptor-BeZMu5DZ.cjs} +4 -4
  26. package/dist/AmazonApiGatewayV1EndpointAdaptor-BeZMu5DZ.cjs.map +1 -0
  27. package/dist/{AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts → AmazonApiGatewayV1EndpointAdaptor-DI_5kdqw.d.mts} +5 -5
  28. package/dist/AmazonApiGatewayV1EndpointAdaptor-DI_5kdqw.d.mts.map +1 -0
  29. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts → AmazonApiGatewayV1EndpointAdaptor-DkGMOpoB.d.cts} +4 -4
  30. package/dist/AmazonApiGatewayV1EndpointAdaptor-DkGMOpoB.d.cts.map +1 -0
  31. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs → AmazonApiGatewayV1EndpointAdaptor-VccB6FKp.mjs} +4 -4
  32. package/dist/AmazonApiGatewayV1EndpointAdaptor-VccB6FKp.mjs.map +1 -0
  33. package/dist/{AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts → AmazonApiGatewayV2EndpointAdaptor-BtBnMJS_.d.cts} +4 -6
  34. package/dist/AmazonApiGatewayV2EndpointAdaptor-BtBnMJS_.d.cts.map +1 -0
  35. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs → AmazonApiGatewayV2EndpointAdaptor-BwsL9Gia.cjs} +4 -4
  36. package/dist/AmazonApiGatewayV2EndpointAdaptor-BwsL9Gia.cjs.map +1 -0
  37. package/dist/{AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs → AmazonApiGatewayV2EndpointAdaptor-CljxmUfz.mjs} +4 -4
  38. package/dist/AmazonApiGatewayV2EndpointAdaptor-CljxmUfz.mjs.map +1 -0
  39. package/dist/{AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts → AmazonApiGatewayV2EndpointAdaptor-DnCoqlvw.d.mts} +5 -7
  40. package/dist/AmazonApiGatewayV2EndpointAdaptor-DnCoqlvw.d.mts.map +1 -0
  41. package/dist/{Authorizer-C0ge_tc8.cjs → Authorizer-BXxBee2P.cjs} +1 -1
  42. package/dist/Authorizer-BXxBee2P.cjs.map +1 -0
  43. package/dist/{Authorizer-r9U3y_ms.mjs → Authorizer-BgjU8-z6.mjs} +1 -1
  44. package/dist/Authorizer-BgjU8-z6.mjs.map +1 -0
  45. package/dist/{Authorizer-gWxYsGEp.d.mts → Authorizer-DCcYOx3h.d.mts} +1 -1
  46. package/dist/Authorizer-DCcYOx3h.d.mts.map +1 -0
  47. package/dist/{Authorizer-B-btowNd.d.cts → Authorizer-DWtwC8we.d.cts} +1 -1
  48. package/dist/Authorizer-DWtwC8we.d.cts.map +1 -0
  49. package/dist/{BaseFunctionBuilder-BAtutR6q.d.cts → BaseFunctionBuilder-BqZCqIeU.d.mts} +3 -3
  50. package/dist/BaseFunctionBuilder-BqZCqIeU.d.mts.map +1 -0
  51. package/dist/{BaseFunctionBuilder-DRY419e7.d.mts → BaseFunctionBuilder-CcK691ni.d.cts} +3 -3
  52. package/dist/BaseFunctionBuilder-CcK691ni.d.cts.map +1 -0
  53. package/dist/{BaseFunctionBuilder-Czi1Jwza.mjs → BaseFunctionBuilder-Dsqe6pnn.mjs} +2 -2
  54. package/dist/BaseFunctionBuilder-Dsqe6pnn.mjs.map +1 -0
  55. package/dist/{BaseFunctionBuilder-MYG3C9ug.cjs → BaseFunctionBuilder-Z0XwrKB5.cjs} +2 -2
  56. package/dist/BaseFunctionBuilder-Z0XwrKB5.cjs.map +1 -0
  57. package/dist/Construct-BNDLJJfD.mjs +150 -0
  58. package/dist/Construct-BNDLJJfD.mjs.map +1 -0
  59. package/dist/{Construct-Ba5cMxib.cjs → Construct-CPrCF8NK.cjs} +93 -9
  60. package/dist/Construct-CPrCF8NK.cjs.map +1 -0
  61. package/dist/{Construct-C4rPE67v.d.cts → Construct-Dl0l2d8d.d.cts} +30 -4
  62. package/dist/Construct-Dl0l2d8d.d.cts.map +1 -0
  63. package/dist/{Construct-XrijZFFh.d.mts → Construct-E8QPyHh4.d.mts} +30 -4
  64. package/dist/Construct-E8QPyHh4.d.mts.map +1 -0
  65. package/dist/Construct.cjs +4 -2
  66. package/dist/Construct.d.cts +2 -2
  67. package/dist/Construct.d.mts +2 -2
  68. package/dist/Construct.mjs +2 -2
  69. package/dist/{Cron-CGF4YAfM.cjs → Cron-BmPNTLla.cjs} +3 -3
  70. package/dist/Cron-BmPNTLla.cjs.map +1 -0
  71. package/dist/{Cron-BxhGs5up.mjs → Cron-BpJONaFv.mjs} +3 -3
  72. package/dist/Cron-BpJONaFv.mjs.map +1 -0
  73. package/dist/{Cron-bDLcTvV5.d.cts → Cron-CnmLLh3E.d.mts} +3 -3
  74. package/dist/Cron-CnmLLh3E.d.mts.map +1 -0
  75. package/dist/{Cron-cdjlSKNp.d.mts → Cron-DufAeHry.d.cts} +3 -3
  76. package/dist/Cron-DufAeHry.d.cts.map +1 -0
  77. package/dist/{CronBuilder-d2jh-IB2.mjs → CronBuilder-02HSIHJr.mjs} +4 -4
  78. package/dist/CronBuilder-02HSIHJr.mjs.map +1 -0
  79. package/dist/{CronBuilder-CcxKRtVP.cjs → CronBuilder-DC2zUS8a.cjs} +4 -4
  80. package/dist/CronBuilder-DC2zUS8a.cjs.map +1 -0
  81. package/dist/{CronBuilder-BC4m5-p1.d.mts → CronBuilder-anUSbMxb.d.mts} +4 -4
  82. package/dist/CronBuilder-anUSbMxb.d.mts.map +1 -0
  83. package/dist/{CronBuilder-DKVXyE0Q.d.cts → CronBuilder-fyqf_X8n.d.cts} +4 -4
  84. package/dist/CronBuilder-fyqf_X8n.d.cts.map +1 -0
  85. package/dist/{Endpoint-BVGZXFyV.cjs → Endpoint-BCWVbi8l.cjs} +6 -6
  86. package/dist/Endpoint-BCWVbi8l.cjs.map +1 -0
  87. package/dist/{Endpoint-BPv9_-m_.d.cts → Endpoint-BlcHiGNx.d.cts} +3 -3
  88. package/dist/Endpoint-BlcHiGNx.d.cts.map +1 -0
  89. package/dist/{Endpoint-BdwG75G_.d.mts → Endpoint-DEHuy46S.d.mts} +4 -4
  90. package/dist/Endpoint-DEHuy46S.d.mts.map +1 -0
  91. package/dist/{Endpoint-CuOEswxJ.mjs → Endpoint-ygxv2Ia6.mjs} +6 -6
  92. package/dist/Endpoint-ygxv2Ia6.mjs.map +1 -0
  93. package/dist/{EndpointBuilder-DIy_m1bu.d.cts → EndpointBuilder-DPLAUHqg.d.cts} +4 -4
  94. package/dist/EndpointBuilder-DPLAUHqg.d.cts.map +1 -0
  95. package/dist/{EndpointBuilder-B3az942t.d.mts → EndpointBuilder-DaeCeneF.d.mts} +5 -5
  96. package/dist/EndpointBuilder-DaeCeneF.d.mts.map +1 -0
  97. package/dist/{EndpointBuilder-Cgj1P_ra.cjs → EndpointBuilder-J5D67Y6a.cjs} +6 -6
  98. package/dist/EndpointBuilder-J5D67Y6a.cjs.map +1 -0
  99. package/dist/{EndpointBuilder-DnCB1h1j.mjs → EndpointBuilder-tn4zqoyw.mjs} +6 -6
  100. package/dist/EndpointBuilder-tn4zqoyw.mjs.map +1 -0
  101. package/dist/{EndpointFactory-CbdxPCIH.mjs → EndpointFactory-CIUZTTAF.mjs} +7 -7
  102. package/dist/EndpointFactory-CIUZTTAF.mjs.map +1 -0
  103. package/dist/{EndpointFactory-CyPbm3AD.d.cts → EndpointFactory-CiKcb5PX.d.cts} +4 -4
  104. package/dist/EndpointFactory-CiKcb5PX.d.cts.map +1 -0
  105. package/dist/{EndpointFactory-C-0nE6Jg.d.mts → EndpointFactory-DufM0t2z.d.mts} +4 -4
  106. package/dist/EndpointFactory-DufM0t2z.d.mts.map +1 -0
  107. package/dist/{EndpointFactory-CYj6BYok.cjs → EndpointFactory-d5uwWFkK.cjs} +7 -7
  108. package/dist/EndpointFactory-d5uwWFkK.cjs.map +1 -0
  109. package/dist/{Function-DDZb1525.cjs → Function-2qWSZqYB.cjs} +3 -3
  110. package/dist/Function-2qWSZqYB.cjs.map +1 -0
  111. package/dist/{Function-Cf7f_kCz.d.cts → Function-CbEohg13.d.cts} +3 -3
  112. package/dist/Function-CbEohg13.d.cts.map +1 -0
  113. package/dist/{Function-BVHqIDp9.mjs → Function-CdF1HmFu.mjs} +3 -3
  114. package/dist/Function-CdF1HmFu.mjs.map +1 -0
  115. package/dist/{Function-DN2G6OT5.d.mts → Function-EjIOLxlh.d.mts} +3 -3
  116. package/dist/Function-EjIOLxlh.d.mts.map +1 -0
  117. package/dist/{FunctionBuilder-DswJ-9sD.cjs → FunctionBuilder-B-pbgm09.cjs} +4 -4
  118. package/dist/FunctionBuilder-B-pbgm09.cjs.map +1 -0
  119. package/dist/{FunctionBuilder-CJBzzXL3.d.cts → FunctionBuilder-CX3ooNdq.d.cts} +4 -4
  120. package/dist/FunctionBuilder-CX3ooNdq.d.cts.map +1 -0
  121. package/dist/{FunctionBuilder-Cxx8D2na.d.mts → FunctionBuilder-D11ytDyy.d.mts} +4 -4
  122. package/dist/FunctionBuilder-D11ytDyy.d.mts.map +1 -0
  123. package/dist/{FunctionBuilder-CrDYgfiI.mjs → FunctionBuilder-DaWVthAJ.mjs} +4 -4
  124. package/dist/FunctionBuilder-DaWVthAJ.mjs.map +1 -0
  125. package/dist/{FunctionExecutionWrapper-DF260Aaj.d.mts → FunctionExecutionWrapper-BJcRjH9Z.d.cts} +5 -5
  126. package/dist/FunctionExecutionWrapper-BJcRjH9Z.d.cts.map +1 -0
  127. package/dist/{FunctionExecutionWrapper-BYI2bGTL.cjs → FunctionExecutionWrapper-C6ChBNHs.cjs} +3 -3
  128. package/dist/FunctionExecutionWrapper-C6ChBNHs.cjs.map +1 -0
  129. package/dist/{FunctionExecutionWrapper-Qy8bmgFR.d.cts → FunctionExecutionWrapper-D3RNjGIR.d.mts} +5 -5
  130. package/dist/FunctionExecutionWrapper-D3RNjGIR.d.mts.map +1 -0
  131. package/dist/{FunctionExecutionWrapper-CLDh7Z2_.mjs → FunctionExecutionWrapper-Dj3pmXaN.mjs} +3 -3
  132. package/dist/FunctionExecutionWrapper-Dj3pmXaN.mjs.map +1 -0
  133. package/dist/{HonoEndpointAdaptor-BaPlUhz0.d.mts → HonoEndpointAdaptor-CKP6nrG2.d.mts} +11 -6
  134. package/dist/HonoEndpointAdaptor-CKP6nrG2.d.mts.map +1 -0
  135. package/dist/HonoEndpointAdaptor-Cc8Rnp9G.mjs +251 -0
  136. package/dist/HonoEndpointAdaptor-Cc8Rnp9G.mjs.map +1 -0
  137. package/dist/{HonoEndpointAdaptor-YcRHYALH.d.cts → HonoEndpointAdaptor-hrrvyfw9.d.cts} +10 -5
  138. package/dist/HonoEndpointAdaptor-hrrvyfw9.d.cts.map +1 -0
  139. package/dist/HonoEndpointAdaptor-xGnDZa3a.cjs +257 -0
  140. package/dist/HonoEndpointAdaptor-xGnDZa3a.cjs.map +1 -0
  141. package/dist/{Subscriber-COYMSevD.d.cts → Subscriber-BBcIOkhW.d.cts} +2 -2
  142. package/dist/Subscriber-BBcIOkhW.d.cts.map +1 -0
  143. package/dist/{Subscriber-ikctpU3I.d.mts → Subscriber-BpTAXvbM.d.mts} +2 -2
  144. package/dist/Subscriber-BpTAXvbM.d.mts.map +1 -0
  145. package/dist/{Subscriber-BiHjVXtM.cjs → Subscriber-CL4iYm01.cjs} +2 -2
  146. package/dist/Subscriber-CL4iYm01.cjs.map +1 -0
  147. package/dist/{Subscriber-BmPf9GFb.mjs → Subscriber-CZ8Smwd2.mjs} +2 -2
  148. package/dist/Subscriber-CZ8Smwd2.mjs.map +1 -0
  149. package/dist/{SubscriberBuilder-DJPEeYDJ.mjs → SubscriberBuilder-CxQg3TTm.mjs} +2 -2
  150. package/dist/SubscriberBuilder-CxQg3TTm.mjs.map +1 -0
  151. package/dist/{SubscriberBuilder-Cp1C-xtT.cjs → SubscriberBuilder-D0OS3hd7.cjs} +2 -2
  152. package/dist/SubscriberBuilder-D0OS3hd7.cjs.map +1 -0
  153. package/dist/{SubscriberBuilder-D_9zzllj.d.mts → SubscriberBuilder-D7IgufwB.d.cts} +3 -3
  154. package/dist/SubscriberBuilder-D7IgufwB.d.cts.map +1 -0
  155. package/dist/{SubscriberBuilder-ivHAGIVi.d.cts → SubscriberBuilder-DOFBbWLt.d.mts} +3 -3
  156. package/dist/SubscriberBuilder-DOFBbWLt.d.mts.map +1 -0
  157. package/dist/{TestEndpointAdaptor-DB7bREhS.d.mts → TestEndpointAdaptor-BnJusjf7.d.mts} +4 -4
  158. package/dist/TestEndpointAdaptor-BnJusjf7.d.mts.map +1 -0
  159. package/dist/TestEndpointAdaptor-CPL8ru6q.mjs +170 -0
  160. package/dist/TestEndpointAdaptor-CPL8ru6q.mjs.map +1 -0
  161. package/dist/TestEndpointAdaptor-Ca4K26_d.cjs +176 -0
  162. package/dist/TestEndpointAdaptor-Ca4K26_d.cjs.map +1 -0
  163. package/dist/{TestEndpointAdaptor-C10xBI--.d.cts → TestEndpointAdaptor-EPPTjntv.d.cts} +3 -3
  164. package/dist/TestEndpointAdaptor-EPPTjntv.d.cts.map +1 -0
  165. package/dist/adaptors/aws.cjs +12 -12
  166. package/dist/adaptors/aws.d.cts +15 -14
  167. package/dist/adaptors/aws.d.mts +16 -15
  168. package/dist/adaptors/aws.mjs +12 -12
  169. package/dist/adaptors/hono.cjs +10 -9
  170. package/dist/adaptors/hono.d.cts +8 -8
  171. package/dist/adaptors/hono.d.mts +9 -9
  172. package/dist/adaptors/hono.mjs +10 -9
  173. package/dist/adaptors/testing.cjs +8 -7
  174. package/dist/adaptors/testing.d.cts +8 -8
  175. package/dist/adaptors/testing.d.mts +9 -9
  176. package/dist/adaptors/testing.mjs +8 -7
  177. package/dist/crons/Cron.cjs +6 -6
  178. package/dist/crons/Cron.d.cts +6 -6
  179. package/dist/crons/Cron.d.mts +6 -6
  180. package/dist/crons/Cron.mjs +6 -6
  181. package/dist/crons/CronBuilder.cjs +7 -7
  182. package/dist/crons/CronBuilder.d.cts +7 -7
  183. package/dist/crons/CronBuilder.d.mts +7 -7
  184. package/dist/crons/CronBuilder.mjs +7 -7
  185. package/dist/crons/index.cjs +7 -7
  186. package/dist/crons/index.cjs.map +1 -1
  187. package/dist/crons/index.d.cts +11 -11
  188. package/dist/crons/index.d.mts +7 -7
  189. package/dist/crons/index.mjs +7 -7
  190. package/dist/crons/index.mjs.map +1 -1
  191. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +7 -7
  192. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +10 -9
  193. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +11 -10
  194. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +7 -7
  195. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +8 -8
  196. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +10 -9
  197. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +11 -10
  198. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +8 -8
  199. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +8 -8
  200. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +11 -10
  201. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +12 -11
  202. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +8 -8
  203. package/dist/endpoints/Authorizer.cjs +1 -1
  204. package/dist/endpoints/Authorizer.d.cts +1 -1
  205. package/dist/endpoints/Authorizer.d.mts +1 -1
  206. package/dist/endpoints/Authorizer.mjs +1 -1
  207. package/dist/endpoints/Endpoint.cjs +6 -6
  208. package/dist/endpoints/Endpoint.d.cts +7 -7
  209. package/dist/endpoints/Endpoint.d.mts +8 -8
  210. package/dist/endpoints/Endpoint.mjs +6 -6
  211. package/dist/endpoints/EndpointBuilder.cjs +9 -9
  212. package/dist/endpoints/EndpointBuilder.d.cts +8 -8
  213. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  214. package/dist/endpoints/EndpointBuilder.mjs +9 -9
  215. package/dist/endpoints/EndpointFactory.cjs +10 -10
  216. package/dist/endpoints/EndpointFactory.d.cts +9 -9
  217. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  218. package/dist/endpoints/EndpointFactory.mjs +10 -10
  219. package/dist/endpoints/HonoEndpointAdaptor.cjs +10 -9
  220. package/dist/endpoints/HonoEndpointAdaptor.d.cts +8 -8
  221. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  222. package/dist/endpoints/HonoEndpointAdaptor.mjs +10 -9
  223. package/dist/endpoints/TestEndpointAdaptor.cjs +8 -7
  224. package/dist/endpoints/TestEndpointAdaptor.d.cts +8 -8
  225. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  226. package/dist/endpoints/TestEndpointAdaptor.mjs +8 -7
  227. package/dist/endpoints/audit.d.cts +7 -7
  228. package/dist/endpoints/audit.d.mts +8 -8
  229. package/dist/endpoints/helpers.cjs +7 -7
  230. package/dist/endpoints/helpers.d.cts +7 -7
  231. package/dist/endpoints/helpers.d.cts.map +1 -1
  232. package/dist/endpoints/helpers.d.mts +8 -8
  233. package/dist/endpoints/helpers.d.mts.map +1 -1
  234. package/dist/endpoints/helpers.mjs +7 -7
  235. package/dist/endpoints/index.cjs +20 -10
  236. package/dist/endpoints/index.cjs.map +1 -1
  237. package/dist/endpoints/index.d.cts +14 -12
  238. package/dist/endpoints/index.d.cts.map +1 -1
  239. package/dist/endpoints/index.d.mts +15 -13
  240. package/dist/endpoints/index.d.mts.map +1 -1
  241. package/dist/endpoints/index.mjs +13 -11
  242. package/dist/endpoints/index.mjs.map +1 -1
  243. package/dist/endpoints/lazyAccessors.cjs +10 -0
  244. package/dist/endpoints/lazyAccessors.d.cts +10 -0
  245. package/dist/endpoints/lazyAccessors.d.mts +10 -0
  246. package/dist/endpoints/lazyAccessors.mjs +3 -0
  247. package/dist/endpoints/parseHonoQuery.cjs +1 -1
  248. package/dist/endpoints/parseHonoQuery.mjs +1 -1
  249. package/dist/endpoints/parseQueryParams.d.cts.map +1 -1
  250. package/dist/endpoints/parseQueryParams.d.mts.map +1 -1
  251. package/dist/endpoints/processAudits.d.cts +7 -7
  252. package/dist/endpoints/processAudits.d.cts.map +1 -1
  253. package/dist/endpoints/processAudits.d.mts +8 -8
  254. package/dist/endpoints/processAudits.d.mts.map +1 -1
  255. package/dist/endpoints/rls.cjs +1 -1
  256. package/dist/endpoints/rls.d.cts +7 -7
  257. package/dist/endpoints/rls.d.mts +8 -8
  258. package/dist/endpoints/rls.mjs +1 -1
  259. package/dist/functions/AWSLambdaFunction.cjs +6 -6
  260. package/dist/functions/AWSLambdaFunction.d.cts +4 -4
  261. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  262. package/dist/functions/AWSLambdaFunction.mjs +6 -6
  263. package/dist/functions/BaseFunctionBuilder.cjs +2 -2
  264. package/dist/functions/BaseFunctionBuilder.d.cts +2 -2
  265. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  266. package/dist/functions/BaseFunctionBuilder.mjs +2 -2
  267. package/dist/functions/Function.cjs +2 -2
  268. package/dist/functions/Function.d.cts +2 -2
  269. package/dist/functions/Function.d.mts +2 -2
  270. package/dist/functions/Function.mjs +2 -2
  271. package/dist/functions/FunctionBuilder.cjs +4 -4
  272. package/dist/functions/FunctionBuilder.d.cts +4 -4
  273. package/dist/functions/FunctionBuilder.d.mts +4 -4
  274. package/dist/functions/FunctionBuilder.mjs +4 -4
  275. package/dist/functions/FunctionExecutionWrapper.cjs +5 -5
  276. package/dist/functions/FunctionExecutionWrapper.d.cts +3 -3
  277. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  278. package/dist/functions/FunctionExecutionWrapper.mjs +5 -5
  279. package/dist/functions/TestFunctionAdaptor.cjs +7 -7
  280. package/dist/functions/TestFunctionAdaptor.cjs.map +1 -1
  281. package/dist/functions/TestFunctionAdaptor.d.cts +3 -3
  282. package/dist/functions/TestFunctionAdaptor.d.cts.map +1 -1
  283. package/dist/functions/TestFunctionAdaptor.d.mts +3 -3
  284. package/dist/functions/TestFunctionAdaptor.d.mts.map +1 -1
  285. package/dist/functions/TestFunctionAdaptor.mjs +7 -7
  286. package/dist/functions/TestFunctionAdaptor.mjs.map +1 -1
  287. package/dist/functions/index.cjs +5 -5
  288. package/dist/functions/index.d.cts +5 -5
  289. package/dist/functions/index.d.mts +5 -5
  290. package/dist/functions/index.mjs +5 -5
  291. package/dist/{functions-fTid0RMK.cjs → functions-CUEv5NC3.cjs} +2 -2
  292. package/dist/functions-CUEv5NC3.cjs.map +1 -0
  293. package/dist/functions-DOYBrb7n.mjs +8 -0
  294. package/dist/functions-DOYBrb7n.mjs.map +1 -0
  295. package/dist/{helpers-ByRTDO_m.mjs → helpers-Dl1eszfi.mjs} +2 -2
  296. package/dist/helpers-Dl1eszfi.mjs.map +1 -0
  297. package/dist/{helpers-BcP1tXAi.cjs → helpers-QMdfdnvU.cjs} +2 -2
  298. package/dist/helpers-QMdfdnvU.cjs.map +1 -0
  299. package/dist/{index-BWzGIj06.d.mts → index-BrGtMlpJ.d.cts} +2 -2
  300. package/dist/index-BrGtMlpJ.d.cts.map +1 -0
  301. package/dist/index-Dn4py3Db.d.mts +12 -0
  302. package/dist/index-Dn4py3Db.d.mts.map +1 -0
  303. package/dist/index.cjs +4 -2
  304. package/dist/index.d.cts +3 -2
  305. package/dist/index.d.mts +4 -3
  306. package/dist/index.mjs +2 -2
  307. package/dist/lazyAccessors-B-Jgkg2o.mjs +175 -0
  308. package/dist/lazyAccessors-B-Jgkg2o.mjs.map +1 -0
  309. package/dist/lazyAccessors-B8Hhras9.cjs +223 -0
  310. package/dist/lazyAccessors-B8Hhras9.cjs.map +1 -0
  311. package/dist/lazyAccessors-BFAj2-S4.d.mts +49 -0
  312. package/dist/lazyAccessors-BFAj2-S4.d.mts.map +1 -0
  313. package/dist/lazyAccessors-knaNZuTN.d.cts +49 -0
  314. package/dist/lazyAccessors-knaNZuTN.d.cts.map +1 -0
  315. package/dist/{parseHonoQuery-CZC5_97v.cjs → parseHonoQuery-D4MhxTRc.cjs} +1 -1
  316. package/dist/parseHonoQuery-D4MhxTRc.cjs.map +1 -0
  317. package/dist/{parseHonoQuery-DDgIkTO4.mjs → parseHonoQuery-DpK3sGPc.mjs} +1 -1
  318. package/dist/parseHonoQuery-DpK3sGPc.mjs.map +1 -0
  319. package/dist/parseQueryParams-BSNkjmZ9.cjs.map +1 -1
  320. package/dist/parseQueryParams-UMTRnRrW.mjs.map +1 -1
  321. package/dist/processAudits-CzHkPokQ.cjs.map +1 -1
  322. package/dist/processAudits-Dj8UGqcW.mjs.map +1 -1
  323. package/dist/publisher-BXG9YiRi.d.mts +16 -0
  324. package/dist/publisher-BXG9YiRi.d.mts.map +1 -0
  325. package/dist/publisher-Bw4770Hi.mjs.map +1 -1
  326. package/dist/publisher-D9ngDXg3.d.cts +16 -0
  327. package/dist/publisher-D9ngDXg3.d.cts.map +1 -0
  328. package/dist/publisher-lFQleddL.cjs.map +1 -1
  329. package/dist/publisher.d.cts +3 -16
  330. package/dist/publisher.d.mts +3 -16
  331. package/dist/{rls-CmJ7bRsz.cjs → rls-BrywnrQb.cjs} +1 -1
  332. package/dist/{rls-CmJ7bRsz.cjs.map → rls-BrywnrQb.cjs.map} +1 -1
  333. package/dist/{rls-Bf3FRwto.mjs → rls-C0cWOnk4.mjs} +1 -1
  334. package/dist/{rls-Bf3FRwto.mjs.map → rls-C0cWOnk4.mjs.map} +1 -1
  335. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  336. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +3 -3
  337. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  338. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  339. package/dist/subscribers/Subscriber.cjs +2 -2
  340. package/dist/subscribers/Subscriber.d.cts +2 -2
  341. package/dist/subscribers/Subscriber.d.mts +2 -2
  342. package/dist/subscribers/Subscriber.mjs +2 -2
  343. package/dist/subscribers/SubscriberBuilder.cjs +3 -3
  344. package/dist/subscribers/SubscriberBuilder.d.cts +3 -3
  345. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  346. package/dist/subscribers/SubscriberBuilder.mjs +3 -3
  347. package/dist/subscribers/index.cjs +3 -3
  348. package/dist/subscribers/index.cjs.map +1 -1
  349. package/dist/subscribers/index.d.cts +5 -5
  350. package/dist/subscribers/index.d.cts.map +1 -1
  351. package/dist/subscribers/index.d.mts +5 -5
  352. package/dist/subscribers/index.d.mts.map +1 -1
  353. package/dist/subscribers/index.mjs +3 -3
  354. package/dist/subscribers/index.mjs.map +1 -1
  355. package/dist/telemetry-BTaiRqPo.d.cts +95 -0
  356. package/dist/telemetry-BTaiRqPo.d.cts.map +1 -0
  357. package/dist/telemetry-yAHf5yDs.d.mts +95 -0
  358. package/dist/telemetry-yAHf5yDs.d.mts.map +1 -0
  359. package/dist/telemetry.cjs +0 -0
  360. package/dist/telemetry.d.cts +2 -0
  361. package/dist/telemetry.d.mts +2 -0
  362. package/dist/telemetry.mjs +0 -0
  363. package/dist/types-B5H3piDg.d.cts.map +1 -1
  364. package/dist/{types-DdIlpxAd.d.mts → types-Dw-iLd3Y.d.mts} +1 -1
  365. package/dist/types-Dw-iLd3Y.d.mts.map +1 -0
  366. package/dist/types.d.mts +1 -1
  367. package/package.json +19 -18
  368. package/src/Construct.ts +189 -94
  369. package/src/__benchmarks__/build-time-optimization.bench.ts +274 -0
  370. package/src/__benchmarks__/endpoint.bench.ts +375 -375
  371. package/src/__benchmarks__/fixtures.ts +241 -0
  372. package/src/__benchmarks__/hono-adaptor.bench.ts +533 -0
  373. package/src/__benchmarks__/hono-server.bench.ts +206 -206
  374. package/src/__benchmarks__/response-builder.bench.ts +428 -0
  375. package/src/__benchmarks__/strategies/strategy-a-lazy-services.ts +319 -0
  376. package/src/__benchmarks__/strategies/strategy-c-middleware.ts +530 -0
  377. package/src/__benchmarks__/strategies/strategy-d-opt-in-events.ts +567 -0
  378. package/src/__tests__/Construct.environment.spec.ts +572 -351
  379. package/src/__tests__/publisher.setting.spec.ts +496 -499
  380. package/src/__tests__/publisher.spec.ts +440 -442
  381. package/src/crons/Cron.ts +117 -117
  382. package/src/crons/CronBuilder.ts +237 -238
  383. package/src/crons/__tests__/Cron.spec.ts +448 -448
  384. package/src/crons/__tests__/CronBuilder.state-isolation.spec.ts +214 -214
  385. package/src/crons/index.ts +4 -4
  386. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +571 -463
  387. package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +86 -86
  388. package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +85 -81
  389. package/src/endpoints/Authorizer.ts +100 -100
  390. package/src/endpoints/Endpoint.ts +921 -937
  391. package/src/endpoints/EndpointBuilder.ts +703 -703
  392. package/src/endpoints/EndpointFactory.ts +1054 -1056
  393. package/src/endpoints/HonoEndpointAdaptor.ts +621 -548
  394. package/src/endpoints/TestEndpointAdaptor.ts +372 -353
  395. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.audits.spec.ts +499 -0
  396. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +541 -542
  397. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +1172 -1174
  398. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +599 -599
  399. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +710 -710
  400. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.factory-publisher.spec.ts +280 -280
  401. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +924 -730
  402. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.rls.spec.ts +307 -0
  403. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +408 -408
  404. package/src/endpoints/__tests__/Authorizer.spec.ts +286 -0
  405. package/src/endpoints/__tests__/Endpoint.cookies.spec.ts +162 -162
  406. package/src/endpoints/__tests__/Endpoint.headers.spec.ts +182 -182
  407. package/src/endpoints/__tests__/Endpoint.manifest.spec.ts +158 -159
  408. package/src/endpoints/__tests__/Endpoint.spec.ts +819 -822
  409. package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +427 -427
  410. package/src/endpoints/__tests__/EndpointBuilder.spec.ts +478 -478
  411. package/src/endpoints/__tests__/EndpointFactory.authorizers.spec.ts +426 -426
  412. package/src/endpoints/__tests__/EndpointFactory.database-auditor.spec.ts +501 -501
  413. package/src/endpoints/__tests__/EndpointFactory.reference-audit.spec.ts +177 -177
  414. package/src/endpoints/__tests__/EndpointFactory.spec.ts +471 -471
  415. package/src/endpoints/__tests__/EndpointFactory.state-isolation.spec.ts +143 -143
  416. package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +663 -663
  417. package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +608 -608
  418. package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +561 -561
  419. package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +1036 -1036
  420. package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +278 -278
  421. package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +1093 -1093
  422. package/src/endpoints/__tests__/ResponseBuilder.spec.ts +230 -230
  423. package/src/endpoints/__tests__/TestEndpointAdaptor.audits.spec.ts +569 -569
  424. package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +841 -841
  425. package/src/endpoints/__tests__/endpoint-types.test.ts +68 -68
  426. package/src/endpoints/__tests__/helpers.spec.ts +37 -0
  427. package/src/endpoints/__tests__/lazyAccessors.spec.ts +330 -0
  428. package/src/endpoints/__tests__/processAudits.spec.ts +631 -0
  429. package/src/endpoints/audit.ts +51 -51
  430. package/src/endpoints/helpers.ts +34 -35
  431. package/src/endpoints/index.ts +33 -23
  432. package/src/endpoints/lazyAccessors.ts +241 -0
  433. package/src/endpoints/parseHonoQuery.ts +41 -41
  434. package/src/endpoints/parseQueryParams.ts +36 -36
  435. package/src/endpoints/processAudits.ts +269 -269
  436. package/src/endpoints/rls.ts +16 -16
  437. package/src/functions/AWSLambdaFunction.ts +294 -295
  438. package/src/functions/BaseFunctionBuilder.ts +185 -185
  439. package/src/functions/Function.ts +190 -190
  440. package/src/functions/FunctionBuilder.ts +353 -353
  441. package/src/functions/FunctionExecutionWrapper.ts +199 -200
  442. package/src/functions/TestFunctionAdaptor.ts +191 -191
  443. package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +424 -424
  444. package/src/functions/__tests__/Function.audits.spec.ts +364 -364
  445. package/src/functions/__tests__/Function.spec.ts +453 -454
  446. package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +179 -179
  447. package/src/functions/__tests__/TestFunctionAdaptor.spec.ts +369 -369
  448. package/src/functions/index.ts +6 -4
  449. package/src/index.ts +18 -9
  450. package/src/publisher.ts +71 -72
  451. package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +244 -248
  452. package/src/subscribers/Subscriber.ts +82 -84
  453. package/src/subscribers/SubscriberBuilder.ts +129 -129
  454. package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +589 -589
  455. package/src/subscribers/__tests__/Subscriber.spec.ts +402 -404
  456. package/src/subscribers/index.ts +1 -0
  457. package/src/telemetry.ts +103 -0
  458. package/src/types.ts +7 -7
  459. package/test.ts +58 -59
  460. package/dist/AWSLambdaFunction-BdebRMUh.d.mts.map +0 -1
  461. package/dist/AWSLambdaFunction-C54a1doJ.mjs.map +0 -1
  462. package/dist/AWSLambdaFunction-D0tEOTXQ.d.cts.map +0 -1
  463. package/dist/AWSLambdaFunction-EPGY4s7i.cjs.map +0 -1
  464. package/dist/AWSLambdaSubscriberAdaptor-BLfO612H.mjs.map +0 -1
  465. package/dist/AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs.map +0 -1
  466. package/dist/AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts.map +0 -1
  467. package/dist/AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts.map +0 -1
  468. package/dist/AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs.map +0 -1
  469. package/dist/AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts.map +0 -1
  470. package/dist/AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs.map +0 -1
  471. package/dist/AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts.map +0 -1
  472. package/dist/AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs.map +0 -1
  473. package/dist/AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs.map +0 -1
  474. package/dist/AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts.map +0 -1
  475. package/dist/AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts.map +0 -1
  476. package/dist/AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs.map +0 -1
  477. package/dist/AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts.map +0 -1
  478. package/dist/AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts.map +0 -1
  479. package/dist/AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs.map +0 -1
  480. package/dist/Authorizer-B-btowNd.d.cts.map +0 -1
  481. package/dist/Authorizer-C0ge_tc8.cjs.map +0 -1
  482. package/dist/Authorizer-gWxYsGEp.d.mts.map +0 -1
  483. package/dist/Authorizer-r9U3y_ms.mjs.map +0 -1
  484. package/dist/BaseFunctionBuilder-BAtutR6q.d.cts.map +0 -1
  485. package/dist/BaseFunctionBuilder-Czi1Jwza.mjs.map +0 -1
  486. package/dist/BaseFunctionBuilder-DRY419e7.d.mts.map +0 -1
  487. package/dist/BaseFunctionBuilder-MYG3C9ug.cjs.map +0 -1
  488. package/dist/Construct-Ba5cMxib.cjs.map +0 -1
  489. package/dist/Construct-C4rPE67v.d.cts.map +0 -1
  490. package/dist/Construct-DdyGHuag.mjs +0 -78
  491. package/dist/Construct-DdyGHuag.mjs.map +0 -1
  492. package/dist/Construct-XrijZFFh.d.mts.map +0 -1
  493. package/dist/Cron-BxhGs5up.mjs.map +0 -1
  494. package/dist/Cron-CGF4YAfM.cjs.map +0 -1
  495. package/dist/Cron-bDLcTvV5.d.cts.map +0 -1
  496. package/dist/Cron-cdjlSKNp.d.mts.map +0 -1
  497. package/dist/CronBuilder-BC4m5-p1.d.mts.map +0 -1
  498. package/dist/CronBuilder-CcxKRtVP.cjs.map +0 -1
  499. package/dist/CronBuilder-DKVXyE0Q.d.cts.map +0 -1
  500. package/dist/CronBuilder-d2jh-IB2.mjs.map +0 -1
  501. package/dist/Endpoint-BPv9_-m_.d.cts.map +0 -1
  502. package/dist/Endpoint-BVGZXFyV.cjs.map +0 -1
  503. package/dist/Endpoint-BdwG75G_.d.mts.map +0 -1
  504. package/dist/Endpoint-CuOEswxJ.mjs.map +0 -1
  505. package/dist/EndpointBuilder-B3az942t.d.mts.map +0 -1
  506. package/dist/EndpointBuilder-Cgj1P_ra.cjs.map +0 -1
  507. package/dist/EndpointBuilder-DIy_m1bu.d.cts.map +0 -1
  508. package/dist/EndpointBuilder-DnCB1h1j.mjs.map +0 -1
  509. package/dist/EndpointFactory-C-0nE6Jg.d.mts.map +0 -1
  510. package/dist/EndpointFactory-CYj6BYok.cjs.map +0 -1
  511. package/dist/EndpointFactory-CbdxPCIH.mjs.map +0 -1
  512. package/dist/EndpointFactory-CyPbm3AD.d.cts.map +0 -1
  513. package/dist/Function-BVHqIDp9.mjs.map +0 -1
  514. package/dist/Function-Cf7f_kCz.d.cts.map +0 -1
  515. package/dist/Function-DDZb1525.cjs.map +0 -1
  516. package/dist/Function-DN2G6OT5.d.mts.map +0 -1
  517. package/dist/FunctionBuilder-CJBzzXL3.d.cts.map +0 -1
  518. package/dist/FunctionBuilder-CrDYgfiI.mjs.map +0 -1
  519. package/dist/FunctionBuilder-Cxx8D2na.d.mts.map +0 -1
  520. package/dist/FunctionBuilder-DswJ-9sD.cjs.map +0 -1
  521. package/dist/FunctionExecutionWrapper-BYI2bGTL.cjs.map +0 -1
  522. package/dist/FunctionExecutionWrapper-CLDh7Z2_.mjs.map +0 -1
  523. package/dist/FunctionExecutionWrapper-DF260Aaj.d.mts.map +0 -1
  524. package/dist/FunctionExecutionWrapper-Qy8bmgFR.d.cts.map +0 -1
  525. package/dist/HonoEndpointAdaptor-BaPlUhz0.d.mts.map +0 -1
  526. package/dist/HonoEndpointAdaptor-CQe2FqMR.cjs +0 -234
  527. package/dist/HonoEndpointAdaptor-CQe2FqMR.cjs.map +0 -1
  528. package/dist/HonoEndpointAdaptor-Ce-2HBxn.mjs +0 -228
  529. package/dist/HonoEndpointAdaptor-Ce-2HBxn.mjs.map +0 -1
  530. package/dist/HonoEndpointAdaptor-YcRHYALH.d.cts.map +0 -1
  531. package/dist/Subscriber-BiHjVXtM.cjs.map +0 -1
  532. package/dist/Subscriber-BmPf9GFb.mjs.map +0 -1
  533. package/dist/Subscriber-COYMSevD.d.cts.map +0 -1
  534. package/dist/Subscriber-ikctpU3I.d.mts.map +0 -1
  535. package/dist/SubscriberBuilder-Cp1C-xtT.cjs.map +0 -1
  536. package/dist/SubscriberBuilder-DJPEeYDJ.mjs.map +0 -1
  537. package/dist/SubscriberBuilder-D_9zzllj.d.mts.map +0 -1
  538. package/dist/SubscriberBuilder-ivHAGIVi.d.cts.map +0 -1
  539. package/dist/TestEndpointAdaptor-C10xBI--.d.cts.map +0 -1
  540. package/dist/TestEndpointAdaptor-DB7bREhS.d.mts.map +0 -1
  541. package/dist/TestEndpointAdaptor-DJgik2Wj.mjs +0 -160
  542. package/dist/TestEndpointAdaptor-DJgik2Wj.mjs.map +0 -1
  543. package/dist/TestEndpointAdaptor-ZbtQiuHE.cjs +0 -166
  544. package/dist/TestEndpointAdaptor-ZbtQiuHE.cjs.map +0 -1
  545. package/dist/functions-C6EK1xL6.mjs +0 -8
  546. package/dist/functions-C6EK1xL6.mjs.map +0 -1
  547. package/dist/functions-fTid0RMK.cjs.map +0 -1
  548. package/dist/helpers-BcP1tXAi.cjs.map +0 -1
  549. package/dist/helpers-ByRTDO_m.mjs.map +0 -1
  550. package/dist/index-BWzGIj06.d.mts.map +0 -1
  551. package/dist/index-DmFozqLd.d.cts +0 -12
  552. package/dist/index-DmFozqLd.d.cts.map +0 -1
  553. package/dist/parseHonoQuery-CZC5_97v.cjs.map +0 -1
  554. package/dist/parseHonoQuery-DDgIkTO4.mjs.map +0 -1
  555. package/dist/publisher.d.cts.map +0 -1
  556. package/dist/publisher.d.mts.map +0 -1
  557. package/dist/types-DdIlpxAd.d.mts.map +0 -1
@@ -1,360 +1,581 @@
1
- import type { EnvironmentParser } from '@geekmidas/envkit';
2
- import type { PublishableMessage } from '@geekmidas/events';
3
- import type { Service } from '@geekmidas/services';
1
+ import type { EventPublisher, PublishableMessage } from '@geekmidas/events';
2
+ import type { Service, ServiceRegisterOptions } from '@geekmidas/services';
4
3
  import { describe, expect, it } from 'vitest';
5
4
  import { z } from 'zod/v4';
5
+ import { sniffService } from '../Construct';
6
6
  import { c } from '../crons';
7
7
  import { e } from '../endpoints';
8
8
  import { f } from '../functions';
9
9
  import { s } from '../subscribers';
10
10
 
11
11
  describe('Construct environment getter', () => {
12
- describe('Function', () => {
13
- it('should return empty array when no services are provided', async () => {
14
- const fn = f.handle(async () => ({ success: true }));
15
-
16
- expect(await fn.getEnvironment()).toEqual([]);
17
- });
18
-
19
- it('should detect environment variables from a single service', async () => {
20
- const databaseService = {
21
- serviceName: 'database' as const,
22
- register(envParser: EnvironmentParser<{}>) {
23
- return envParser.create((get) => ({
24
- url: get('DATABASE_URL').string(),
25
- port: get('DATABASE_PORT').string().transform(Number).default(5432),
26
- }));
27
- },
28
- } satisfies Service<'database', any>;
29
-
30
- const fn = f
31
- .services([databaseService])
32
- .handle(async () => ({ success: true }));
33
-
34
- const envVars = await fn.getEnvironment();
35
-
36
- expect(envVars).toEqual(['DATABASE_PORT', 'DATABASE_URL']);
37
- });
38
-
39
- it('should detect environment variables from multiple services', async () => {
40
- const databaseService = {
41
- serviceName: 'database' as const,
42
- register(envParser: EnvironmentParser<{}>) {
43
- return envParser.create((get) => ({
44
- url: get('DATABASE_URL').string(),
45
- }));
46
- },
47
- } satisfies Service<'database', any>;
48
-
49
- const redisService = {
50
- serviceName: 'redis' as const,
51
- register(envParser: EnvironmentParser<{}>) {
52
- return envParser.create((get) => ({
53
- url: get('REDIS_URL').string(),
54
- ttl: get('REDIS_TTL').string().transform(Number).default(3600),
55
- }));
56
- },
57
- } satisfies Service<'redis', any>;
58
-
59
- const fn = f
60
- .services([databaseService, redisService])
61
- .handle(async () => ({ success: true }));
62
-
63
- const envVars = await fn.getEnvironment();
64
-
65
- expect(envVars).toEqual(['DATABASE_URL', 'REDIS_TTL', 'REDIS_URL']);
66
- });
67
-
68
- it('should deduplicate environment variables across services', async () => {
69
- const service1 = {
70
- serviceName: 'service1' as const,
71
- register(envParser: EnvironmentParser<{}>) {
72
- return envParser.create((get) => ({
73
- apiKey: get('SHARED_API_KEY').string(),
74
- }));
75
- },
76
- } satisfies Service<'service1', any>;
77
-
78
- const service2 = {
79
- serviceName: 'service2' as const,
80
- register(envParser: EnvironmentParser<{}>) {
81
- return envParser.create((get) => ({
82
- apiKey: get('SHARED_API_KEY').string(),
83
- }));
84
- },
85
- } satisfies Service<'service2', any>;
86
-
87
- const fn = f
88
- .services([service1, service2])
89
- .handle(async () => ({ success: true }));
90
-
91
- const envVars = await fn.getEnvironment();
92
-
93
- // Should only appear once despite being used in both services
94
- expect(envVars).toEqual(['SHARED_API_KEY']);
95
- });
96
-
97
- it('should handle services with nested configuration', async () => {
98
- const configService = {
99
- serviceName: 'config' as const,
100
- register(envParser: EnvironmentParser<{}>) {
101
- return envParser.create((get) => ({
102
- database: {
103
- host: get('DB_HOST').string(),
104
- port: get('DB_PORT').string().transform(Number),
105
- },
106
- api: {
107
- key: get('API_KEY').string(),
108
- url: get('API_URL').string().url(),
109
- },
110
- }));
111
- },
112
- } satisfies Service<'config', any>;
113
-
114
- const fn = f
115
- .services([configService])
116
- .handle(async () => ({ success: true }));
117
-
118
- const envVars = await fn.getEnvironment();
119
-
120
- expect(envVars).toEqual(['API_KEY', 'API_URL', 'DB_HOST', 'DB_PORT']);
121
- });
122
-
123
- it('should handle services that return non-ConfigParser values', async () => {
124
- const simpleService = {
125
- serviceName: 'simple' as const,
126
- register(_envParser: EnvironmentParser<{}>) {
127
- // This service doesn't use envParser - just returns a plain object
128
- return { value: 'test' };
129
- },
130
- } satisfies Service<'simple', any>;
131
-
132
- const databaseService = {
133
- serviceName: 'database' as const,
134
- register(envParser: EnvironmentParser<{}>) {
135
- return envParser.create((get) => ({
136
- url: get('DATABASE_URL').string(),
137
- }));
138
- },
139
- } satisfies Service<'database', any>;
140
-
141
- const fn = f
142
- .services([simpleService, databaseService])
143
- .handle(async () => ({ success: true }));
144
-
145
- const envVars = await fn.getEnvironment();
146
-
147
- // Should only include env vars from databaseService
148
- expect(envVars).toEqual(['DATABASE_URL']);
149
- });
150
- });
151
-
152
- describe('Endpoint', () => {
153
- it('should detect environment variables from endpoint services', async () => {
154
- const authService = {
155
- serviceName: 'auth' as const,
156
- register(envParser: EnvironmentParser<{}>) {
157
- return envParser.create((get) => ({
158
- secret: get('JWT_SECRET').string(),
159
- expiresIn: get('JWT_EXPIRES_IN').string().default('15m'),
160
- }));
161
- },
162
- } satisfies Service<'auth', any>;
163
-
164
- const endpoint = e
165
- .services([authService])
166
- .get('/users')
167
- .handle(async () => []);
168
-
169
- const envVars = await endpoint.getEnvironment();
170
-
171
- expect(envVars).toEqual(['JWT_EXPIRES_IN', 'JWT_SECRET']);
172
- });
173
-
174
- it('should work with different HTTP methods', async () => {
175
- const storageService = {
176
- serviceName: 'storage' as const,
177
- register(envParser: EnvironmentParser<{}>) {
178
- return envParser.create((get) => ({
179
- bucket: get('S3_BUCKET').string(),
180
- region: get('AWS_REGION').string().default('us-east-1'),
181
- }));
182
- },
183
- } satisfies Service<'storage', any>;
184
-
185
- const postEndpoint = e
186
- .services([storageService])
187
- .post('/upload')
188
- .handle(async () => ({ success: true }));
189
-
190
- const getEndpoint = e
191
- .services([storageService])
192
- .get('/files')
193
- .handle(async () => []);
194
-
195
- expect(await postEndpoint.getEnvironment()).toEqual([
196
- 'AWS_REGION',
197
- 'S3_BUCKET',
198
- ]);
199
- expect(await getEndpoint.getEnvironment()).toEqual([
200
- 'AWS_REGION',
201
- 'S3_BUCKET',
202
- ]);
203
- });
204
- });
205
-
206
- describe('Cron', () => {
207
- it('should detect environment variables from cron services', async () => {
208
- const emailService = {
209
- serviceName: 'email' as const,
210
- register(envParser: EnvironmentParser<{}>) {
211
- return envParser.create((get) => ({
212
- smtpHost: get('SMTP_HOST').string(),
213
- smtpPort: get('SMTP_PORT').string().transform(Number).default(587),
214
- smtpUser: get('SMTP_USER').string(),
215
- smtpPass: get('SMTP_PASS').string(),
216
- }));
217
- },
218
- } satisfies Service<'email', any>;
219
-
220
- const cronJob = c
221
- .services([emailService])
222
- .schedule('rate(1 hour)')
223
- .handle(async () => {
224
- // Send daily report email
225
- });
226
-
227
- const envVars = await cronJob.getEnvironment();
228
-
229
- expect(envVars).toEqual([
230
- 'SMTP_HOST',
231
- 'SMTP_PASS',
232
- 'SMTP_PORT',
233
- 'SMTP_USER',
234
- ]);
235
- });
236
- });
237
-
238
- describe('Subscriber', () => {
239
- it('should detect environment variables from subscriber services', async () => {
240
- type UserEvents =
241
- | PublishableMessage<'user.created', { userId: string }>
242
- | PublishableMessage<'user.updated', { userId: string }>;
243
-
244
- const notificationService = {
245
- serviceName: 'notification' as const,
246
- register(envParser: EnvironmentParser<{}>) {
247
- return envParser.create((get) => ({
248
- apiKey: get('NOTIFICATION_API_KEY').string(),
249
- endpoint: get('NOTIFICATION_ENDPOINT')
250
- .string()
251
- .url()
252
- .default('https://api.example.com/notify'),
253
- }));
254
- },
255
- } satisfies Service<'notification', any>;
256
-
257
- const subscriber = s
258
- .services([notificationService])
259
- .subscribe('user.created')
260
- .handle(async ({ events }) => {
261
- // Handle user created events
262
- });
263
-
264
- const envVars = await subscriber.getEnvironment();
265
-
266
- expect(envVars).toEqual([
267
- 'NOTIFICATION_API_KEY',
268
- 'NOTIFICATION_ENDPOINT',
269
- ]);
270
- });
271
- });
272
-
273
- describe('Edge cases', () => {
274
- it('should return empty array when services array is empty', async () => {
275
- const fn = f.services([]).handle(async () => ({ success: true }));
276
-
277
- expect(await fn.getEnvironment()).toEqual([]);
278
- });
279
-
280
- it('should handle service with optional environment variables', async () => {
281
- const optionalConfigService = {
282
- serviceName: 'optionalConfig' as const,
283
- register(envParser: EnvironmentParser<{}>) {
284
- return envParser.create((get) => ({
285
- required: get('REQUIRED_VAR').string(),
286
- optional1: get('OPTIONAL_VAR_1').string().optional(),
287
- optional2: get('OPTIONAL_VAR_2').string().optional(),
288
- }));
289
- },
290
- } satisfies Service<'optionalConfig', any>;
291
-
292
- const fn = f
293
- .services([optionalConfigService])
294
- .handle(async () => ({ success: true }));
295
-
296
- const envVars = await fn.getEnvironment();
297
-
298
- // Should include both required and optional variables
299
- expect(envVars).toEqual([
300
- 'OPTIONAL_VAR_1',
301
- 'OPTIONAL_VAR_2',
302
- 'REQUIRED_VAR',
303
- ]);
304
- });
305
-
306
- it('should be callable multiple times with consistent results', async () => {
307
- const service = {
308
- serviceName: 'testService' as const,
309
- register(envParser: EnvironmentParser<{}>) {
310
- return envParser.create((get) => ({
311
- var1: get('VAR_1').string(),
312
- var2: get('VAR_2').string(),
313
- }));
314
- },
315
- } satisfies Service<'testService', any>;
316
-
317
- const fn = f.services([service]).handle(async () => ({ success: true }));
318
-
319
- const firstCall = await fn.getEnvironment();
320
- const secondCall = await fn.getEnvironment();
321
- const thirdCall = await fn.getEnvironment();
322
-
323
- expect(firstCall).toEqual(['VAR_1', 'VAR_2']);
324
- expect(secondCall).toEqual(['VAR_1', 'VAR_2']);
325
- expect(thirdCall).toEqual(['VAR_1', 'VAR_2']);
326
- });
327
-
328
- it('should handle services with complex transformations', async () => {
329
- const complexService = {
330
- serviceName: 'complex' as const,
331
- register(envParser: EnvironmentParser<{}>) {
332
- return envParser.create((get) => ({
333
- origins: get('ALLOWED_ORIGINS')
334
- .string()
335
- .transform((v) => v.split(',')),
336
- flags: get('FEATURE_FLAGS')
337
- .string()
338
- .transform((v) => v.split(',').map((f) => f.trim())),
339
- config: get('JSON_CONFIG')
340
- .string()
341
- .transform((v) => JSON.parse(v))
342
- .pipe(z.record(z.string(), z.boolean())),
343
- }));
344
- },
345
- } satisfies Service<'complex', any>;
346
-
347
- const fn = f
348
- .services([complexService])
349
- .handle(async () => ({ success: true }));
350
-
351
- const envVars = await fn.getEnvironment();
352
-
353
- expect(envVars).toEqual([
354
- 'ALLOWED_ORIGINS',
355
- 'FEATURE_FLAGS',
356
- 'JSON_CONFIG',
357
- ]);
358
- });
359
- });
12
+ describe('Function', () => {
13
+ it('should return empty array when no services are provided', async () => {
14
+ const fn = f.handle(async () => ({ success: true }));
15
+
16
+ expect(await fn.getEnvironment()).toEqual([]);
17
+ });
18
+
19
+ it('should detect environment variables from a single service', async () => {
20
+ const databaseService = {
21
+ serviceName: 'database' as const,
22
+ register({ envParser }) {
23
+ return envParser.create((get) => ({
24
+ url: get('DATABASE_URL').string(),
25
+ port: get('DATABASE_PORT').string().transform(Number).default(5432),
26
+ }));
27
+ },
28
+ } satisfies Service<'database', any>;
29
+
30
+ const fn = f
31
+ .services([databaseService])
32
+ .handle(async () => ({ success: true }));
33
+
34
+ const envVars = await fn.getEnvironment();
35
+
36
+ expect(envVars).toEqual(['DATABASE_PORT', 'DATABASE_URL']);
37
+ });
38
+
39
+ it('should detect environment variables from multiple services', async () => {
40
+ const databaseService = {
41
+ serviceName: 'database' as const,
42
+ register({ envParser }) {
43
+ return envParser.create((get) => ({
44
+ url: get('DATABASE_URL').string(),
45
+ }));
46
+ },
47
+ } satisfies Service<'database', any>;
48
+
49
+ const redisService = {
50
+ serviceName: 'redis' as const,
51
+ register({ envParser }) {
52
+ return envParser.create((get) => ({
53
+ url: get('REDIS_URL').string(),
54
+ ttl: get('REDIS_TTL').string().transform(Number).default(3600),
55
+ }));
56
+ },
57
+ } satisfies Service<'redis', any>;
58
+
59
+ const fn = f
60
+ .services([databaseService, redisService])
61
+ .handle(async () => ({ success: true }));
62
+
63
+ const envVars = await fn.getEnvironment();
64
+
65
+ expect(envVars).toEqual(['DATABASE_URL', 'REDIS_TTL', 'REDIS_URL']);
66
+ });
67
+
68
+ it('should deduplicate environment variables across services', async () => {
69
+ const service1 = {
70
+ serviceName: 'service1' as const,
71
+ register({ envParser }) {
72
+ return envParser.create((get) => ({
73
+ apiKey: get('SHARED_API_KEY').string(),
74
+ }));
75
+ },
76
+ } satisfies Service<'service1', any>;
77
+
78
+ const service2 = {
79
+ serviceName: 'service2' as const,
80
+ register({ envParser }) {
81
+ return envParser.create((get) => ({
82
+ apiKey: get('SHARED_API_KEY').string(),
83
+ }));
84
+ },
85
+ } satisfies Service<'service2', any>;
86
+
87
+ const fn = f
88
+ .services([service1, service2])
89
+ .handle(async () => ({ success: true }));
90
+
91
+ const envVars = await fn.getEnvironment();
92
+
93
+ // Should only appear once despite being used in both services
94
+ expect(envVars).toEqual(['SHARED_API_KEY']);
95
+ });
96
+
97
+ it('should handle services with nested configuration', async () => {
98
+ const configService = {
99
+ serviceName: 'config' as const,
100
+ register({ envParser }) {
101
+ return envParser.create((get) => ({
102
+ database: {
103
+ host: get('DB_HOST').string(),
104
+ port: get('DB_PORT').string().transform(Number),
105
+ },
106
+ api: {
107
+ key: get('API_KEY').string(),
108
+ url: get('API_URL').string().url(),
109
+ },
110
+ }));
111
+ },
112
+ } satisfies Service<'config', any>;
113
+
114
+ const fn = f
115
+ .services([configService])
116
+ .handle(async () => ({ success: true }));
117
+
118
+ const envVars = await fn.getEnvironment();
119
+
120
+ expect(envVars).toEqual(['API_KEY', 'API_URL', 'DB_HOST', 'DB_PORT']);
121
+ });
122
+
123
+ it('should handle services that return non-ConfigParser values', async () => {
124
+ const simpleService = {
125
+ serviceName: 'simple' as const,
126
+ register(_options: ServiceRegisterOptions) {
127
+ // This service doesn't use envParser - just returns a plain object
128
+ return { value: 'test' };
129
+ },
130
+ } satisfies Service<'simple', any>;
131
+
132
+ const databaseService = {
133
+ serviceName: 'database' as const,
134
+ register({ envParser }) {
135
+ return envParser.create((get) => ({
136
+ url: get('DATABASE_URL').string(),
137
+ }));
138
+ },
139
+ } satisfies Service<'database', any>;
140
+
141
+ const fn = f
142
+ .services([simpleService, databaseService])
143
+ .handle(async () => ({ success: true }));
144
+
145
+ const envVars = await fn.getEnvironment();
146
+
147
+ // Should only include env vars from databaseService
148
+ expect(envVars).toEqual(['DATABASE_URL']);
149
+ });
150
+ });
151
+
152
+ describe('Endpoint', () => {
153
+ it('should detect environment variables from endpoint services', async () => {
154
+ const authService = {
155
+ serviceName: 'auth' as const,
156
+ register({ envParser }) {
157
+ return envParser.create((get) => ({
158
+ secret: get('JWT_SECRET').string(),
159
+ expiresIn: get('JWT_EXPIRES_IN').string().default('15m'),
160
+ }));
161
+ },
162
+ } satisfies Service<'auth', any>;
163
+
164
+ const endpoint = e
165
+ .services([authService])
166
+ .get('/users')
167
+ .handle(async () => []);
168
+
169
+ const envVars = await endpoint.getEnvironment();
170
+
171
+ expect(envVars).toEqual(['JWT_EXPIRES_IN', 'JWT_SECRET']);
172
+ });
173
+
174
+ it('should work with different HTTP methods', async () => {
175
+ const storageService = {
176
+ serviceName: 'storage' as const,
177
+ register({ envParser }) {
178
+ return envParser.create((get) => ({
179
+ bucket: get('S3_BUCKET').string(),
180
+ region: get('AWS_REGION').string().default('us-east-1'),
181
+ }));
182
+ },
183
+ } satisfies Service<'storage', any>;
184
+
185
+ const postEndpoint = e
186
+ .services([storageService])
187
+ .post('/upload')
188
+ .handle(async () => ({ success: true }));
189
+
190
+ const getEndpoint = e
191
+ .services([storageService])
192
+ .get('/files')
193
+ .handle(async () => []);
194
+
195
+ expect(await postEndpoint.getEnvironment()).toEqual([
196
+ 'AWS_REGION',
197
+ 'S3_BUCKET',
198
+ ]);
199
+ expect(await getEndpoint.getEnvironment()).toEqual([
200
+ 'AWS_REGION',
201
+ 'S3_BUCKET',
202
+ ]);
203
+ });
204
+ });
205
+
206
+ describe('Cron', () => {
207
+ it('should detect environment variables from cron services', async () => {
208
+ const emailService = {
209
+ serviceName: 'email' as const,
210
+ register({ envParser }) {
211
+ return envParser.create((get) => ({
212
+ smtpHost: get('SMTP_HOST').string(),
213
+ smtpPort: get('SMTP_PORT').string().transform(Number).default(587),
214
+ smtpUser: get('SMTP_USER').string(),
215
+ smtpPass: get('SMTP_PASS').string(),
216
+ }));
217
+ },
218
+ } satisfies Service<'email', any>;
219
+
220
+ const cronJob = c
221
+ .services([emailService])
222
+ .schedule('rate(1 hour)')
223
+ .handle(async () => {
224
+ // Send daily report email
225
+ });
226
+
227
+ const envVars = await cronJob.getEnvironment();
228
+
229
+ expect(envVars).toEqual([
230
+ 'SMTP_HOST',
231
+ 'SMTP_PASS',
232
+ 'SMTP_PORT',
233
+ 'SMTP_USER',
234
+ ]);
235
+ });
236
+ });
237
+
238
+ describe('Subscriber', () => {
239
+ it('should detect environment variables from subscriber services', async () => {
240
+ type UserEvents =
241
+ | PublishableMessage<'user.created', { userId: string }>
242
+ | PublishableMessage<'user.updated', { userId: string }>;
243
+
244
+ class UserEventPublisher implements EventPublisher<UserEvents> {
245
+ async publish(_events: UserEvents[]): Promise<void> {}
246
+ }
247
+
248
+ const eventPublisherService: Service<'events', UserEventPublisher> = {
249
+ serviceName: 'events' as const,
250
+ register() {
251
+ return new UserEventPublisher();
252
+ },
253
+ };
254
+
255
+ const notificationService = {
256
+ serviceName: 'notification' as const,
257
+ register({ envParser }) {
258
+ return envParser
259
+ .create((get) => ({
260
+ apiKey: get('NOTIFICATION_API_KEY').string(),
261
+ endpoint: get('NOTIFICATION_ENDPOINT')
262
+ .string()
263
+ .url()
264
+ .default('https://api.example.com/notify'),
265
+ }))
266
+ .parse();
267
+ },
268
+ } satisfies Service<'notification', any>;
269
+
270
+ const subscriber = s
271
+ .publisher(eventPublisherService)
272
+ .services([notificationService])
273
+ .subscribe('user.created')
274
+ .handle(async () => {
275
+ // Handle user created events
276
+ });
277
+
278
+ const envVars = await subscriber.getEnvironment();
279
+
280
+ expect(envVars).toEqual([
281
+ 'NOTIFICATION_API_KEY',
282
+ 'NOTIFICATION_ENDPOINT',
283
+ ]);
284
+ });
285
+ });
286
+
287
+ describe('Edge cases', () => {
288
+ it('should return empty array when services array is empty', async () => {
289
+ const fn = f.services([]).handle(async () => ({ success: true }));
290
+
291
+ expect(await fn.getEnvironment()).toEqual([]);
292
+ });
293
+
294
+ it('should handle service with optional environment variables', async () => {
295
+ const optionalConfigService = {
296
+ serviceName: 'optionalConfig' as const,
297
+ register({ envParser }) {
298
+ return envParser.create((get) => ({
299
+ required: get('REQUIRED_VAR').string(),
300
+ optional1: get('OPTIONAL_VAR_1').string().optional(),
301
+ optional2: get('OPTIONAL_VAR_2').string().optional(),
302
+ }));
303
+ },
304
+ } satisfies Service<'optionalConfig', any>;
305
+
306
+ const fn = f
307
+ .services([optionalConfigService])
308
+ .handle(async () => ({ success: true }));
309
+
310
+ const envVars = await fn.getEnvironment();
311
+
312
+ // Should include both required and optional variables
313
+ expect(envVars).toEqual([
314
+ 'OPTIONAL_VAR_1',
315
+ 'OPTIONAL_VAR_2',
316
+ 'REQUIRED_VAR',
317
+ ]);
318
+ });
319
+
320
+ it('should be callable multiple times with consistent results', async () => {
321
+ const service = {
322
+ serviceName: 'testService' as const,
323
+ register({ envParser }) {
324
+ return envParser.create((get) => ({
325
+ var1: get('VAR_1').string(),
326
+ var2: get('VAR_2').string(),
327
+ }));
328
+ },
329
+ } satisfies Service<'testService', any>;
330
+
331
+ const fn = f.services([service]).handle(async () => ({ success: true }));
332
+
333
+ const firstCall = await fn.getEnvironment();
334
+ const secondCall = await fn.getEnvironment();
335
+ const thirdCall = await fn.getEnvironment();
336
+
337
+ expect(firstCall).toEqual(['VAR_1', 'VAR_2']);
338
+ expect(secondCall).toEqual(['VAR_1', 'VAR_2']);
339
+ expect(thirdCall).toEqual(['VAR_1', 'VAR_2']);
340
+ });
341
+
342
+ it('should handle services with complex transformations', async () => {
343
+ const complexService = {
344
+ serviceName: 'complex' as const,
345
+ register({ envParser }) {
346
+ return envParser.create((get) => ({
347
+ origins: get('ALLOWED_ORIGINS')
348
+ .string()
349
+ .transform((v) => v.split(',')),
350
+ flags: get('FEATURE_FLAGS')
351
+ .string()
352
+ .transform((v) => v.split(',').map((f) => f.trim())),
353
+ config: get('JSON_CONFIG')
354
+ .string()
355
+ .transform((v) => JSON.parse(v))
356
+ .pipe(z.record(z.string(), z.boolean())),
357
+ }));
358
+ },
359
+ } satisfies Service<'complex', any>;
360
+
361
+ const fn = f
362
+ .services([complexService])
363
+ .handle(async () => ({ success: true }));
364
+
365
+ const envVars = await fn.getEnvironment();
366
+
367
+ expect(envVars).toEqual([
368
+ 'ALLOWED_ORIGINS',
369
+ 'FEATURE_FLAGS',
370
+ 'JSON_CONFIG',
371
+ ]);
372
+ });
373
+
374
+ it('should handle services that throw synchronous errors during registration', async () => {
375
+ const throwingService = {
376
+ serviceName: 'throwing' as const,
377
+ register({ envParser }) {
378
+ const config = envParser
379
+ .create((get) => ({
380
+ url: get('SERVICE_URL').string(),
381
+ }))
382
+ .parse();
383
+
384
+ // Simulate a library that validates config immediately
385
+ // Sniffer returns '' for strings, so this will throw
386
+ if (!config.url || config.url === '') {
387
+ throw new Error('Invalid URL provided');
388
+ }
389
+
390
+ return { url: config.url };
391
+ },
392
+ } satisfies Service<'throwing', any>;
393
+
394
+ // Verify env vars are captured even when service throws
395
+ const result = await sniffService(throwingService);
396
+ expect(result.envVars).toEqual(['SERVICE_URL']);
397
+ expect(result.error).toBeDefined();
398
+ expect(result.error?.message).toBe('Invalid URL provided');
399
+
400
+ // Also verify it works in a construct context with multiple services
401
+ const workingService = {
402
+ serviceName: 'working' as const,
403
+ register({ envParser }) {
404
+ return envParser
405
+ .create((get) => ({
406
+ key: get('API_KEY').string(),
407
+ }))
408
+ .parse();
409
+ },
410
+ } satisfies Service<'working', any>;
411
+
412
+ const fn = f
413
+ .services([throwingService, workingService])
414
+ .handle(async () => ({ success: true }));
415
+
416
+ const envVars = await fn.getEnvironment();
417
+ expect(envVars).toEqual(['API_KEY', 'SERVICE_URL']);
418
+ });
419
+
420
+ it('should handle services that return rejecting promises', async () => {
421
+ const asyncThrowingService = {
422
+ serviceName: 'asyncThrowing' as const,
423
+ async register({ envParser }) {
424
+ const config = envParser
425
+ .create((get) => ({
426
+ secret: get('AUTH_SECRET').string(),
427
+ frontendUrl: get('FRONTEND_URL').string(),
428
+ }))
429
+ .parse();
430
+
431
+ // Simulate an async library that validates config
432
+ await Promise.resolve();
433
+ if (!config.frontendUrl) {
434
+ throw new Error('Frontend URL is required');
435
+ }
436
+
437
+ return { config };
438
+ },
439
+ } satisfies Service<'asyncThrowing', any>;
440
+
441
+ // Verify env vars are captured even when service rejects
442
+ const result = await sniffService(asyncThrowingService);
443
+ expect(result.envVars).toEqual(['AUTH_SECRET', 'FRONTEND_URL']);
444
+ expect(result.error).toBeDefined();
445
+ expect(result.error?.message).toBe('Frontend URL is required');
446
+
447
+ // Also verify via construct
448
+ const fn = f
449
+ .services([asyncThrowingService])
450
+ .handle(async () => ({ success: true }));
451
+
452
+ const envVars = await fn.getEnvironment();
453
+ expect(envVars).toEqual(['AUTH_SECRET', 'FRONTEND_URL']);
454
+ });
455
+
456
+ it('should handle services that create fire-and-forget rejecting promises (BetterAuth scenario)', async () => {
457
+ // This test uses the REAL better-auth library to verify that
458
+ // the sniffer gracefully handles libraries that create internal
459
+ // fire-and-forget promises which reject on invalid config
460
+ const { betterAuth } = await import('better-auth');
461
+
462
+ const betterAuthService = {
463
+ serviceName: 'auth' as const,
464
+ register({ envParser }) {
465
+ const config = envParser
466
+ .create((get) => ({
467
+ secret: get('BETTER_AUTH_SECRET').string(),
468
+ baseURL: get('BETTER_AUTH_URL').string(),
469
+ trustedOrigins: get('BETTER_AUTH_TRUSTED_ORIGINS').string(),
470
+ }))
471
+ .parse();
472
+
473
+ // When sniffer runs, config values are empty strings
474
+ // BetterAuth will create fire-and-forget promises that reject
475
+ // when it tries to validate trustedOrigins with new URL('')
476
+ const auth = betterAuth({
477
+ secret: config.secret,
478
+ baseURL: config.baseURL,
479
+ trustedOrigins: config.trustedOrigins
480
+ ? config.trustedOrigins.split(',')
481
+ : [],
482
+ database: {
483
+ // Use memory adapter to avoid DB setup
484
+ type: 'sqlite',
485
+ url: ':memory:',
486
+ },
487
+ });
488
+
489
+ return auth;
490
+ },
491
+ } satisfies Service<'auth', any>;
492
+
493
+ // Verify env vars are captured even though BetterAuth's internal
494
+ // fire-and-forget promise will reject on invalid trustedOrigins
495
+ const result = await sniffService(betterAuthService);
496
+ expect(result.envVars).toEqual([
497
+ 'BETTER_AUTH_SECRET',
498
+ 'BETTER_AUTH_TRUSTED_ORIGINS',
499
+ 'BETTER_AUTH_URL',
500
+ ]);
501
+ // Synchronous registration succeeds
502
+ expect(result.error).toBeUndefined();
503
+ // But fire-and-forget rejections are captured from better-auth
504
+ expect(result.unhandledRejections.length).toBeGreaterThan(0);
505
+ // Log the actual errors for debugging visibility
506
+ console.log(
507
+ 'Captured better-auth unhandled rejections:',
508
+ result.unhandledRejections.map((e) => e.message),
509
+ );
510
+
511
+ // Most importantly: the process should NOT crash from unhandled rejection
512
+ const fn = f
513
+ .services([betterAuthService])
514
+ .handle(async () => ({ success: true }));
515
+
516
+ const envVars = await fn.getEnvironment();
517
+ expect(envVars).toEqual([
518
+ 'BETTER_AUTH_SECRET',
519
+ 'BETTER_AUTH_TRUSTED_ORIGINS',
520
+ 'BETTER_AUTH_URL',
521
+ ]);
522
+ });
523
+
524
+ it('should handle multiple problematic services without crashing', async () => {
525
+ const service1 = {
526
+ serviceName: 'service1' as const,
527
+ register({ envParser }) {
528
+ envParser.create((get) => ({
529
+ var1: get('VAR_1').string(),
530
+ }));
531
+ throw new Error('Service 1 failed');
532
+ },
533
+ } satisfies Service<'service1', any>;
534
+
535
+ const service2 = {
536
+ serviceName: 'service2' as const,
537
+ register({ envParser }) {
538
+ const config = envParser.create((get) => ({
539
+ var2: get('VAR_2').string(),
540
+ }));
541
+
542
+ // Fire-and-forget rejection
543
+ Promise.reject(new Error('Service 2 async error'));
544
+
545
+ return config;
546
+ },
547
+ } satisfies Service<'service2', any>;
548
+
549
+ const service3 = {
550
+ serviceName: 'service3' as const,
551
+ register({ envParser }) {
552
+ return envParser.create((get) => ({
553
+ var3: get('VAR_3').string(),
554
+ }));
555
+ },
556
+ } satisfies Service<'service3', any>;
557
+
558
+ // Verify individual services
559
+ const result1 = await sniffService(service1);
560
+ expect(result1.envVars).toEqual(['VAR_1']);
561
+ expect(result1.error?.message).toBe('Service 1 failed');
562
+
563
+ const result2 = await sniffService(service2);
564
+ expect(result2.envVars).toEqual(['VAR_2']);
565
+ // Fire-and-forget - no error captured
566
+ expect(result2.error).toBeUndefined();
567
+
568
+ const result3 = await sniffService(service3);
569
+ expect(result3.envVars).toEqual(['VAR_3']);
570
+ expect(result3.error).toBeUndefined();
571
+
572
+ // Verify all work together in construct
573
+ const fn = f
574
+ .services([service1, service2, service3])
575
+ .handle(async () => ({ success: true }));
576
+
577
+ const envVars = await fn.getEnvironment();
578
+ expect(envVars).toEqual(['VAR_1', 'VAR_2', 'VAR_3']);
579
+ });
580
+ });
360
581
  });