@geekmidas/constructs 9.0.2 → 10.0.0-alpha.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 (385) hide show
  1. package/README.md +71 -44
  2. package/dist/{AWSScheduledFunction-Bn99MceY.d.cts → AWSScheduledFunction-BvFvBsBN.d.cts} +8 -3
  3. package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts.map → AWSScheduledFunction-BvFvBsBN.d.cts.map} +1 -1
  4. package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts → AWSScheduledFunction-CVccZO-L.d.mts} +9 -4
  5. package/dist/{AWSScheduledFunction-Bn99MceY.d.cts.map → AWSScheduledFunction-CVccZO-L.d.mts.map} +1 -1
  6. package/dist/{AWSScheduledFunction-CufMMhGB.mjs → AWSScheduledFunction-Db1lttJH.mjs} +3 -3
  7. package/dist/{AWSScheduledFunction-CufMMhGB.mjs.map → AWSScheduledFunction-Db1lttJH.mjs.map} +1 -1
  8. package/dist/{AWSScheduledFunction-DbkDr8CA.cjs → AWSScheduledFunction-qu4ieRZR.cjs} +9 -9
  9. package/dist/{AWSScheduledFunction-DbkDr8CA.cjs.map → AWSScheduledFunction-qu4ieRZR.cjs.map} +1 -1
  10. package/dist/{Construct-_1wX7p_Y.d.cts → Construct-B-xc0SE9.d.mts} +27 -5
  11. package/dist/Construct-B-xc0SE9.d.mts.map +1 -0
  12. package/dist/{Construct-r0U2zBwW.mjs → Construct-HmWM6YYu.mjs} +4 -3
  13. package/dist/Construct-HmWM6YYu.mjs.map +1 -0
  14. package/dist/{Construct-DCMuYOox.d.mts → Construct-WhCXIOPV.d.cts} +29 -7
  15. package/dist/Construct-WhCXIOPV.d.cts.map +1 -0
  16. package/dist/{Construct-vXMZJgRp.cjs → Construct-roId57cU.cjs} +7 -43
  17. package/dist/Construct-roId57cU.cjs.map +1 -0
  18. package/dist/{lazyAccessors-DmTG8sQH.cjs → Endpoint-BBkV6l0k.cjs} +869 -1079
  19. package/dist/Endpoint-BBkV6l0k.cjs.map +1 -0
  20. package/dist/{lazyAccessors-DfqZR6C4.mjs → Endpoint-BGwpNEX4.mjs} +840 -1003
  21. package/dist/Endpoint-BGwpNEX4.mjs.map +1 -0
  22. package/dist/{Endpoint-DgfRslct.d.cts → Endpoint-BnxZqIX-.d.cts} +53 -4
  23. package/dist/Endpoint-BnxZqIX-.d.cts.map +1 -0
  24. package/dist/{Endpoint-CLPSIl6S.d.mts → Endpoint-ROcXU-eH.d.mts} +55 -6
  25. package/dist/Endpoint-ROcXU-eH.d.mts.map +1 -0
  26. package/dist/EndpointFactory-DYoGLaIT.cjs +850 -0
  27. package/dist/EndpointFactory-DYoGLaIT.cjs.map +1 -0
  28. package/dist/EndpointFactory-Di0X9AWp.mjs +808 -0
  29. package/dist/EndpointFactory-Di0X9AWp.mjs.map +1 -0
  30. package/dist/{HonoEndpointAdaptor-DJDT3PMx.mjs → HonoEndpointAdaptor-DFKIIG2o.mjs} +5 -4
  31. package/dist/HonoEndpointAdaptor-DFKIIG2o.mjs.map +1 -0
  32. package/dist/{HonoEndpointAdaptor-CkJENANP.cjs → HonoEndpointAdaptor-wMsCyMgt.cjs} +24 -23
  33. package/dist/HonoEndpointAdaptor-wMsCyMgt.cjs.map +1 -0
  34. package/dist/{Queue-DaxjwmOQ.d.cts → Queue-D6WeziRD.d.cts} +43 -4
  35. package/dist/Queue-D6WeziRD.d.cts.map +1 -0
  36. package/dist/{Queue-HBDf0fqz.d.mts → Queue-DpUeqdC8.d.mts} +43 -4
  37. package/dist/Queue-DpUeqdC8.d.mts.map +1 -0
  38. package/dist/{Subscriber-B69ngPwl.d.cts → Subscriber-4rBJgDKI.d.mts} +9 -4
  39. package/dist/{Subscriber-B69ngPwl.d.cts.map → Subscriber-4rBJgDKI.d.mts.map} +1 -1
  40. package/dist/{Subscriber-D8Xm-86W.d.mts → Subscriber-DVQowdyj.d.cts} +11 -6
  41. package/dist/Subscriber-DVQowdyj.d.cts.map +1 -0
  42. package/dist/{Topic-C5ZMfveW.d.cts → Topic-Ohx9dvWr.d.cts} +33 -2
  43. package/dist/Topic-Ohx9dvWr.d.cts.map +1 -0
  44. package/dist/{Topic-DT10AqHk.d.mts → Topic-cmy2jOUy.d.mts} +33 -2
  45. package/dist/Topic-cmy2jOUy.d.mts.map +1 -0
  46. package/dist/adaptors/aws.cjs +39 -26
  47. package/dist/adaptors/aws.cjs.map +1 -1
  48. package/dist/adaptors/aws.d.cts +24 -16
  49. package/dist/adaptors/aws.d.cts.map +1 -1
  50. package/dist/adaptors/aws.d.mts +25 -17
  51. package/dist/adaptors/aws.d.mts.map +1 -1
  52. package/dist/adaptors/aws.mjs +26 -14
  53. package/dist/adaptors/aws.mjs.map +1 -1
  54. package/dist/adaptors/hono.cjs +9 -6
  55. package/dist/adaptors/hono.d.cts +7 -6
  56. package/dist/adaptors/hono.d.cts.map +1 -1
  57. package/dist/adaptors/hono.d.mts +8 -7
  58. package/dist/adaptors/hono.d.mts.map +1 -1
  59. package/dist/adaptors/hono.mjs +9 -6
  60. package/dist/adaptors/testing.cjs +18 -14
  61. package/dist/adaptors/testing.cjs.map +1 -1
  62. package/dist/adaptors/testing.d.cts +7 -6
  63. package/dist/adaptors/testing.d.cts.map +1 -1
  64. package/dist/adaptors/testing.d.mts +11 -10
  65. package/dist/adaptors/testing.d.mts.map +1 -1
  66. package/dist/adaptors/testing.mjs +10 -7
  67. package/dist/adaptors/testing.mjs.map +1 -1
  68. package/dist/auth.cjs +165 -0
  69. package/dist/auth.cjs.map +1 -0
  70. package/dist/auth.d.cts +108 -0
  71. package/dist/auth.d.cts.map +1 -0
  72. package/dist/auth.d.mts +108 -0
  73. package/dist/auth.d.mts.map +1 -0
  74. package/dist/auth.mjs +164 -0
  75. package/dist/auth.mjs.map +1 -0
  76. package/dist/cache-0ANvRQnD.mjs +51 -0
  77. package/dist/cache-0ANvRQnD.mjs.map +1 -0
  78. package/dist/cache-3WSvAulx.cjs +57 -0
  79. package/dist/cache-3WSvAulx.cjs.map +1 -0
  80. package/dist/cache-CdQ7OLpR.d.cts +47 -0
  81. package/dist/cache-CdQ7OLpR.d.cts.map +1 -0
  82. package/dist/cache-DYoJFcfd.d.mts +47 -0
  83. package/dist/cache-DYoJFcfd.d.mts.map +1 -0
  84. package/dist/cache.cjs +3 -0
  85. package/dist/cache.d.cts +3 -0
  86. package/dist/cache.d.mts +3 -0
  87. package/dist/cache.mjs +3 -0
  88. package/dist/chunk-DWy1uDak.cjs +39 -0
  89. package/dist/clone-DblgEZZa.mjs +39 -0
  90. package/dist/clone-DblgEZZa.mjs.map +1 -0
  91. package/dist/clone-Dy0cR2SZ.cjs +45 -0
  92. package/dist/clone-Dy0cR2SZ.cjs.map +1 -0
  93. package/dist/construct-interface-BfjcOD_E.cjs +117 -0
  94. package/dist/construct-interface-BfjcOD_E.cjs.map +1 -0
  95. package/dist/construct-interface-BqwRNYA2.d.mts +131 -0
  96. package/dist/construct-interface-BqwRNYA2.d.mts.map +1 -0
  97. package/dist/construct-interface-D2nNkHUN.d.cts +131 -0
  98. package/dist/construct-interface-D2nNkHUN.d.cts.map +1 -0
  99. package/dist/construct-interface-Z4CpS8tK.mjs +81 -0
  100. package/dist/construct-interface-Z4CpS8tK.mjs.map +1 -0
  101. package/dist/construct-interface.cjs +8 -0
  102. package/dist/construct-interface.d.cts +2 -0
  103. package/dist/construct-interface.d.mts +2 -0
  104. package/dist/construct-interface.mjs +3 -0
  105. package/dist/credential.cjs +96 -0
  106. package/dist/credential.cjs.map +1 -0
  107. package/dist/credential.d.cts +61 -0
  108. package/dist/credential.d.cts.map +1 -0
  109. package/dist/credential.d.mts +61 -0
  110. package/dist/credential.d.mts.map +1 -0
  111. package/dist/credential.mjs +94 -0
  112. package/dist/credential.mjs.map +1 -0
  113. package/dist/crons/index.cjs +39 -37
  114. package/dist/crons/index.cjs.map +1 -1
  115. package/dist/crons/index.d.cts +21 -8
  116. package/dist/crons/index.d.cts.map +1 -1
  117. package/dist/crons/index.d.mts +29 -13
  118. package/dist/crons/index.d.mts.map +1 -1
  119. package/dist/crons/index.mjs +37 -36
  120. package/dist/crons/index.mjs.map +1 -1
  121. package/dist/database/kysely.cjs +181 -0
  122. package/dist/database/kysely.cjs.map +1 -0
  123. package/dist/database/kysely.d.cts +152 -0
  124. package/dist/database/kysely.d.cts.map +1 -0
  125. package/dist/database/kysely.d.mts +152 -0
  126. package/dist/database/kysely.d.mts.map +1 -0
  127. package/dist/database/kysely.mjs +180 -0
  128. package/dist/database/kysely.mjs.map +1 -0
  129. package/dist/email.cjs +59 -0
  130. package/dist/email.cjs.map +1 -0
  131. package/dist/email.d.cts +50 -0
  132. package/dist/email.d.cts.map +1 -0
  133. package/dist/email.d.mts +50 -0
  134. package/dist/email.d.mts.map +1 -0
  135. package/dist/email.mjs +58 -0
  136. package/dist/email.mjs.map +1 -0
  137. package/dist/endpoints/index.cjs +21 -747
  138. package/dist/endpoints/index.d.cts +7 -343
  139. package/dist/endpoints/index.d.mts +7 -342
  140. package/dist/endpoints/index.mjs +11 -738
  141. package/dist/file-server.cjs +154 -0
  142. package/dist/file-server.cjs.map +1 -0
  143. package/dist/file-server.d.cts +156 -0
  144. package/dist/file-server.d.cts.map +1 -0
  145. package/dist/file-server.d.mts +156 -0
  146. package/dist/file-server.d.mts.map +1 -0
  147. package/dist/file-server.mjs +152 -0
  148. package/dist/file-server.mjs.map +1 -0
  149. package/dist/functions/index.cjs +4 -2
  150. package/dist/functions/index.d.cts +3 -2
  151. package/dist/functions/index.d.mts +3 -2
  152. package/dist/functions/index.mjs +4 -2
  153. package/dist/{functions-B-qt91O7.mjs → functions-CvT_q7Y4.mjs} +55 -51
  154. package/dist/functions-CvT_q7Y4.mjs.map +1 -0
  155. package/dist/{functions-C8i1kCMM.cjs → functions-DukjG8ov.cjs} +62 -57
  156. package/dist/functions-DukjG8ov.cjs.map +1 -0
  157. package/dist/index-7OcOWe75.d.cts +419 -0
  158. package/dist/index-7OcOWe75.d.cts.map +1 -0
  159. package/dist/index-Bt-F7u8L.d.mts +419 -0
  160. package/dist/index-Bt-F7u8L.d.mts.map +1 -0
  161. package/dist/{index-DP6fqv0I.d.mts → index-CPeqtKgq.d.mts} +48 -19
  162. package/dist/index-CPeqtKgq.d.mts.map +1 -0
  163. package/dist/{index-BVs9DvIj.d.cts → index-Dadljnh_.d.cts} +36 -9
  164. package/dist/index-Dadljnh_.d.cts.map +1 -0
  165. package/dist/index.cjs +1 -1
  166. package/dist/index.d.cts +3 -3
  167. package/dist/index.d.mts +3 -3
  168. package/dist/index.mjs +1 -1
  169. package/dist/lazyAccessors-DM6HcXQk.mjs +175 -0
  170. package/dist/lazyAccessors-DM6HcXQk.mjs.map +1 -0
  171. package/dist/lazyAccessors-DrJj8NpA.cjs +223 -0
  172. package/dist/lazyAccessors-DrJj8NpA.cjs.map +1 -0
  173. package/dist/object-storage.cjs +48 -0
  174. package/dist/object-storage.cjs.map +1 -0
  175. package/dist/object-storage.d.cts +36 -0
  176. package/dist/object-storage.d.cts.map +1 -0
  177. package/dist/object-storage.d.mts +36 -0
  178. package/dist/object-storage.d.mts.map +1 -0
  179. package/dist/object-storage.mjs +47 -0
  180. package/dist/object-storage.mjs.map +1 -0
  181. package/dist/{processAudits-CKjjivyz.cjs → processAudits-Bc8rz6Ev.cjs} +3 -3
  182. package/dist/{processAudits-CKjjivyz.cjs.map → processAudits-Bc8rz6Ev.cjs.map} +1 -1
  183. package/dist/{processAudits-ySnizdMG.mjs → processAudits-D89tICM4.mjs} +1 -1
  184. package/dist/{processAudits-ySnizdMG.mjs.map → processAudits-D89tICM4.mjs.map} +1 -1
  185. package/dist/{publisher-BrFOF847.mjs → publisher-CGEo8UKD.mjs} +1 -1
  186. package/dist/{publisher-BrFOF847.mjs.map → publisher-CGEo8UKD.mjs.map} +1 -1
  187. package/dist/{publisher-lFQleddL.cjs → publisher-CqGsXB2X.cjs} +1 -1
  188. package/dist/{publisher-lFQleddL.cjs.map → publisher-CqGsXB2X.cjs.map} +1 -1
  189. package/dist/queue/index.cjs +92 -30
  190. package/dist/queue/index.cjs.map +1 -1
  191. package/dist/queue/index.d.cts +19 -4
  192. package/dist/queue/index.d.cts.map +1 -1
  193. package/dist/queue/index.d.mts +22 -6
  194. package/dist/queue/index.d.mts.map +1 -1
  195. package/dist/queue/index.mjs +90 -29
  196. package/dist/queue/index.mjs.map +1 -1
  197. package/dist/rest-api.cjs +187 -0
  198. package/dist/rest-api.cjs.map +1 -0
  199. package/dist/rest-api.d.cts +221 -0
  200. package/dist/rest-api.d.cts.map +1 -0
  201. package/dist/rest-api.d.mts +221 -0
  202. package/dist/rest-api.d.mts.map +1 -0
  203. package/dist/rest-api.mjs +186 -0
  204. package/dist/rest-api.mjs.map +1 -0
  205. package/dist/site.cjs +48 -0
  206. package/dist/site.cjs.map +1 -0
  207. package/dist/site.d.cts +101 -0
  208. package/dist/site.d.cts.map +1 -0
  209. package/dist/site.d.mts +101 -0
  210. package/dist/site.d.mts.map +1 -0
  211. package/dist/site.mjs +47 -0
  212. package/dist/site.mjs.map +1 -0
  213. package/dist/subscribers/index.cjs +35 -27
  214. package/dist/subscribers/index.cjs.map +1 -1
  215. package/dist/subscribers/index.d.cts +20 -5
  216. package/dist/subscribers/index.d.cts.map +1 -1
  217. package/dist/subscribers/index.d.mts +23 -7
  218. package/dist/subscribers/index.d.mts.map +1 -1
  219. package/dist/subscribers/index.mjs +34 -27
  220. package/dist/subscribers/index.mjs.map +1 -1
  221. package/dist/surfaceEnv-BFXEms2f.cjs +39 -0
  222. package/dist/surfaceEnv-BFXEms2f.cjs.map +1 -0
  223. package/dist/surfaceEnv-C3Ktahea.mjs +27 -0
  224. package/dist/surfaceEnv-C3Ktahea.mjs.map +1 -0
  225. package/dist/{telemetry-3vdxGn4q.d.mts → telemetry-C3L0iS28.d.cts} +2 -2
  226. package/dist/{telemetry-3vdxGn4q.d.mts.map → telemetry-C3L0iS28.d.cts.map} +1 -1
  227. package/dist/{telemetry-Dqx-D3F7.d.cts → telemetry-D7bVFLGi.d.mts} +2 -2
  228. package/dist/{telemetry-Dqx-D3F7.d.cts.map → telemetry-D7bVFLGi.d.mts.map} +1 -1
  229. package/dist/topic/index.cjs +56 -13
  230. package/dist/topic/index.cjs.map +1 -1
  231. package/dist/topic/index.d.cts +2 -2
  232. package/dist/topic/index.d.cts.map +1 -1
  233. package/dist/topic/index.d.mts +2 -2
  234. package/dist/topic/index.d.mts.map +1 -1
  235. package/dist/topic/index.mjs +54 -12
  236. package/dist/topic/index.mjs.map +1 -1
  237. package/dist/{types-BDNGr7pv.d.mts → types-BlAkSuGI.d.cts} +1 -1
  238. package/dist/{types-BDNGr7pv.d.mts.map → types-BlAkSuGI.d.cts.map} +1 -1
  239. package/dist/{types-BdAaYDvd.d.cts → types-aKksMEWL.d.mts} +1 -1
  240. package/dist/{types-BdAaYDvd.d.cts.map → types-aKksMEWL.d.mts.map} +1 -1
  241. package/dist/types.d.cts +1 -1
  242. package/dist/types.d.mts +1 -1
  243. package/package.json +155 -23
  244. package/CHANGELOG.md +0 -396
  245. package/dist/Construct-DCMuYOox.d.mts.map +0 -1
  246. package/dist/Construct-_1wX7p_Y.d.cts.map +0 -1
  247. package/dist/Construct-r0U2zBwW.mjs.map +0 -1
  248. package/dist/Construct-vXMZJgRp.cjs.map +0 -1
  249. package/dist/Endpoint-CLPSIl6S.d.mts.map +0 -1
  250. package/dist/Endpoint-DgfRslct.d.cts.map +0 -1
  251. package/dist/HonoEndpointAdaptor-CkJENANP.cjs.map +0 -1
  252. package/dist/HonoEndpointAdaptor-DJDT3PMx.mjs.map +0 -1
  253. package/dist/Queue-DaxjwmOQ.d.cts.map +0 -1
  254. package/dist/Queue-HBDf0fqz.d.mts.map +0 -1
  255. package/dist/Subscriber-D8Xm-86W.d.mts.map +0 -1
  256. package/dist/Topic-C5ZMfveW.d.cts.map +0 -1
  257. package/dist/Topic-DT10AqHk.d.mts.map +0 -1
  258. package/dist/endpoints/index.cjs.map +0 -1
  259. package/dist/endpoints/index.d.cts.map +0 -1
  260. package/dist/endpoints/index.d.mts.map +0 -1
  261. package/dist/endpoints/index.mjs.map +0 -1
  262. package/dist/functions-B-qt91O7.mjs.map +0 -1
  263. package/dist/functions-C8i1kCMM.cjs.map +0 -1
  264. package/dist/index-BVs9DvIj.d.cts.map +0 -1
  265. package/dist/index-DP6fqv0I.d.mts.map +0 -1
  266. package/dist/lazyAccessors-DfqZR6C4.mjs.map +0 -1
  267. package/dist/lazyAccessors-DmTG8sQH.cjs.map +0 -1
  268. package/src/Construct.ts +0 -204
  269. package/src/__benchmarks__/build-time-optimization.bench.ts +0 -274
  270. package/src/__benchmarks__/endpoint.bench.ts +0 -494
  271. package/src/__benchmarks__/fixtures.ts +0 -241
  272. package/src/__benchmarks__/hono-adaptor.bench.ts +0 -533
  273. package/src/__benchmarks__/hono-server.bench.ts +0 -249
  274. package/src/__benchmarks__/response-builder.bench.ts +0 -428
  275. package/src/__benchmarks__/strategies/strategy-a-lazy-services.ts +0 -319
  276. package/src/__benchmarks__/strategies/strategy-c-middleware.ts +0 -530
  277. package/src/__benchmarks__/strategies/strategy-d-opt-in-events.ts +0 -567
  278. package/src/__tests__/Construct.environment.spec.ts +0 -704
  279. package/src/__tests__/publisher.setting.spec.ts +0 -508
  280. package/src/__tests__/publisher.spec.ts +0 -452
  281. package/src/adaptors/aws.ts +0 -6
  282. package/src/adaptors/hono.ts +0 -1
  283. package/src/adaptors/testing.ts +0 -11
  284. package/src/crons/AWSScheduledFunction.ts +0 -73
  285. package/src/crons/Cron.ts +0 -149
  286. package/src/crons/CronBuilder.ts +0 -271
  287. package/src/crons/__tests__/AWSScheduledFunction.spec.ts +0 -152
  288. package/src/crons/__tests__/Cron.spec.ts +0 -464
  289. package/src/crons/__tests__/CronBuilder.state-isolation.spec.ts +0 -227
  290. package/src/crons/index.ts +0 -12
  291. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +0 -677
  292. package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +0 -105
  293. package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +0 -97
  294. package/src/endpoints/Authorizer.ts +0 -152
  295. package/src/endpoints/Endpoint.ts +0 -1287
  296. package/src/endpoints/EndpointBuilder.ts +0 -758
  297. package/src/endpoints/EndpointFactory.ts +0 -1148
  298. package/src/endpoints/HonoEndpointAdaptor.ts +0 -677
  299. package/src/endpoints/MswEndpointAdaptor.ts +0 -226
  300. package/src/endpoints/TestEndpointAdaptor.ts +0 -422
  301. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.audits.spec.ts +0 -499
  302. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +0 -560
  303. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +0 -1304
  304. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +0 -626
  305. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +0 -732
  306. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.factory-publisher.spec.ts +0 -296
  307. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +0 -951
  308. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.responseType.spec.ts +0 -111
  309. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.rls.spec.ts +0 -307
  310. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +0 -629
  311. package/src/endpoints/__tests__/Authorizer.spec.ts +0 -286
  312. package/src/endpoints/__tests__/Endpoint.cookies.spec.ts +0 -207
  313. package/src/endpoints/__tests__/Endpoint.headers.spec.ts +0 -187
  314. package/src/endpoints/__tests__/Endpoint.manifest.spec.ts +0 -175
  315. package/src/endpoints/__tests__/Endpoint.spec.ts +0 -857
  316. package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +0 -448
  317. package/src/endpoints/__tests__/EndpointBuilder.responseType.spec.ts +0 -47
  318. package/src/endpoints/__tests__/EndpointBuilder.spec.ts +0 -523
  319. package/src/endpoints/__tests__/EndpointFactory.authorizers.spec.ts +0 -492
  320. package/src/endpoints/__tests__/EndpointFactory.database-auditor.spec.ts +0 -509
  321. package/src/endpoints/__tests__/EndpointFactory.reference-audit.spec.ts +0 -190
  322. package/src/endpoints/__tests__/EndpointFactory.spec.ts +0 -479
  323. package/src/endpoints/__tests__/EndpointFactory.state-isolation.spec.ts +0 -155
  324. package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +0 -703
  325. package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +0 -632
  326. package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +0 -577
  327. package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +0 -1067
  328. package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +0 -317
  329. package/src/endpoints/__tests__/HonoEndpointAdaptor.pgboss-publisher.spec.ts +0 -289
  330. package/src/endpoints/__tests__/HonoEndpointAdaptor.responseType.spec.ts +0 -128
  331. package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +0 -1207
  332. package/src/endpoints/__tests__/MswEndpointAdaptor.spec.ts +0 -211
  333. package/src/endpoints/__tests__/ResponseBuilder.spec.ts +0 -235
  334. package/src/endpoints/__tests__/TestEndpointAdaptor.audits.spec.ts +0 -602
  335. package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +0 -1044
  336. package/src/endpoints/__tests__/__snapshots__/HonoEndpointAdaptor.spec.ts.snap +0 -54
  337. package/src/endpoints/__tests__/endpoint-types.test.ts +0 -88
  338. package/src/endpoints/__tests__/helpers.spec.ts +0 -37
  339. package/src/endpoints/__tests__/lazyAccessors.spec.ts +0 -330
  340. package/src/endpoints/__tests__/processAudits.spec.ts +0 -631
  341. package/src/endpoints/audit.ts +0 -87
  342. package/src/endpoints/helpers.ts +0 -98
  343. package/src/endpoints/index.ts +0 -42
  344. package/src/endpoints/lazyAccessors.ts +0 -241
  345. package/src/endpoints/parseHonoQuery.ts +0 -16
  346. package/src/endpoints/parseQueryParams.ts +0 -32
  347. package/src/endpoints/processAudits.ts +0 -371
  348. package/src/endpoints/rls.ts +0 -67
  349. package/src/functions/AWSLambdaFunction.ts +0 -348
  350. package/src/functions/BaseFunctionBuilder.ts +0 -201
  351. package/src/functions/Function.ts +0 -238
  352. package/src/functions/FunctionBuilder.ts +0 -391
  353. package/src/functions/FunctionExecutionWrapper.ts +0 -216
  354. package/src/functions/TestFunctionAdaptor.ts +0 -217
  355. package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +0 -513
  356. package/src/functions/__tests__/Function.audits.spec.ts +0 -393
  357. package/src/functions/__tests__/Function.spec.ts +0 -477
  358. package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +0 -207
  359. package/src/functions/__tests__/TestFunctionAdaptor.spec.ts +0 -480
  360. package/src/functions/index.ts +0 -12
  361. package/src/index.ts +0 -23
  362. package/src/publisher.ts +0 -93
  363. package/src/queue/AWSLambdaQueueAdaptor.ts +0 -162
  364. package/src/queue/Queue.ts +0 -128
  365. package/src/queue/QueueBuilder.ts +0 -115
  366. package/src/queue/TestQueueAdaptor.ts +0 -63
  367. package/src/queue/__tests__/QueueBuilder.spec.ts +0 -137
  368. package/src/queue/index.ts +0 -12
  369. package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +0 -342
  370. package/src/subscribers/Subscriber.ts +0 -117
  371. package/src/subscribers/SubscriberBuilder.ts +0 -186
  372. package/src/subscribers/TestSubscriberAdaptor.ts +0 -133
  373. package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +0 -1018
  374. package/src/subscribers/__tests__/Subscriber.spec.ts +0 -430
  375. package/src/subscribers/__tests__/TestSubscriberAdaptor.spec.ts +0 -652
  376. package/src/subscribers/index.ts +0 -6
  377. package/src/telemetry.ts +0 -103
  378. package/src/topic/Topic.ts +0 -103
  379. package/src/topic/TopicBuilder.ts +0 -51
  380. package/src/topic/__tests__/TopicBuilder.spec.ts +0 -82
  381. package/src/topic/index.ts +0 -11
  382. package/src/types.ts +0 -13
  383. package/test.ts +0 -91
  384. package/tsconfig.json +0 -9
  385. package/tsdown.config.ts +0 -34
@@ -0,0 +1,101 @@
1
+ import { Declarable } from "./construct-interface-BqwRNYA2.mjs";
2
+ import { ConstructName, Declaration, Dependency, SiteDeclaration } from "@geekmidas/manifest";
3
+
4
+ //#region src/site.d.ts
5
+
6
+ /**
7
+ * A site's config is flat, where a surface's nests its `app`.
8
+ *
9
+ * Not an inconsistency: a `RestApi` may or may not have a process of its own,
10
+ * so "what the surface is" and "how its process is built" are separable there
11
+ * and worth separating. A site *is* its app — there is nothing to separate it
12
+ * from, and `{ app: { path } }` would be a wrapper around the only thing in it.
13
+ *
14
+ * Every field is optional, so `new StaticSite('Web')` is a complete site.
15
+ */
16
+ interface StaticSiteConfig {
17
+ /**
18
+ * Where its source lives, relative to the workspace root.
19
+ *
20
+ * Optional, and normally omitted: `apps/<kebab-id>` where that directory
21
+ * exists, and the workspace root otherwise. `StaticSite('Web')` means
22
+ * `apps/web`, which is the thing the id already said.
23
+ *
24
+ * Worth writing only when the layout differs — `path: 'sites/marketing'`.
25
+ */
26
+ path?: string;
27
+ /**
28
+ * The port it answers on locally.
29
+ *
30
+ * Normally omitted: ports are assigned in a stable order, so adding a site
31
+ * does not renumber the ones already running.
32
+ */
33
+ port?: number;
34
+ /**
35
+ * Modules to import when sniffing which env vars this site reads.
36
+ *
37
+ * A frontend's values are inlined at build time, so the build has to know
38
+ * which ones it reads before it reads them.
39
+ */
40
+ config?: {
41
+ client?: string;
42
+ server?: string;
43
+ };
44
+ /**
45
+ * Whether the base domain points at this site.
46
+ *
47
+ * A project with one site needs this no more than a project with one
48
+ * database needs to say which database. It matters when there are several
49
+ * and none is called `web`: the base domain then belongs to whichever site
50
+ * says so, rather than to whichever file the glob happened to reach first.
51
+ */
52
+ root?: boolean;
53
+ /**
54
+ * Which framework builds it.
55
+ *
56
+ * It selects how values are delivered — `VITE_`, `NEXT_PUBLIC_`, a fetched
57
+ * `config.json` — and never which values there are. One neutral name from the
58
+ * construct, one serialisation per framework, the same rule as everywhere
59
+ * else.
60
+ */
61
+ variant?: SiteDeclaration['variant'];
62
+ }
63
+ declare class StaticSite<TName extends string = string> implements Declarable<TName> {
64
+ private readonly config;
65
+ /**
66
+ * Internal: how `.dependsOn()` carries edges into the copy it returns.
67
+ * Written as a parameter rather than a mutable field so the builder can
68
+ * stay immutable without a clone method, the same shape
69
+ * `KyselyDatabase` uses for its derived forms.
70
+ */
71
+ private readonly dependencies;
72
+ readonly id: TName;
73
+ readonly keys: {
74
+ url: string;
75
+ };
76
+ constructor(id: ConstructName<TName>, config?: StaticSiteConfig,
77
+ /**
78
+ * Internal: how `.dependsOn()` carries edges into the copy it returns.
79
+ * Written as a parameter rather than a mutable field so the builder can
80
+ * stay immutable without a clone method, the same shape
81
+ * `KyselyDatabase` uses for its derived forms.
82
+ */
83
+ dependencies?: readonly Dependency[]);
84
+ /**
85
+ * What this site calls.
86
+ *
87
+ * Immutable, like every other builder here: it returns a new site rather than
88
+ * mutating this one, so a module that exports both a base and a variant of it
89
+ * cannot have the second silently change the first.
90
+ *
91
+ * Takes {@link Declarable} rather than {@link Consumable} because a site's
92
+ * edge is a build-time link and not a service injection — requiring a client
93
+ * would exclude exactly the surfaces a frontend actually depends on.
94
+ */
95
+ dependsOn(constructs: readonly Declarable[]): StaticSite<TName>;
96
+ declare(): Declaration[];
97
+ }
98
+ //# sourceMappingURL=site.d.ts.map
99
+ //#endregion
100
+ export { StaticSite, StaticSiteConfig };
101
+ //# sourceMappingURL=site.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.d.mts","names":[],"sources":["../src/site.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;UA4CiB,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA0CN;;cAGE,qDACD,WAAW;;;;;;;;;eAET;;;;kBAIR,cAAc,iBACO;;;;;;;0BAOe;;;;;;;;;;;;iCAiBV,eAAe,WAAW;aAO9C"}
package/dist/site.mjs ADDED
@@ -0,0 +1,47 @@
1
+ import { edgeTo } from "./construct-interface-Z4CpS8tK.mjs";
2
+ import { canonicalId, provideKey } from "@geekmidas/manifest";
3
+
4
+ //#region src/site.ts
5
+ var StaticSite = class StaticSite {
6
+ id;
7
+ keys;
8
+ constructor(id, config = {}, dependencies = []) {
9
+ this.config = config;
10
+ this.dependencies = dependencies;
11
+ this.id = canonicalId(id);
12
+ this.keys = { url: provideKey(this.id, "url") };
13
+ }
14
+ /**
15
+ * What this site calls.
16
+ *
17
+ * Immutable, like every other builder here: it returns a new site rather than
18
+ * mutating this one, so a module that exports both a base and a variant of it
19
+ * cannot have the second silently change the first.
20
+ *
21
+ * Takes {@link Declarable} rather than {@link Consumable} because a site's
22
+ * edge is a build-time link and not a service injection — requiring a client
23
+ * would exclude exactly the surfaces a frontend actually depends on.
24
+ */
25
+ dependsOn(constructs) {
26
+ return new StaticSite(this.id, this.config, [...this.dependencies, ...constructs.map(edgeTo)]);
27
+ }
28
+ declare() {
29
+ return [{
30
+ kind: "site",
31
+ id: this.id,
32
+ variant: this.config.variant ?? "static",
33
+ app: {
34
+ ...this.config.path ? { path: this.config.path } : {},
35
+ ...this.config.port ? { port: this.config.port } : {},
36
+ ...this.config.config ? { config: this.config.config } : {}
37
+ },
38
+ ...this.config.root ? { root: true } : {},
39
+ dependencies: this.dependencies,
40
+ provides: [this.keys.url]
41
+ }];
42
+ }
43
+ };
44
+
45
+ //#endregion
46
+ export { StaticSite };
47
+ //# sourceMappingURL=site.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.mjs","names":["id: ConstructName<TName>","config: StaticSiteConfig","dependencies: readonly Dependency[]","constructs: readonly Declarable[]"],"sources":["../src/site.ts"],"sourcesContent":["/**\n * `StaticSite` — a frontend, declared like anything else.\n *\n * The point is not that a site needs provisioning; it is that a site is the\n * *consumer* whose edges make four hand-maintained lists derivable. Declaring it\n * is what turns \"which origins does the API allow\" from something a person keeps\n * in step into something the graph already knows.\n *\n * ```ts\n * export const console = new StaticSite('Console', { path: 'apps/console' })\n * .dependsOn([api, auth]);\n * ```\n *\n * It has no `.service`. A site is not a process that registers clients — it is\n * built, and the values it needs are inlined or fetched by its own framework —\n * so the edge is {@link Declarable} rather than {@link Consumable}, and the\n * asymmetry is the honest one: a site consumes addresses, not connections.\n *\n * Only the static variant ships. SSR deploy shapes are unstable and each one is\n * its own maintenance, so they follow rather than arrive together; Expo and\n * mobile are out of scope entirely, because an app store is not infrastructure\n * and there is no URL to hand anyone.\n */\n\nimport {\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\ttype Dependency,\n\tprovideKey,\n\ttype SiteDeclaration,\n} from '@geekmidas/manifest';\nimport { type Declarable, edgeTo } from './construct-interface';\n\n/**\n * A site's config is flat, where a surface's nests its `app`.\n *\n * Not an inconsistency: a `RestApi` may or may not have a process of its own,\n * so \"what the surface is\" and \"how its process is built\" are separable there\n * and worth separating. A site *is* its app — there is nothing to separate it\n * from, and `{ app: { path } }` would be a wrapper around the only thing in it.\n *\n * Every field is optional, so `new StaticSite('Web')` is a complete site.\n */\nexport interface StaticSiteConfig {\n\t/**\n\t * Where its source lives, relative to the workspace root.\n\t *\n\t * Optional, and normally omitted: `apps/<kebab-id>` where that directory\n\t * exists, and the workspace root otherwise. `StaticSite('Web')` means\n\t * `apps/web`, which is the thing the id already said.\n\t *\n\t * Worth writing only when the layout differs — `path: 'sites/marketing'`.\n\t */\n\tpath?: string;\n\t/**\n\t * The port it answers on locally.\n\t *\n\t * Normally omitted: ports are assigned in a stable order, so adding a site\n\t * does not renumber the ones already running.\n\t */\n\tport?: number;\n\t/**\n\t * Modules to import when sniffing which env vars this site reads.\n\t *\n\t * A frontend's values are inlined at build time, so the build has to know\n\t * which ones it reads before it reads them.\n\t */\n\tconfig?: { client?: string; server?: string };\n\t/**\n\t * Whether the base domain points at this site.\n\t *\n\t * A project with one site needs this no more than a project with one\n\t * database needs to say which database. It matters when there are several\n\t * and none is called `web`: the base domain then belongs to whichever site\n\t * says so, rather than to whichever file the glob happened to reach first.\n\t */\n\troot?: boolean;\n\t/**\n\t * Which framework builds it.\n\t *\n\t * It selects how values are delivered — `VITE_`, `NEXT_PUBLIC_`, a fetched\n\t * `config.json` — and never which values there are. One neutral name from the\n\t * construct, one serialisation per framework, the same rule as everywhere\n\t * else.\n\t */\n\tvariant?: SiteDeclaration['variant'];\n}\n\nexport class StaticSite<TName extends string = string>\n\timplements Declarable<TName>\n{\n\treadonly id: TName;\n\treadonly keys: { url: string };\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly config: StaticSiteConfig = {},\n\t\t/**\n\t\t * Internal: how `.dependsOn()` carries edges into the copy it returns.\n\t\t * Written as a parameter rather than a mutable field so the builder can\n\t\t * stay immutable without a clone method, the same shape\n\t\t * `KyselyDatabase` uses for its derived forms.\n\t\t */\n\t\tprivate readonly dependencies: readonly Dependency[] = [],\n\t) {\n\t\tthis.id = canonicalId(id as string) as TName;\n\t\tthis.keys = { url: provideKey(this.id, 'url') };\n\t}\n\n\t/**\n\t * What this site calls.\n\t *\n\t * Immutable, like every other builder here: it returns a new site rather than\n\t * mutating this one, so a module that exports both a base and a variant of it\n\t * cannot have the second silently change the first.\n\t *\n\t * Takes {@link Declarable} rather than {@link Consumable} because a site's\n\t * edge is a build-time link and not a service injection — requiring a client\n\t * would exclude exactly the surfaces a frontend actually depends on.\n\t */\n\tdependsOn(constructs: readonly Declarable[]): StaticSite<TName> {\n\t\treturn new StaticSite<TName>(this.id as ConstructName<TName>, this.config, [\n\t\t\t...this.dependencies,\n\t\t\t...constructs.map(edgeTo),\n\t\t]);\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'site',\n\t\t\t\tid: this.id,\n\t\t\t\tvariant: this.config.variant ?? 'static',\n\t\t\t\tapp: {\n\t\t\t\t\t...(this.config.path ? { path: this.config.path } : {}),\n\t\t\t\t\t...(this.config.port ? { port: this.config.port } : {}),\n\t\t\t\t\t...(this.config.config ? { config: this.config.config } : {}),\n\t\t\t\t},\n\t\t\t\t...(this.config.root ? { root: true } : {}),\n\t\t\t\tdependencies: this.dependencies,\n\t\t\t\tprovides: [this.keys.url],\n\t\t\t},\n\t\t];\n\t}\n}\n"],"mappings":";;;;AAyFA,IAAa,aAAb,MAAa,WAEb;CACC,AAAS;CACT,AAAS;CAET,YACCA,IACiBC,SAA2B,CAAE,GAO7BC,eAAsC,CAAE,GACxD;EARgB;EAOA;AAEjB,OAAK,KAAK,YAAY,GAAa;AACnC,OAAK,OAAO,EAAE,KAAK,WAAW,KAAK,IAAI,MAAM,CAAE;CAC/C;;;;;;;;;;;;CAaD,UAAUC,YAAsD;AAC/D,SAAO,IAAI,WAAkB,KAAK,IAA4B,KAAK,QAAQ,CAC1E,GAAG,KAAK,cACR,GAAG,WAAW,IAAI,OAAO,AACzB;CACD;CAED,UAAyB;AACxB,SAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,SAAS,KAAK,OAAO,WAAW;GAChC,KAAK;IACJ,GAAI,KAAK,OAAO,OAAO,EAAE,MAAM,KAAK,OAAO,KAAM,IAAG,CAAE;IACtD,GAAI,KAAK,OAAO,OAAO,EAAE,MAAM,KAAK,OAAO,KAAM,IAAG,CAAE;IACtD,GAAI,KAAK,OAAO,SAAS,EAAE,QAAQ,KAAK,OAAO,OAAQ,IAAG,CAAE;GAC5D;GACD,GAAI,KAAK,OAAO,OAAO,EAAE,MAAM,KAAM,IAAG,CAAE;GAC1C,cAAc,KAAK;GACnB,UAAU,CAAC,KAAK,KAAK,GAAI;EACzB,CACD;CACD;AACD"}
@@ -1,15 +1,17 @@
1
- const require_Construct = require('../Construct-vXMZJgRp.cjs');
2
- const __geekmidas_logger_console = require_Construct.__toESM(require("@geekmidas/logger/console"));
1
+ const require_chunk = require('../chunk-DWy1uDak.cjs');
2
+ const require_construct_interface = require('../construct-interface-BfjcOD_E.cjs');
3
+ const require_Construct = require('../Construct-roId57cU.cjs');
4
+ const require_clone = require('../clone-Dy0cR2SZ.cjs');
5
+ const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
3
6
 
4
7
  //#region src/subscribers/Subscriber.ts
5
- const DEFAULT_LOGGER$1 = new __geekmidas_logger_console.ConsoleLogger();
6
8
  var Subscriber = class extends require_Construct.Construct {
7
9
  __IS_SUBSCRIBER__ = true;
8
10
  static isSubscriber(obj) {
9
11
  return Boolean(obj && obj.__IS_SUBSCRIBER__ === true && obj.type === require_Construct.ConstructType.Subscriber);
10
12
  }
11
- constructor(handler, timeout = 3e4, _subscribedEvents, outputSchema, services = [], logger = DEFAULT_LOGGER$1, publisherService, topicName) {
12
- super(require_Construct.ConstructType.Subscriber, logger, services, [], publisherService, outputSchema);
13
+ constructor(handler, timeout = 3e4, _subscribedEvents, outputSchema, services = [], logger = __geekmidas_logger_console.DEFAULT_LOGGER, publisherService, topicName, constructs = []) {
14
+ super(require_Construct.ConstructType.Subscriber, logger, services, [], publisherService, outputSchema, timeout, void 0, void 0, constructs);
13
15
  this.handler = handler;
14
16
  this.timeout = timeout;
15
17
  this._subscribedEvents = _subscribedEvents;
@@ -31,6 +33,8 @@ var SubscriberBuilder = class {
31
33
  _timeout;
32
34
  outputSchema;
33
35
  _services = [];
36
+ /** The construct ids `.dependsOn()` named — what the manifest records. */
37
+ _constructs = [];
34
38
  _logger = __geekmidas_logger_console.DEFAULT_LOGGER;
35
39
  _publisher;
36
40
  _topicName;
@@ -49,43 +53,47 @@ var SubscriberBuilder = class {
49
53
  * subscriber actually publishes follow-up events.
50
54
  */
51
55
  topic(topic) {
52
- this._topicName = topic.name;
53
- return this;
56
+ return require_clone.cloneWith(this, { _topicName: topic.name });
54
57
  }
55
58
  timeout(timeout) {
56
- this._timeout = timeout;
57
- return this;
59
+ return require_clone.cloneWith(this, { _timeout: timeout });
58
60
  }
59
61
  output(schema) {
60
- this.outputSchema = schema;
61
- return this;
62
+ return require_clone.cloneWith(this, { outputSchema: schema });
63
+ }
64
+ /**
65
+ * Depend on constructs — a database, a bucket, a mail sender, a queue, a
66
+ * topic.
67
+ *
68
+ * It records the edge and dissolves each construct's client into the
69
+ * handler's service record under the construct's own id, so
70
+ * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.
71
+ *
72
+ * Constructs only. A `Service` does not match the shape, which is what keeps
73
+ * env sniffing confined to `.services()` and the explicit lift.
74
+ */
75
+ dependsOn(constructs) {
76
+ const services = require_construct_interface.servicesOf(constructs);
77
+ return require_clone.cloneWith(this, {
78
+ _services: [...this._services, ...services],
79
+ _constructs: require_construct_interface.idsOf(constructs, this._constructs)
80
+ });
62
81
  }
63
82
  services(services) {
64
- this._services = [...this._services, ...services];
65
- return this;
83
+ return require_clone.cloneWith(this, { _services: [...this._services, ...services] });
66
84
  }
67
85
  logger(logger) {
68
- this._logger = logger;
69
- return this;
86
+ return require_clone.cloneWith(this, { _logger: logger });
70
87
  }
71
88
  publisher(publisher) {
72
- this._publisher = publisher;
73
- return this;
89
+ return require_clone.cloneWith(this, { _publisher: publisher });
74
90
  }
75
91
  subscribe(event) {
76
92
  const eventsToAdd = Array.isArray(event) ? event : [event];
77
- this._subscribedEvents = [...this._subscribedEvents, ...eventsToAdd];
78
- return this;
93
+ return require_clone.cloneWith(this, { _subscribedEvents: [...this._subscribedEvents, ...eventsToAdd] });
79
94
  }
80
95
  handle(fn) {
81
- const subscriber = new Subscriber(fn, this._timeout, this._subscribedEvents, this.outputSchema, this._services, this._logger, this._publisher, this._topicName);
82
- this._services = [];
83
- this._logger = __geekmidas_logger_console.DEFAULT_LOGGER;
84
- this._publisher = void 0;
85
- this._topicName = void 0;
86
- this._subscribedEvents = [];
87
- this._timeout = 3e4;
88
- this.outputSchema = void 0;
96
+ const subscriber = new Subscriber(fn, this._timeout, this._subscribedEvents, this.outputSchema, this._services, this._logger, this._publisher, this._topicName, this._constructs);
89
97
  return subscriber;
90
98
  }
91
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["DEFAULT_LOGGER","ConsoleLogger","Construct","obj: any","ConstructType","handler: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>","timeout: number","_subscribedEvents?: TSubscribedEvents","outputSchema?: OutSchema","services: TServices","logger: TLogger","publisherService?: Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>","topicName?: string","DEFAULT_LOGGER","topic: Topic<TName, TEvents>","timeout: number","schema: T","services: T","logger: T","publisher: Service<TName, T>","event: TEvent","fn: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>"],"sources":["../../src/subscribers/Subscriber.ts","../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":["import type {\n\tEventPublisher,\n\tExtractPublisherMessage,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { Construct, ConstructType } from '../Construct';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\n// Helper type to extract payload types for subscribed events\ntype ExtractEventPayloads<\n\tTPublisher extends EventPublisher<any> | undefined,\n\tTEventTypes extends any[],\n> = TPublisher extends EventPublisher<any>\n\t? Extract<ExtractPublisherMessage<TPublisher>, { type: TEventTypes[number] }>\n\t: never;\n\nexport class Subscriber<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends\n\t\tExtractPublisherMessage<TEventPublisher>['type'][] = ExtractPublisherMessage<TEventPublisher>['type'][],\n> extends Construct<\n\tTLogger,\n\tTEventPublisherServiceName,\n\tTEventPublisher,\n\tOutSchema,\n\tTServices\n> {\n\t__IS_SUBSCRIBER__ = true;\n\n\tstatic isSubscriber(\n\t\tobj: any,\n\t): obj is Subscriber<any, any, any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\tobj.__IS_SUBSCRIBER__ === true &&\n\t\t\t\tobj.type === ConstructType.Subscriber,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tpublic readonly handler: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>,\n\t\tpublic override readonly timeout: number = 30000,\n\t\tprotected _subscribedEvents?: TSubscribedEvents,\n\t\tpublic override readonly outputSchema?: OutSchema,\n\t\tpublic override readonly services: TServices = [] as unknown as TServices,\n\t\tpublic override readonly logger: TLogger = DEFAULT_LOGGER as TLogger,\n\t\tpublic override readonly publisherService?: Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>,\n\t\t/**\n\t\t * The name of the {@link Topic} this subscriber binds to (via\n\t\t * `s.topic(topic)`), recorded for the manifest so infra wires the SNS\n\t\t * subscription. Undefined when the subscriber's events are typed from a\n\t\t * (hand-written) publisher instead.\n\t\t */\n\t\tpublic readonly topicName?: string,\n\t) {\n\t\tsuper(\n\t\t\tConstructType.Subscriber,\n\t\t\tlogger,\n\t\t\tservices,\n\t\t\t[],\n\t\t\tpublisherService,\n\t\t\toutputSchema,\n\t\t);\n\t}\n\n\tget subscribedEvents(): TSubscribedEvents | undefined {\n\t\treturn this._subscribedEvents;\n\t}\n}\n\n// Handler type for subscribers that receives an array of events\nexport type SubscriberHandler<\n\tTEventPublisher extends EventPublisher<any> | undefined,\n\tTSubscribedEvents extends ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n> = (\n\tctx: SubscriberContext<\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTServices,\n\t\tTLogger\n\t>,\n) => OutSchema extends StandardSchemaV1\n\t? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n\t: any | Promise<any>;\n\n// Context type for subscriber handlers\nexport type SubscriberContext<\n\tTEventPublisher extends EventPublisher<any> | undefined,\n\tTSubscribedEvents extends ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n> = {\n\tevents: ExtractEventPayloads<TEventPublisher, TSubscribedEvents>[];\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n};\n","import type {\n\tEventPublisher,\n\tExtractPublisherMessage,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { Topic, TopicEvents, TopicMessage } from '../topic/Topic';\nimport { Subscriber, type SubscriberHandler } from './Subscriber';\n\nexport class SubscriberBuilder<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends any[] = [],\n> {\n\tprivate _subscribedEvents: TSubscribedEvents = [] as any;\n\tprivate _timeout?: number;\n\tprivate outputSchema?: OutSchema;\n\tprivate _services: TServices = [] as Service[] as TServices;\n\tprivate _logger: TLogger = DEFAULT_LOGGER;\n\tprivate _publisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n\tprivate _topicName?: string;\n\n\tconstructor() {\n\t\tthis._timeout = 30000; // Default timeout\n\t}\n\n\t/**\n\t * Bind this subscriber to a {@link Topic} — the preferred way to type and wire\n\t * a fan-out consumer. It supplies the subscribable event types (and their\n\t * payloads) from the topic's contract and records the binding for the manifest,\n\t * so infra wires the SNS subscription.\n\t *\n\t * Prefer this over typing via a hand-written publisher service: a consumer does\n\t * not publish, so binding a topic does *not* require the topic's publisher\n\t * connection string (least privilege). Use `.publisher(...)` only when the\n\t * subscriber actually publishes follow-up events.\n\t */\n\ttopic<TName extends string, TEvents extends TopicEvents>(\n\t\ttopic: Topic<TName, TEvents>,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tEventPublisher<TopicMessage<TEvents>>,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\tthis._topicName = topic.name;\n\t\treturn this as unknown as SubscriberBuilder<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tEventPublisher<TopicMessage<TEvents>>,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>;\n\t}\n\n\ttimeout(timeout: number): this {\n\t\tthis._timeout = timeout;\n\t\treturn this;\n\t}\n\n\toutput<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\tthis.outputSchema = schema as unknown as OutSchema;\n\t\treturn this as any;\n\t}\n\n\tservices<T extends Service[]>(\n\t\tservices: T,\n\t): SubscriberBuilder<\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\tthis._services = [...this._services, ...services] as any;\n\t\treturn this as any;\n\t}\n\n\tlogger<T extends Logger>(\n\t\tlogger: T,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\tthis._logger = logger as unknown as TLogger;\n\t\treturn this as any;\n\t}\n\n\tpublisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTSubscribedEvents\n\t> {\n\t\tthis._publisher = publisher as any;\n\t\treturn this as any;\n\t}\n\n\tsubscribe<\n\t\tTEvent extends TEventPublisher extends EventPublisher<any>\n\t\t\t?\n\t\t\t\t\t| ExtractPublisherMessage<TEventPublisher>['type']\n\t\t\t\t\t| ExtractPublisherMessage<TEventPublisher>['type'][]\n\t\t\t: never,\n\t>(\n\t\tevent: TEvent,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTEvent extends any[]\n\t\t\t? [...TSubscribedEvents, ...TEvent]\n\t\t\t: [...TSubscribedEvents, TEvent]\n\t> {\n\t\tconst eventsToAdd = Array.isArray(event) ? event : [event];\n\t\tthis._subscribedEvents = [...this._subscribedEvents, ...eventsToAdd] as any;\n\t\treturn this as any;\n\t}\n\n\thandle(\n\t\tfn: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>,\n\t): Subscriber<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\tconst subscriber = new Subscriber(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._subscribedEvents,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._topicName,\n\t\t);\n\n\t\t// Reset builder state after creating the subscriber to prevent pollution\n\t\tthis._services = [] as Service[] as TServices;\n\t\tthis._logger = DEFAULT_LOGGER;\n\t\tthis._publisher = undefined;\n\t\tthis._topicName = undefined;\n\t\tthis._subscribedEvents = [] as any;\n\t\tthis._timeout = 30000; // Reset to default\n\t\tthis.outputSchema = undefined;\n\n\t\treturn subscriber;\n\t}\n}\n","import { SubscriberBuilder } from './SubscriberBuilder';\n\nexport { Subscriber } from './Subscriber';\nexport { SubscriberBuilder };\n\nexport const s = new SubscriberBuilder();\n"],"mappings":";;;;AAWA,MAAMA,mBAAiB,IAAIC;AAU3B,IAAa,aAAb,cAQUC,4BAMR;CACD,oBAAoB;CAEpB,OAAO,aACNC,KACkD;AAClD,SAAO,QACN,OACC,IAAI,sBAAsB,QAC1B,IAAI,SAASC,gCAAc,WAC5B;CACD;CAED,YACiBC,SAOSC,UAAkB,KACjCC,mBACeC,cACAC,WAAsB,CAAE,GACxBC,SAAkBV,kBAClBW,kBAUTC,WACf;AACD,QACCR,gCAAc,YACd,QACA,UACA,CAAE,GACF,kBACA,aACA;EA/Be;EAOS;EACf;EACe;EACA;EACA;EACA;EAUT;CAUhB;CAED,IAAI,mBAAkD;AACrD,SAAO,KAAK;CACZ;AACD;;;;AC3ED,IAAa,oBAAb,MAOE;CACD,AAAQ,oBAAuC,CAAE;CACjD,AAAQ;CACR,AAAQ;CACR,AAAQ,YAAuB,CAAE;CACjC,AAAQ,UAAmBS;CAC3B,AAAQ;CACR,AAAQ;CAER,cAAc;AACb,OAAK,WAAW;CAChB;;;;;;;;;;;;CAaD,MACCC,OAQC;AACD,OAAK,aAAa,MAAM;AACxB,SAAO;CAQP;CAED,QAAQC,SAAuB;AAC9B,OAAK,WAAW;AAChB,SAAO;CACP;CAED,OACCC,QAQC;AACD,OAAK,eAAe;AACpB,SAAO;CACP;CAED,SACCC,UAQC;AACD,OAAK,YAAY,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS;AACjD,SAAO;CACP;CAED,OACCC,QAQC;AACD,OAAK,UAAU;AACf,SAAO;CACP;CAED,UACCC,WAQC;AACD,OAAK,aAAa;AAClB,SAAO;CACP;CAED,UAOCC,OAUC;EACD,MAAM,cAAc,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,KAAM;AAC1D,OAAK,oBAAoB,CAAC,GAAG,KAAK,mBAAmB,GAAG,WAAY;AACpE,SAAO;CACP;CAED,OACCC,IAcC;EACD,MAAM,aAAa,IAAI,WACtB,IACA,KAAK,UACL,KAAK,mBACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK;AAIN,OAAK,YAAY,CAAE;AACnB,OAAK,UAAUR;AACf,OAAK;AACL,OAAK;AACL,OAAK,oBAAoB,CAAE;AAC3B,OAAK,WAAW;AAChB,OAAK;AAEL,SAAO;CACP;AACD;;;;ACpLD,MAAa,IAAI,IAAI"}
1
+ {"version":3,"file":"index.cjs","names":["Construct","obj: any","ConstructType","handler: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>","timeout: number","_subscribedEvents?: TSubscribedEvents","outputSchema?: OutSchema","services: TServices","logger: TLogger","DEFAULT_LOGGER","publisherService?: Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>","topicName?: string","constructs: string[]","DEFAULT_LOGGER","topic: Topic<TName, TEvents>","timeout: number","schema: T","constructs: T","services: T","logger: T","publisher: Service<TName, T>","event: TEvent","fn: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>"],"sources":["../../src/subscribers/Subscriber.ts","../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":["import type {\n\tEventPublisher,\n\tExtractPublisherMessage,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { Construct, ConstructType } from '../Construct';\n\n// Helper type to extract payload types for subscribed events\ntype ExtractEventPayloads<\n\tTPublisher extends EventPublisher<any> | undefined,\n\tTEventTypes extends any[],\n> = TPublisher extends EventPublisher<any>\n\t? Extract<ExtractPublisherMessage<TPublisher>, { type: TEventTypes[number] }>\n\t: never;\n\nexport class Subscriber<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends\n\t\tExtractPublisherMessage<TEventPublisher>['type'][] = ExtractPublisherMessage<TEventPublisher>['type'][],\n> extends Construct<\n\tTLogger,\n\tTEventPublisherServiceName,\n\tTEventPublisher,\n\tOutSchema,\n\tTServices\n> {\n\t__IS_SUBSCRIBER__ = true;\n\n\tstatic isSubscriber(\n\t\tobj: any,\n\t): obj is Subscriber<any, any, any, any, any, any> {\n\t\treturn Boolean(\n\t\t\tobj &&\n\t\t\t\tobj.__IS_SUBSCRIBER__ === true &&\n\t\t\t\tobj.type === ConstructType.Subscriber,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tpublic readonly handler: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>,\n\t\tpublic override readonly timeout: number = 30000,\n\t\tprotected _subscribedEvents?: TSubscribedEvents,\n\t\tpublic override readonly outputSchema?: OutSchema,\n\t\tpublic override readonly services: TServices = [] as unknown as TServices,\n\t\tpublic override readonly logger: TLogger = DEFAULT_LOGGER as TLogger,\n\t\tpublic override readonly publisherService?: Service<\n\t\t\tTEventPublisherServiceName,\n\t\t\tTEventPublisher\n\t\t>,\n\t\t/**\n\t\t * The name of the {@link Topic} this subscriber binds to (via\n\t\t * `s.topic(topic)`), recorded for the manifest so infra wires the SNS\n\t\t * subscription. Undefined when the subscriber's events are typed from a\n\t\t * (hand-written) publisher instead.\n\t\t */\n\t\tpublic readonly topicName?: string,\n\t\t/**\n\t\t * The construct ids `.dependsOn()` named — last, so no existing positional\n\t\t * argument moves.\n\t\t */\n\t\tconstructs: string[] = [],\n\t) {\n\t\tsuper(\n\t\t\tConstructType.Subscriber,\n\t\t\tlogger,\n\t\t\tservices,\n\t\t\t[],\n\t\t\tpublisherService,\n\t\t\toutputSchema,\n\t\t\ttimeout,\n\t\t\tundefined, // memorySize\n\t\t\tundefined, // auditorStorageService\n\t\t\tconstructs,\n\t\t);\n\t}\n\n\tget subscribedEvents(): TSubscribedEvents | undefined {\n\t\treturn this._subscribedEvents;\n\t}\n}\n\n// Handler type for subscribers that receives an array of events\nexport type SubscriberHandler<\n\tTEventPublisher extends EventPublisher<any> | undefined,\n\tTSubscribedEvents extends ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n> = (\n\tctx: SubscriberContext<\n\t\tTEventPublisher,\n\t\tTSubscribedEvents,\n\t\tTServices,\n\t\tTLogger\n\t>,\n) => OutSchema extends StandardSchemaV1\n\t? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n\t: any | Promise<any>;\n\n// Context type for subscriber handlers\nexport type SubscriberContext<\n\tTEventPublisher extends EventPublisher<any> | undefined,\n\tTSubscribedEvents extends ExtractPublisherMessage<TEventPublisher>['type'][],\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n> = {\n\tevents: ExtractEventPayloads<TEventPublisher, TSubscribedEvents>[];\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n};\n","import type {\n\tEventPublisher,\n\tExtractPublisherMessage,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { cloneWith } from '../clone';\nimport {\n\ttype Consumable,\n\tidsOf,\n\ttype ServicesOf,\n\tservicesOf,\n} from '../construct-interface';\nimport type { Topic, TopicEvents, TopicMessage } from '../topic/Topic';\nimport { Subscriber, type SubscriberHandler } from './Subscriber';\n\nexport class SubscriberBuilder<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends any[] = [],\n> {\n\tprivate _subscribedEvents: TSubscribedEvents = [] as any;\n\tprivate _timeout?: number;\n\tprivate outputSchema?: OutSchema;\n\tprivate _services: TServices = [] as Service[] as TServices;\n\t/** The construct ids `.dependsOn()` named — what the manifest records. */\n\tpublic _constructs: string[] = [];\n\tprivate _logger: TLogger = DEFAULT_LOGGER;\n\tprivate _publisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n\tprivate _topicName?: string;\n\n\tconstructor() {\n\t\tthis._timeout = 30000; // Default timeout\n\t}\n\n\t/**\n\t * Bind this subscriber to a {@link Topic} — the preferred way to type and wire\n\t * a fan-out consumer. It supplies the subscribable event types (and their\n\t * payloads) from the topic's contract and records the binding for the manifest,\n\t * so infra wires the SNS subscription.\n\t *\n\t * Prefer this over typing via a hand-written publisher service: a consumer does\n\t * not publish, so binding a topic does *not* require the topic's publisher\n\t * connection string (least privilege). Use `.publisher(...)` only when the\n\t * subscriber actually publishes follow-up events.\n\t */\n\ttopic<TName extends string, TEvents extends TopicEvents>(\n\t\ttopic: Topic<TName, TEvents>,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tEventPublisher<TopicMessage<TEvents>>,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_topicName: topic.name,\n\t\t}) as unknown as SubscriberBuilder<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tEventPublisher<TopicMessage<TEvents>>,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>;\n\t}\n\n\ttimeout(timeout: number): this {\n\t\treturn cloneWith(this, { _timeout: timeout });\n\t}\n\n\toutput<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\toutputSchema: schema as unknown as OutSchema,\n\t\t}) as any;\n\t}\n\n\t/**\n\t * Depend on constructs — a database, a bucket, a mail sender, a queue, a\n\t * topic.\n\t *\n\t * It records the edge and dissolves each construct's client into the\n\t * handler's service record under the construct's own id, so\n\t * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.\n\t *\n\t * Constructs only. A `Service` does not match the shape, which is what keeps\n\t * env sniffing confined to `.services()` and the explicit lift.\n\t */\n\tdependsOn<const T extends readonly Consumable[]>(\n\t\tconstructs: T,\n\t): SubscriberBuilder<\n\t\t[...TServices, ...ServicesOf<T>],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\t// Both halves of the edge, from one call and one clone: the services the\n\t\t// handler runs with, and the ids the manifest records. Recording them\n\t\t// separately is what let them drift apart.\n\t\t//\n\t\t// `servicesOf` is the half that validates, so it runs first — recording\n\t\t// ids ahead of it left a caught `NotAConstruct` with `undefined` already\n\t\t// on a `string[]`.\n\t\tconst services = servicesOf(constructs) as unknown as Service[];\n\n\t\treturn cloneWith(this, {\n\t\t\t_services: [...this._services, ...services],\n\t\t\t_constructs: idsOf(constructs, this._constructs),\n\t\t}) as unknown as SubscriberBuilder<\n\t\t\t[...TServices, ...ServicesOf<T>],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>;\n\t}\n\n\tservices<T extends Service[]>(\n\t\tservices: T,\n\t): SubscriberBuilder<\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_services: [...this._services, ...services] as any,\n\t\t}) as any;\n\t}\n\n\tlogger<T extends Logger>(\n\t\tlogger: T,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\treturn cloneWith(this, { _logger: logger as unknown as TLogger }) as any;\n\t}\n\n\tpublisher<T extends EventPublisher<any>, TName extends string>(\n\t\tpublisher: Service<TName, T>,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tT,\n\t\tTName,\n\t\tTSubscribedEvents\n\t> {\n\t\treturn cloneWith(this, { _publisher: publisher as any }) as any;\n\t}\n\n\tsubscribe<\n\t\tTEvent extends TEventPublisher extends EventPublisher<any>\n\t\t\t?\n\t\t\t\t\t| ExtractPublisherMessage<TEventPublisher>['type']\n\t\t\t\t\t| ExtractPublisherMessage<TEventPublisher>['type'][]\n\t\t\t: never,\n\t>(\n\t\tevent: TEvent,\n\t): SubscriberBuilder<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTEvent extends any[]\n\t\t\t? [...TSubscribedEvents, ...TEvent]\n\t\t\t: [...TSubscribedEvents, TEvent]\n\t> {\n\t\tconst eventsToAdd = Array.isArray(event) ? event : [event];\n\t\treturn cloneWith(this, {\n\t\t\t_subscribedEvents: [...this._subscribedEvents, ...eventsToAdd] as any,\n\t\t}) as any;\n\t}\n\n\thandle(\n\t\tfn: SubscriberHandler<\n\t\t\tTEventPublisher,\n\t\t\tTSubscribedEvents,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema\n\t\t>,\n\t): Subscriber<\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\n\t\tTSubscribedEvents\n\t> {\n\t\tconst subscriber = new Subscriber(\n\t\t\tfn,\n\t\t\tthis._timeout,\n\t\t\tthis._subscribedEvents,\n\t\t\tthis.outputSchema,\n\t\t\tthis._services,\n\t\t\tthis._logger,\n\t\t\tthis._publisher,\n\t\t\tthis._topicName,\n\t\t\tthis._constructs,\n\t\t);\n\n\t\t// No reset: `.handle()` reads this builder and leaves it alone, so a\n\t\t// configured base stays usable for the next subscriber.\n\t\treturn subscriber;\n\t}\n}\n","import { SubscriberBuilder } from './SubscriberBuilder';\n\nexport { Subscriber } from './Subscriber';\nexport { SubscriberBuilder };\n\nexport const s = new SubscriberBuilder();\n"],"mappings":";;;;;;;AAmBA,IAAa,aAAb,cAQUA,4BAMR;CACD,oBAAoB;CAEpB,OAAO,aACNC,KACkD;AAClD,SAAO,QACN,OACC,IAAI,sBAAsB,QAC1B,IAAI,SAASC,gCAAc,WAC5B;CACD;CAED,YACiBC,SAOSC,UAAkB,KACjCC,mBACeC,cACAC,WAAsB,CAAE,GACxBC,SAAkBC,2CAClBC,kBAUTC,WAKhBC,aAAuB,CAAE,GACxB;AACD,QACCV,gCAAc,YACd,QACA,UACA,CAAE,GACF,kBACA,cACA,yBAGA,WACA;EAxCe;EAOS;EACf;EACe;EACA;EACA;EACA;EAUT;CAmBhB;CAED,IAAI,mBAAkD;AACrD,SAAO,KAAK;CACZ;AACD;;;;AC3ED,IAAa,oBAAb,MAOE;CACD,AAAQ,oBAAuC,CAAE;CACjD,AAAQ;CACR,AAAQ;CACR,AAAQ,YAAuB,CAAE;;CAEjC,AAAO,cAAwB,CAAE;CACjC,AAAQ,UAAmBW;CAC3B,AAAQ;CACR,AAAQ;CAER,cAAc;AACb,OAAK,WAAW;CAChB;;;;;;;;;;;;CAaD,MACCC,OAQC;AACD,SAAO,wBAAU,MAAM,EACtB,YAAY,MAAM,KAClB,EAAC;CAQF;CAED,QAAQC,SAAuB;AAC9B,SAAO,wBAAU,MAAM,EAAE,UAAU,QAAS,EAAC;CAC7C;CAED,OACCC,QAQC;AACD,SAAO,wBAAU,MAAM,EACtB,cAAc,OACd,EAAC;CACF;;;;;;;;;;;;CAaD,UACCC,YAQC;EAQD,MAAM,WAAW,uCAAW,WAAW;AAEvC,SAAO,wBAAU,MAAM;GACtB,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS;GAC3C,aAAa,kCAAM,YAAY,KAAK,YAAY;EAChD,EAAC;CAQF;CAED,SACCC,UAQC;AACD,SAAO,wBAAU,MAAM,EACtB,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,EAC3C,EAAC;CACF;CAED,OACCC,QAQC;AACD,SAAO,wBAAU,MAAM,EAAE,SAAS,OAA8B,EAAC;CACjE;CAED,UACCC,WAQC;AACD,SAAO,wBAAU,MAAM,EAAE,YAAY,UAAkB,EAAC;CACxD;CAED,UAOCC,OAUC;EACD,MAAM,cAAc,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,KAAM;AAC1D,SAAO,wBAAU,MAAM,EACtB,mBAAmB,CAAC,GAAG,KAAK,mBAAmB,GAAG,WAAY,EAC9D,EAAC;CACF;CAED,OACCC,IAcC;EACD,MAAM,aAAa,IAAI,WACtB,IACA,KAAK,UACL,KAAK,mBACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,YACL,KAAK;AAKN,SAAO;CACP;AACD;;;;ACnOD,MAAa,IAAI,IAAI"}
@@ -1,8 +1,9 @@
1
- import "../Construct-_1wX7p_Y.cjs";
2
- import { Subscriber, SubscriberHandler } from "../Subscriber-B69ngPwl.cjs";
3
- import { Topic, TopicEvents, TopicMessage } from "../Topic-C5ZMfveW.cjs";
1
+ import "../Construct-WhCXIOPV.cjs";
2
+ import { Consumable, ServicesOf } from "../construct-interface-D2nNkHUN.cjs";
3
+ import { Subscriber, SubscriberHandler } from "../Subscriber-DVQowdyj.cjs";
4
+ import { Topic, TopicEvents, TopicMessage } from "../Topic-Ohx9dvWr.cjs";
4
5
  import { EventPublisher, ExtractPublisherMessage } from "@geekmidas/events";
5
- import * as _geekmidas_logger10 from "@geekmidas/logger";
6
+ import * as _geekmidas_logger19 from "@geekmidas/logger";
6
7
  import { Logger } from "@geekmidas/logger";
7
8
  import { Service } from "@geekmidas/services";
8
9
  import { StandardSchemaV1 } from "@standard-schema/spec";
@@ -13,6 +14,8 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
13
14
  private _timeout?;
14
15
  private outputSchema?;
15
16
  private _services;
17
+ /** The construct ids `.dependsOn()` named — what the manifest records. */
18
+ _constructs: string[];
16
19
  private _logger;
17
20
  private _publisher?;
18
21
  private _topicName?;
@@ -31,6 +34,18 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
31
34
  topic<TName extends string, TEvents extends TopicEvents>(topic: Topic<TName, TEvents>): SubscriberBuilder<TServices, TLogger, OutSchema, EventPublisher<TopicMessage<TEvents>>, TEventPublisherServiceName, TSubscribedEvents>;
32
35
  timeout(timeout: number): this;
33
36
  output<T extends StandardSchemaV1>(schema: T): SubscriberBuilder<TServices, TLogger, T, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
37
+ /**
38
+ * Depend on constructs — a database, a bucket, a mail sender, a queue, a
39
+ * topic.
40
+ *
41
+ * It records the edge and dissolves each construct's client into the
42
+ * handler's service record under the construct's own id, so
43
+ * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.
44
+ *
45
+ * Constructs only. A `Service` does not match the shape, which is what keeps
46
+ * env sniffing confined to `.services()` and the explicit lift.
47
+ */
48
+ dependsOn<const T extends readonly Consumable[]>(constructs: T): SubscriberBuilder<[...TServices, ...ServicesOf<T>], TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
34
49
  services<T extends Service[]>(services: T): SubscriberBuilder<[...TServices, ...T], TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
35
50
  logger<T extends Logger>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
36
51
  publisher<T extends EventPublisher<any>, TName extends string>(publisher: Service<TName, T>): SubscriberBuilder<TServices, TLogger, OutSchema, T, TName, TSubscribedEvents>;
@@ -40,7 +55,7 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
40
55
  //# sourceMappingURL=SubscriberBuilder.d.ts.map
41
56
  //#endregion
42
57
  //#region src/subscribers/index.d.ts
43
- declare const s: SubscriberBuilder<[], _geekmidas_logger10.Logger, undefined, undefined, string, []>;
58
+ declare const s: SubscriberBuilder<[], _geekmidas_logger19.Logger, undefined, undefined, string, []>;
44
59
  //# sourceMappingURL=index.d.ts.map
45
60
 
46
61
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAWa,oCACM,gCACF,SAAS,0BACP,kEACM;;;;EAJZ,QAAA,SAAA;EAAiB,QAAA,OAAA;EAAA,QACX,UAAA;EAAO,QACT,UAAA;EAAM,WAAG,CAAA;EAAM;;;;;;;;;;;EAmCH,KAA3B,CAAA,cAAA,MAAA,EAAA,gBAN2C,WAM3C,CAAA,CAAA,KAAA,EALO,KAKP,CALa,KAKb,EALoB,OAKpB,CAAA,CAAA,EAJE,iBAIF,CAHA,SAGA,EAFA,OAEA,EADA,SACA,EAAA,cAAA,CAAe,YAAf,CAA4B,OAA5B,CAAA,CAAA,EACA,0BADA,EAEA,iBAFA,CAAA;EAAc,OACd,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAA0B,MAC1B,CAAA,UAkBgB,gBAlBhB,CAAA,CAAA,MAAA,EAmBQ,CAnBR,CAAA,EAoBE,iBApBF,CAqBA,SArBA,EAsBA,OAtBA,EAuBA,CAvBA,EAwBA,eAxBA,EAyBA,0BAzBA,EA0BA,iBA1BA,CAAA;EAAiB,QANf,CAAA,UAsCgB,OAtChB,EAAA,CAAA,CAAA,QAAA,EAuCQ,CAvCR,CAAA,EAwCA,iBAxCA,CAAA,CAwBc,GAiBZ,SAjBY,EACR,GAgBU,CAhBV,CAAC,EAiBT,OAfA,EAgBA,SAhBA,EAiBA,eAjBA,EAkBA,0BAlBA,EAmBA,iBAnBA,CAAA;EAAS,MACT,CAAA,UAwBgB,MAxBhB,CAAA,CAAA,MAAA,EAyBQ,CAzBR,CAAA,EA0BE,iBA1BF,CA2BA,SA3BA,EA4BA,CA5BA,EA6BA,SA7BA,EA8BA,eA9BA,EA+BA,0BA/BA,EAgCA,iBAhCA,CAAA;EAAO,SACP,CAAA,UAqCmB,cArCnB,CAAA,GAAA,CAAA,EAAA,cAAA,MAAA,CAAA,CAAA,SAAA,EAsCW,OAtCX,CAsCmB,KAtCnB,EAsC0B,CAtC1B,CAAA,CAAA,EAuCE,iBAvCF,CAwCA,SAxCA,EAyCA,OAzCA,EA0CA,SA1CA,EA2CA,CA3CA,EA4CA,KA5CA,EA6CA,iBA7CA,CAAA;EAAC,SACD,CAAA,gBAmDe,eAnDf,SAmDuC,cAnDvC,CAAA,GAAA,CAAA,GAqDK,uBArDL,CAqD6B,eArD7B,CAAA,CAAA,MAAA,CAAA,GAsDK,uBAtDL,CAsD6B,eAtD7B,CAAA,CAAA,MAAA,CAAA,EAAA,GAAA,KAAA,EAAA,CAAA,KAAA,EAyDO,MAzDP,CAAA,EA0DE,iBA1DF,CA2DA,SA3DA,EA4DA,OA5DA,EA6DA,SA7DA,EA8DA,eA9DA,EA+DA,0BA/DA,EAgEA,MAhEA,SAAA,GAAA,EAAA,GAAA,CAAA,GAiEO,iBAjEP,EAAA,GAiE6B,MAjE7B,CAAA,GAAA,CAAA,GAkEO,iBAlEP,EAkE0B,MAlE1B,CAAA,CAAA;EAAe,MACf,CAAA,EAAA,EAyEI,iBAzEJ,CA0EC,eA1ED,EA2EC,iBA3ED,EA4EC,SA5ED,EA6EC,OA7ED,EA8EC,SA9ED,CAAA,CAAA,EAgFE,UAhFF,CAiFA,SAjFA,EAkFA,OAlFA,EAmFA,SAnFA,EAoFA,eApFA,EAqFA,0BArFA,EAsFA,iBAtFA,CAAA;;;;;cCtEW,GAAC,sBAA0B,mBAAA,CAA1B,MAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;cAkBa,oCACM,gCACF,SAAS,0BACP,kEACM;;;;EAJZ,QAAA,SAAA;EAAiB;EAAA,WACX,EAAA,MAAA,EAAA;EAAO,QACT,OAAA;EAAM,QAAG,UAAA;EAAM,QACb,UAAA;EAAgB,WACV,CAAA;EAAc;;;;;;;;;;;EAoCX,KAC1B,CAAA,cAAA,MAAA,EAAA,gBAR2C,WAQ3C,CAAA,CAAA,KAAA,EAPO,KAOP,CAPa,KAOb,EAPoB,OAOpB,CAAA,CAAA,EANE,iBAMF,CALA,SAKA,EAJA,OAIA,EAHA,SAGA,EAFA,cAEA,CAFe,YAEf,CAF4B,OAE5B,CAAA,CAAA,EADA,0BACA,EAAA,iBAAA,CAAA;EAAiB,OANf,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAiB,MAwBH,CAAA,UAAA,gBAAA,CAAA,CAAA,MAAA,EACR,CADQ,CAAA,EAEd,iBAFc,CAGhB,SAHgB,EAIhB,OAJgB,EAKhB,CALgB,EAMhB,eANgB,EAOhB,0BAPgB,EAQhB,iBARgB,CAAA;EAAgB;;;;;;;;;;;EA6BnB,SAAgB,CAAA,gBAAA,SAHK,UAGL,EAAA,CAAA,CAAA,UAAA,EAFjB,CAEiB,CAAA,EAD3B,iBAC2B,CAAA,CAAX,GAAd,SAAc,EAClB,GADkB,UAClB,CAD6B,CAC7B,CAAA,CAAO,EAAP,OACA,EAAA,SAAA,EACA,eADA,EAEA,0BAFA,EAGA,iBAHA,CAAA;EAAS,QACT,CAAA,UA0BkB,OA1BlB,EAAA,CAAA,CAAA,QAAA,EA2BU,CA3BV,CAAA,EA4BE,iBA5BF,CAAA,CACA,GA4BI,SA5BJ,EACA,GA2BkB,CA3BlB,CAAiB,EA4BjB,OAlCE,EAmCF,SAnCE,EAoCF,eApCE,EAqCF,0BArCE,EAsCF,iBAtCE,CAAA;EAAiB,MA8BD,CAAA,UAeF,MAfE,CAAA,CAAA,MAAA,EAgBV,CAhBU,CAAA,EAiBhB,iBAjBgB,CAkBlB,SAlBkB,EAmBlB,CAnBkB,EAoBlB,SApBkB,EAqBlB,eArBkB,EAsBlB,0BAtBkB,EAuBlB,iBAvBkB,CAAA;EAAO,SACf,CAAA,UA2BS,cA3BT,CAAA,GAAA,CAAA,EAAA,cAAA,MAAA,CAAA,CAAA,SAAA,EA4BC,OA5BD,CA4BS,KA5BT,EA4BgB,CA5BhB,CAAA,CAAA,EA6BR,iBA7BQ,CA8BV,SA9BU,EA+BV,OA/BU,EAgCV,SAhCU,EAiCV,CAjCU,EAkCV,KAlCU,EAmCV,iBAnCU,CAAA;EAAC,SAEP,CAAA,gBAuCW,eAvCX,SAuCmC,cAvCnC,CAAA,GAAA,CAAA,GAyCC,uBAzCD,CAyCyB,eAzCzB,CAAA,CAAA,MAAA,CAAA,GA0CC,uBA1CD,CA0CyB,eA1CzB,CAAA,CAAA,MAAA,CAAA,EAAA,GAAA,KAAA,EAAA,CAAA,KAAA,EA6CG,MA7CH,CAAA,EA8CF,iBA9CE,CA+CJ,SA/CI,EAgDJ,OAhDI,EAiDJ,SAjDI,EAkDJ,eAlDI,EAmDJ,0BAnDI,EAoDJ,MApDI,SAAA,GAAA,EAAA,GAAA,CAAA,GAqDG,iBArDH,EAAA,GAqDyB,MArDzB,CAAA,GAAA,CAAA,GAsDG,iBAtDH,EAsDsB,MAtDtB,CAAA,CAAA;EAAS,MAAK,CAAA,EAAA,EA+Dd,iBA/Dc,CAgEjB,eAhEiB,EAiEjB,iBAjEiB,EAkEjB,SAlEiB,EAmEjB,OAnEiB,EAoEjB,SApEiB,CAAA,CAAA,EAsEhB,UAtEgB,CAuElB,SAvEkB,EAwElB,OAxEkB,EAyElB,SAzEkB,EA0ElB,eA1EkB,EA2ElB,0BA3EkB,EA4ElB,iBA5EkB,CAAA;;;;;cCrIP,GAAC,sBAA0B,mBAAA,CAA1B,MAAA"}
@@ -1,17 +1,21 @@
1
- import "../Construct-DCMuYOox.mjs";
2
- import { Subscriber, SubscriberHandler } from "../Subscriber-D8Xm-86W.mjs";
3
- import { Topic, TopicEvents, TopicMessage } from "../Topic-DT10AqHk.mjs";
1
+ import "../Construct-B-xc0SE9.mjs";
2
+ import { Consumable, ServicesOf } from "../construct-interface-BqwRNYA2.mjs";
3
+ import { Subscriber, SubscriberHandler } from "../Subscriber-4rBJgDKI.mjs";
4
+ import { Topic, TopicEvents, TopicMessage } from "../Topic-cmy2jOUy.mjs";
4
5
  import { Service } from "@geekmidas/services";
5
6
  import { EventPublisher, ExtractPublisherMessage } from "@geekmidas/events";
6
- import { Logger as Logger$1 } from "@geekmidas/logger";
7
+ import * as _geekmidas_logger16 from "@geekmidas/logger";
8
+ import { Logger } from "@geekmidas/logger";
7
9
  import { StandardSchemaV1 } from "@standard-schema/spec";
8
10
 
9
11
  //#region src/subscribers/SubscriberBuilder.d.ts
10
- declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extends Logger$1 = Logger$1, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TSubscribedEvents extends any[] = []> {
12
+ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TSubscribedEvents extends any[] = []> {
11
13
  private _subscribedEvents;
12
14
  private _timeout?;
13
15
  private outputSchema?;
14
16
  private _services;
17
+ /** The construct ids `.dependsOn()` named — what the manifest records. */
18
+ _constructs: string[];
15
19
  private _logger;
16
20
  private _publisher?;
17
21
  private _topicName?;
@@ -30,8 +34,20 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
30
34
  topic<TName extends string, TEvents extends TopicEvents>(topic: Topic<TName, TEvents>): SubscriberBuilder<TServices, TLogger, OutSchema, EventPublisher<TopicMessage<TEvents>>, TEventPublisherServiceName, TSubscribedEvents>;
31
35
  timeout(timeout: number): this;
32
36
  output<T extends StandardSchemaV1>(schema: T): SubscriberBuilder<TServices, TLogger, T, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
37
+ /**
38
+ * Depend on constructs — a database, a bucket, a mail sender, a queue, a
39
+ * topic.
40
+ *
41
+ * It records the edge and dissolves each construct's client into the
42
+ * handler's service record under the construct's own id, so
43
+ * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.
44
+ *
45
+ * Constructs only. A `Service` does not match the shape, which is what keeps
46
+ * env sniffing confined to `.services()` and the explicit lift.
47
+ */
48
+ dependsOn<const T extends readonly Consumable[]>(constructs: T): SubscriberBuilder<[...TServices, ...ServicesOf<T>], TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
33
49
  services<T extends Service[]>(services: T): SubscriberBuilder<[...TServices, ...T], TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
34
- logger<T extends Logger$1>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
50
+ logger<T extends Logger>(logger: T): SubscriberBuilder<TServices, T, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
35
51
  publisher<T extends EventPublisher<any>, TName extends string>(publisher: Service<TName, T>): SubscriberBuilder<TServices, TLogger, OutSchema, T, TName, TSubscribedEvents>;
36
52
  subscribe<TEvent extends (TEventPublisher extends EventPublisher<any> ? ExtractPublisherMessage<TEventPublisher>['type'] | ExtractPublisherMessage<TEventPublisher>['type'][] : never)>(event: TEvent): SubscriberBuilder<TServices, TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TEvent extends any[] ? [...TSubscribedEvents, ...TEvent] : [...TSubscribedEvents, TEvent]>;
37
53
  handle(fn: SubscriberHandler<TEventPublisher, TSubscribedEvents, TServices, TLogger, OutSchema>): Subscriber<TServices, TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TSubscribedEvents>;
@@ -39,7 +55,7 @@ declare class SubscriberBuilder<TServices extends Service[] = [], TLogger extend
39
55
  //# sourceMappingURL=SubscriberBuilder.d.ts.map
40
56
  //#endregion
41
57
  //#region src/subscribers/index.d.ts
42
- declare const s: SubscriberBuilder<[], Logger, undefined, undefined, string, []>;
58
+ declare const s: SubscriberBuilder<[], _geekmidas_logger16.Logger, undefined, undefined, string, []>;
43
59
  //# sourceMappingURL=index.d.ts.map
44
60
 
45
61
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAWa,oCACM,gCACF,WAAS,4BACP,kEACM;;;EAJZ,QAAA,YAAiB;EAAA,QAAA,SAAA;EAAA,QACX,OAAA;EAAO,QACT,UAAA;EAAM,QAAG,UAAA;EAAM,WACb,CAAA;EAAgB;;;;;;;;;;;EAkCnB,KACd,CAAA,cAAA,MAAA,EAAA,gBAP2C,WAO3C,CAAA,CAAA,KAAA,EANO,KAMP,CANa,KAMb,EANoB,OAMpB,CAAA,CAAA,EALE,iBAKF,CAJA,SAIA,EAHA,OAGA,EAFA,SAEA,EADA,cACA,CADe,YACf,CAD4B,OAC5B,CAAA,CAAA,EAAA,0BAAA,EACA,iBADA,CAAA;EAA0B,OAC1B,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAiB,MANf,CAAA,UAwBc,gBAxBd,CAAA,CAAA,MAAA,EAyBM,CAzBN,CAAA,EA0BA,iBA1BA,CA2BF,SA3BE,EA4BF,OA5BE,EA6BF,CA7BE,EA8BF,eA9BE,EA+BF,0BA/BE,EAgCF,iBAhCE,CAAA;EAAiB,QAwBH,CAAA,UAcE,OAdF,EAAA,CAAA,CAAA,QAAA,EAeN,CAfM,CAAA,EAgBd,iBAhBc,CAAA,CACR,GAgBJ,SAhBI,EAER,GAckB,CAdlB,CAAS,EAeT,OAdA,EAeA,SAfA,EAgBA,eAhBA,EAiBA,0BAjBA,EAkBA,iBAlBA,CAAA;EAAO,MACP,CAAA,UAuBgB,QAvBhB,CAAA,CAAA,MAAA,EAwBQ,CAxBR,CAAA,EAyBE,iBAzBF,CA0BA,SA1BA,EA2BA,CA3BA,EA4BA,SA5BA,EA6BA,eA7BA,EA8BA,0BA9BA,EA+BA,iBA/BA,CAAA;EAAC,SACD,CAAA,UAoCmB,cApCnB,CAAA,GAAA,CAAA,EAAA,cAAA,MAAA,CAAA,CAAA,SAAA,EAqCW,OArCX,CAqCmB,KArCnB,EAqC0B,CArC1B,CAAA,CAAA,EAsCE,iBAtCF,CAuCA,SAvCA,EAwCA,OAxCA,EAyCA,SAzCA,EA0CA,CA1CA,EA2CA,KA3CA,EA4CA,iBA5CA,CAAA;EAAe,SACf,CAAA,gBAkDe,eAlDf,SAkDuC,cAlDvC,CAAA,GAAA,CAAA,GAoDK,uBApDL,CAoD6B,eApD7B,CAAA,CAAA,MAAA,CAAA,GAqDK,uBArDL,CAqD6B,eArD7B,CAAA,CAAA,MAAA,CAAA,EAAA,GAAA,KAAA,EAAA,CAAA,KAAA,EAwDO,MAxDP,CAAA,EAyDE,iBAzDF,CA0DA,SA1DA,EA2DA,OA3DA,EA4DA,SA5DA,EA6DA,eA7DA,EA8DA,0BA9DA,EA+DA,MA/DA,SAAA,GAAA,EAAA,GAAA,CAAA,GAgEO,iBAhEP,EAAA,GAgE6B,MAhE7B,CAAA,GAAA,CAAA,GAiEO,iBAjEP,EAiE0B,MAjE1B,CAAA,CAAA;EAA0B,MAC1B,CAAA,EAAA,EAwEI,iBAxEJ,CAyEC,eAzED,EA0EC,iBA1ED,EA2EC,SA3ED,EA4EC,OA5ED,EA6EC,SA7ED,CAAA,CAAA,EA+EE,UA/EF,CAgFA,SAhFA,EAiFA,OAjFA,EAkFA,SAlFA,EAmFA,eAnFA,EAoFA,0BApFA,EAqFA,iBArFA,CAAA;;;;;cCvEW,GAAC,sBAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
- import { Construct, ConstructType } from "../Construct-r0U2zBwW.mjs";
2
- import { ConsoleLogger, DEFAULT_LOGGER } from "@geekmidas/logger/console";
1
+ import { Construct, ConstructType } from "../Construct-HmWM6YYu.mjs";
2
+ import { idsOf, servicesOf } from "../construct-interface-Z4CpS8tK.mjs";
3
+ import { cloneWith } from "../clone-DblgEZZa.mjs";
4
+ import { DEFAULT_LOGGER } from "@geekmidas/logger/console";
3
5
 
4
6
  //#region src/subscribers/Subscriber.ts
5
- const DEFAULT_LOGGER$1 = new ConsoleLogger();
6
7
  var Subscriber = class extends Construct {
7
8
  __IS_SUBSCRIBER__ = true;
8
9
  static isSubscriber(obj) {
9
10
  return Boolean(obj && obj.__IS_SUBSCRIBER__ === true && obj.type === ConstructType.Subscriber);
10
11
  }
11
- constructor(handler, timeout = 3e4, _subscribedEvents, outputSchema, services = [], logger = DEFAULT_LOGGER$1, publisherService, topicName) {
12
- super(ConstructType.Subscriber, logger, services, [], publisherService, outputSchema);
12
+ constructor(handler, timeout = 3e4, _subscribedEvents, outputSchema, services = [], logger = DEFAULT_LOGGER, publisherService, topicName, constructs = []) {
13
+ super(ConstructType.Subscriber, logger, services, [], publisherService, outputSchema, timeout, void 0, void 0, constructs);
13
14
  this.handler = handler;
14
15
  this.timeout = timeout;
15
16
  this._subscribedEvents = _subscribedEvents;
@@ -31,6 +32,8 @@ var SubscriberBuilder = class {
31
32
  _timeout;
32
33
  outputSchema;
33
34
  _services = [];
35
+ /** The construct ids `.dependsOn()` named — what the manifest records. */
36
+ _constructs = [];
34
37
  _logger = DEFAULT_LOGGER;
35
38
  _publisher;
36
39
  _topicName;
@@ -49,43 +52,47 @@ var SubscriberBuilder = class {
49
52
  * subscriber actually publishes follow-up events.
50
53
  */
51
54
  topic(topic) {
52
- this._topicName = topic.name;
53
- return this;
55
+ return cloneWith(this, { _topicName: topic.name });
54
56
  }
55
57
  timeout(timeout) {
56
- this._timeout = timeout;
57
- return this;
58
+ return cloneWith(this, { _timeout: timeout });
58
59
  }
59
60
  output(schema) {
60
- this.outputSchema = schema;
61
- return this;
61
+ return cloneWith(this, { outputSchema: schema });
62
+ }
63
+ /**
64
+ * Depend on constructs — a database, a bucket, a mail sender, a queue, a
65
+ * topic.
66
+ *
67
+ * It records the edge and dissolves each construct's client into the
68
+ * handler's service record under the construct's own id, so
69
+ * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.
70
+ *
71
+ * Constructs only. A `Service` does not match the shape, which is what keeps
72
+ * env sniffing confined to `.services()` and the explicit lift.
73
+ */
74
+ dependsOn(constructs) {
75
+ const services = servicesOf(constructs);
76
+ return cloneWith(this, {
77
+ _services: [...this._services, ...services],
78
+ _constructs: idsOf(constructs, this._constructs)
79
+ });
62
80
  }
63
81
  services(services) {
64
- this._services = [...this._services, ...services];
65
- return this;
82
+ return cloneWith(this, { _services: [...this._services, ...services] });
66
83
  }
67
84
  logger(logger) {
68
- this._logger = logger;
69
- return this;
85
+ return cloneWith(this, { _logger: logger });
70
86
  }
71
87
  publisher(publisher) {
72
- this._publisher = publisher;
73
- return this;
88
+ return cloneWith(this, { _publisher: publisher });
74
89
  }
75
90
  subscribe(event) {
76
91
  const eventsToAdd = Array.isArray(event) ? event : [event];
77
- this._subscribedEvents = [...this._subscribedEvents, ...eventsToAdd];
78
- return this;
92
+ return cloneWith(this, { _subscribedEvents: [...this._subscribedEvents, ...eventsToAdd] });
79
93
  }
80
94
  handle(fn) {
81
- const subscriber = new Subscriber(fn, this._timeout, this._subscribedEvents, this.outputSchema, this._services, this._logger, this._publisher, this._topicName);
82
- this._services = [];
83
- this._logger = DEFAULT_LOGGER;
84
- this._publisher = void 0;
85
- this._topicName = void 0;
86
- this._subscribedEvents = [];
87
- this._timeout = 3e4;
88
- this.outputSchema = void 0;
95
+ const subscriber = new Subscriber(fn, this._timeout, this._subscribedEvents, this.outputSchema, this._services, this._logger, this._publisher, this._topicName, this._constructs);
89
96
  return subscriber;
90
97
  }
91
98
  };