@geekmidas/constructs 10.0.0-alpha.1 → 10.0.0-alpha.10

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 (219) hide show
  1. package/README.md +1 -0
  2. package/dist/{Construct-CdhThxDI.mjs → Construct-BD5neF7w.mjs} +14 -1
  3. package/dist/Construct-BD5neF7w.mjs.map +1 -0
  4. package/dist/{Construct-WhCXIOPV.d.cts → Construct-C0ijr2qp.d.cts} +14 -1
  5. package/dist/Construct-C0ijr2qp.d.cts.map +1 -0
  6. package/dist/{Construct-B-xc0SE9.d.mts → Construct-Ct8nalEi.d.mts} +14 -1
  7. package/dist/Construct-Ct8nalEi.d.mts.map +1 -0
  8. package/dist/{Construct-roId57cU.cjs → Construct-CyS3RpTL.cjs} +14 -1
  9. package/dist/Construct-CyS3RpTL.cjs.map +1 -0
  10. package/dist/Cron-DmQ8vQ4b.d.cts +39 -0
  11. package/dist/Cron-DmQ8vQ4b.d.cts.map +1 -0
  12. package/dist/Cron-dh4rUgib.d.mts +39 -0
  13. package/dist/Cron-dh4rUgib.d.mts.map +1 -0
  14. package/dist/CronBuilder-BquXDbDI.d.cts +44 -0
  15. package/dist/CronBuilder-BquXDbDI.d.cts.map +1 -0
  16. package/dist/CronBuilder-CGgY2080.d.mts +44 -0
  17. package/dist/CronBuilder-CGgY2080.d.mts.map +1 -0
  18. package/dist/CronBuilder-CYKT5RiO.mjs +93 -0
  19. package/dist/CronBuilder-CYKT5RiO.mjs.map +1 -0
  20. package/dist/CronBuilder-Da0C0edR.cjs +105 -0
  21. package/dist/CronBuilder-Da0C0edR.cjs.map +1 -0
  22. package/dist/{Endpoint-BKR5QH6O.d.mts → Endpoint-BjWKinFA.d.mts} +2 -2
  23. package/dist/{Endpoint-BQ9O0P1w.d.cts.map → Endpoint-BjWKinFA.d.mts.map} +1 -1
  24. package/dist/{Endpoint-BTj58Gob.mjs → Endpoint-DCQPMdUX.mjs} +3 -3
  25. package/dist/{Endpoint-BTj58Gob.mjs.map → Endpoint-DCQPMdUX.mjs.map} +1 -1
  26. package/dist/{Endpoint-BBkV6l0k.cjs → Endpoint-DcWXE-SZ.cjs} +3 -3
  27. package/dist/{Endpoint-BBkV6l0k.cjs.map → Endpoint-DcWXE-SZ.cjs.map} +1 -1
  28. package/dist/{Endpoint-BQ9O0P1w.d.cts → Endpoint-dav89W6-.d.cts} +2 -2
  29. package/dist/Endpoint-dav89W6-.d.cts.map +1 -0
  30. package/dist/{EndpointFactory-DYoGLaIT.cjs → EndpointFactory-CdWB7wPw.cjs} +7 -5
  31. package/dist/EndpointFactory-CdWB7wPw.cjs.map +1 -0
  32. package/dist/{EndpointFactory-BejSTzbB.mjs → EndpointFactory-CjV8F_lJ.mjs} +7 -5
  33. package/dist/EndpointFactory-CjV8F_lJ.mjs.map +1 -0
  34. package/dist/{HonoEndpointAdaptor-wMsCyMgt.cjs → HonoEndpointAdaptor-DtL9j19R.cjs} +5 -6
  35. package/dist/{HonoEndpointAdaptor-wMsCyMgt.cjs.map → HonoEndpointAdaptor-DtL9j19R.cjs.map} +1 -1
  36. package/dist/{HonoEndpointAdaptor-7aYNdqJq.mjs → HonoEndpointAdaptor-P1ahhZHu.mjs} +4 -5
  37. package/dist/{HonoEndpointAdaptor-7aYNdqJq.mjs.map → HonoEndpointAdaptor-P1ahhZHu.mjs.map} +1 -1
  38. package/dist/{Queue-D6WeziRD.d.cts → Queue-D7ZuwBhy.d.cts} +2 -2
  39. package/dist/{Queue-D6WeziRD.d.cts.map → Queue-D7ZuwBhy.d.cts.map} +1 -1
  40. package/dist/{Queue-DpUeqdC8.d.mts → Queue-gVGfi2Yk.d.mts} +2 -2
  41. package/dist/{Queue-DpUeqdC8.d.mts.map → Queue-gVGfi2Yk.d.mts.map} +1 -1
  42. package/dist/{Subscriber-4rBJgDKI.d.mts → Subscriber-2mEi0ImH.d.cts} +3 -3
  43. package/dist/{Subscriber-4rBJgDKI.d.mts.map → Subscriber-2mEi0ImH.d.cts.map} +1 -1
  44. package/dist/{Subscriber-DVQowdyj.d.cts → Subscriber-xTJ9ayPN.d.mts} +3 -3
  45. package/dist/{Subscriber-DVQowdyj.d.cts.map → Subscriber-xTJ9ayPN.d.mts.map} +1 -1
  46. package/dist/SubscriberBuilder-4OPehf2R.cjs +120 -0
  47. package/dist/SubscriberBuilder-4OPehf2R.cjs.map +1 -0
  48. package/dist/SubscriberBuilder-BjkbeT9l.mjs +108 -0
  49. package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +1 -0
  50. package/dist/SubscriberBuilder-Dptmo-1A.d.mts +62 -0
  51. package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +1 -0
  52. package/dist/SubscriberBuilder-waNhzjSM.d.cts +62 -0
  53. package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +1 -0
  54. package/dist/{Topic-Ohx9dvWr.d.cts → Topic-19QeHBIR.d.cts} +2 -2
  55. package/dist/{Topic-Ohx9dvWr.d.cts.map → Topic-19QeHBIR.d.cts.map} +1 -1
  56. package/dist/{Topic-cmy2jOUy.d.mts → Topic-DuFeqkBh.d.mts} +2 -2
  57. package/dist/{Topic-cmy2jOUy.d.mts.map → Topic-DuFeqkBh.d.mts.map} +1 -1
  58. package/dist/adaptors/aws.cjs +243 -10
  59. package/dist/adaptors/aws.cjs.map +1 -1
  60. package/dist/adaptors/aws.d.cts +99 -10
  61. package/dist/adaptors/aws.d.cts.map +1 -1
  62. package/dist/adaptors/aws.d.mts +99 -10
  63. package/dist/adaptors/aws.d.mts.map +1 -1
  64. package/dist/adaptors/aws.mjs +240 -7
  65. package/dist/adaptors/aws.mjs.map +1 -1
  66. package/dist/adaptors/hono.cjs +6 -7
  67. package/dist/adaptors/hono.d.cts +6 -6
  68. package/dist/adaptors/hono.d.cts.map +1 -1
  69. package/dist/adaptors/hono.d.mts +6 -6
  70. package/dist/adaptors/hono.d.mts.map +1 -1
  71. package/dist/adaptors/hono.mjs +6 -7
  72. package/dist/adaptors/testing.cjs +9 -10
  73. package/dist/adaptors/testing.cjs.map +1 -1
  74. package/dist/adaptors/testing.d.cts +6 -6
  75. package/dist/adaptors/testing.d.mts +6 -6
  76. package/dist/adaptors/testing.mjs +6 -7
  77. package/dist/adaptors/testing.mjs.map +1 -1
  78. package/dist/auth.cjs +2 -2
  79. package/dist/auth.cjs.map +1 -1
  80. package/dist/auth.d.cts +10 -10
  81. package/dist/auth.d.cts.map +1 -1
  82. package/dist/auth.d.mts +10 -10
  83. package/dist/auth.d.mts.map +1 -1
  84. package/dist/auth.mjs +2 -2
  85. package/dist/auth.mjs.map +1 -1
  86. package/dist/{cache-CdQ7OLpR.d.cts → cache-BrRz3fEB.d.mts} +3 -3
  87. package/dist/{cache-CdQ7OLpR.d.cts.map → cache-BrRz3fEB.d.mts.map} +1 -1
  88. package/dist/{cache-DYoJFcfd.d.mts → cache-BtZY_tHe.d.cts} +3 -3
  89. package/dist/{cache-DYoJFcfd.d.mts.map → cache-BtZY_tHe.d.cts.map} +1 -1
  90. package/dist/cache.d.cts +2 -2
  91. package/dist/cache.d.mts +2 -2
  92. package/dist/{construct-interface-BqwRNYA2.d.mts → construct-interface-D9d4Gm4p.d.cts} +2 -2
  93. package/dist/{construct-interface-BqwRNYA2.d.mts.map → construct-interface-D9d4Gm4p.d.cts.map} +1 -1
  94. package/dist/{construct-interface-D2nNkHUN.d.cts → construct-interface-g5GM5pwR.d.mts} +2 -2
  95. package/dist/{construct-interface-D2nNkHUN.d.cts.map → construct-interface-g5GM5pwR.d.mts.map} +1 -1
  96. package/dist/construct-interface.d.cts +1 -1
  97. package/dist/construct-interface.d.mts +1 -1
  98. package/dist/credential.d.cts +1 -1
  99. package/dist/credential.d.mts +1 -1
  100. package/dist/crons/index.cjs +68 -86
  101. package/dist/crons/index.cjs.map +1 -1
  102. package/dist/crons/index.d.cts +36 -48
  103. package/dist/crons/index.d.cts.map +1 -1
  104. package/dist/crons/index.d.mts +36 -48
  105. package/dist/crons/index.d.mts.map +1 -1
  106. package/dist/crons/index.mjs +65 -82
  107. package/dist/crons/index.mjs.map +1 -1
  108. package/dist/database/kysely.d.cts +2 -2
  109. package/dist/database/kysely.d.mts +2 -2
  110. package/dist/email.d.cts +1 -1
  111. package/dist/email.d.mts +1 -1
  112. package/dist/endpoints/index.cjs +6 -7
  113. package/dist/endpoints/index.d.cts +5 -5
  114. package/dist/endpoints/index.d.mts +5 -5
  115. package/dist/endpoints/index.mjs +5 -6
  116. package/dist/file-server.d.cts +1 -1
  117. package/dist/file-server.d.mts +1 -1
  118. package/dist/functions/index.cjs +3 -4
  119. package/dist/functions/index.d.cts +4 -4
  120. package/dist/functions/index.d.mts +4 -4
  121. package/dist/functions/index.mjs +3 -3
  122. package/dist/{functions-Cpff1uZH.mjs → functions-14lpEFL4.mjs} +22 -9
  123. package/dist/functions-14lpEFL4.mjs.map +1 -0
  124. package/dist/{functions-DukjG8ov.cjs → functions-i_la-N5r.cjs} +21 -14
  125. package/dist/functions-i_la-N5r.cjs.map +1 -0
  126. package/dist/{index-D5zqAJ2e.d.cts → index-Bd5FqCoe.d.cts} +5 -5
  127. package/dist/{index-Cvz551AO.d.mts.map → index-Bd5FqCoe.d.cts.map} +1 -1
  128. package/dist/index-BknhM6Ux.d.mts +31 -0
  129. package/dist/index-BknhM6Ux.d.mts.map +1 -0
  130. package/dist/index-CBSfrowv.d.cts +31 -0
  131. package/dist/index-CBSfrowv.d.cts.map +1 -0
  132. package/dist/{index-BTvozlUD.d.cts → index-D24Xm79M.d.cts} +19 -11
  133. package/dist/index-D24Xm79M.d.cts.map +1 -0
  134. package/dist/{index-L7pz0R0T.d.mts → index-_ajboYxK.d.mts} +26 -17
  135. package/dist/index-_ajboYxK.d.mts.map +1 -0
  136. package/dist/{index-Cvz551AO.d.mts → index-lAO9egTb.d.mts} +5 -5
  137. package/dist/{index-D5zqAJ2e.d.cts.map → index-lAO9egTb.d.mts.map} +1 -1
  138. package/dist/index.cjs +1 -1
  139. package/dist/index.d.cts +1 -1
  140. package/dist/index.d.mts +1 -1
  141. package/dist/index.mjs +1 -1
  142. package/dist/{lazyAccessors-DM6HcXQk.mjs → lazyAccessors-BoJN3SMd.mjs} +41 -2
  143. package/dist/lazyAccessors-BoJN3SMd.mjs.map +1 -0
  144. package/dist/{lazyAccessors-DrJj8NpA.cjs → lazyAccessors-e3j2oE2m.cjs} +52 -1
  145. package/dist/lazyAccessors-e3j2oE2m.cjs.map +1 -0
  146. package/dist/object-storage.d.cts +1 -1
  147. package/dist/object-storage.d.mts +1 -1
  148. package/dist/{processAudits-Bc8rz6Ev.cjs → processAudits-CGqttuXm.cjs} +1 -1
  149. package/dist/{processAudits-Bc8rz6Ev.cjs.map → processAudits-CGqttuXm.cjs.map} +1 -1
  150. package/dist/{processAudits-D89tICM4.mjs → processAudits-Dmts9H_b.mjs} +1 -1
  151. package/dist/{processAudits-D89tICM4.mjs.map → processAudits-Dmts9H_b.mjs.map} +1 -1
  152. package/dist/queue/index.cjs +1 -1
  153. package/dist/queue/index.d.cts +5 -5
  154. package/dist/queue/index.d.mts +5 -5
  155. package/dist/queue/index.mjs +1 -1
  156. package/dist/rest-api.cjs +6 -8
  157. package/dist/rest-api.cjs.map +1 -1
  158. package/dist/rest-api.d.cts +16 -24
  159. package/dist/rest-api.d.cts.map +1 -1
  160. package/dist/rest-api.d.mts +16 -24
  161. package/dist/rest-api.d.mts.map +1 -1
  162. package/dist/rest-api.mjs +6 -8
  163. package/dist/rest-api.mjs.map +1 -1
  164. package/dist/site.cjs +2 -2
  165. package/dist/site.cjs.map +1 -1
  166. package/dist/site.d.cts +9 -16
  167. package/dist/site.d.cts.map +1 -1
  168. package/dist/site.d.mts +9 -16
  169. package/dist/site.d.mts.map +1 -1
  170. package/dist/site.mjs +2 -2
  171. package/dist/site.mjs.map +1 -1
  172. package/dist/subscribers/index.cjs +6 -108
  173. package/dist/subscribers/index.d.cts +6 -63
  174. package/dist/subscribers/index.d.mts +6 -63
  175. package/dist/subscribers/index.mjs +5 -105
  176. package/dist/topic/index.cjs +1 -1
  177. package/dist/topic/index.d.cts +4 -32
  178. package/dist/topic/index.d.mts +4 -32
  179. package/dist/topic/index.mjs +1 -1
  180. package/dist/worker.cjs +166 -0
  181. package/dist/worker.cjs.map +1 -0
  182. package/dist/worker.d.cts +146 -0
  183. package/dist/worker.d.cts.map +1 -0
  184. package/dist/worker.d.mts +145 -0
  185. package/dist/worker.d.mts.map +1 -0
  186. package/dist/worker.mjs +165 -0
  187. package/dist/worker.mjs.map +1 -0
  188. package/package.json +58 -66
  189. package/dist/AWSScheduledFunction-9bJS4WdJ.d.cts +0 -122
  190. package/dist/AWSScheduledFunction-9bJS4WdJ.d.cts.map +0 -1
  191. package/dist/AWSScheduledFunction-BJjj8B5V.mjs +0 -243
  192. package/dist/AWSScheduledFunction-BJjj8B5V.mjs.map +0 -1
  193. package/dist/AWSScheduledFunction-BO5iEMSh.d.mts +0 -122
  194. package/dist/AWSScheduledFunction-BO5iEMSh.d.mts.map +0 -1
  195. package/dist/AWSScheduledFunction-qu4ieRZR.cjs +0 -255
  196. package/dist/AWSScheduledFunction-qu4ieRZR.cjs.map +0 -1
  197. package/dist/Construct-B-xc0SE9.d.mts.map +0 -1
  198. package/dist/Construct-CdhThxDI.mjs.map +0 -1
  199. package/dist/Construct-WhCXIOPV.d.cts.map +0 -1
  200. package/dist/Construct-roId57cU.cjs.map +0 -1
  201. package/dist/Endpoint-BKR5QH6O.d.mts.map +0 -1
  202. package/dist/EndpointFactory-BejSTzbB.mjs.map +0 -1
  203. package/dist/EndpointFactory-DYoGLaIT.cjs.map +0 -1
  204. package/dist/functions-Cpff1uZH.mjs.map +0 -1
  205. package/dist/functions-DukjG8ov.cjs.map +0 -1
  206. package/dist/index-BTvozlUD.d.cts.map +0 -1
  207. package/dist/index-L7pz0R0T.d.mts.map +0 -1
  208. package/dist/lazyAccessors-DM6HcXQk.mjs.map +0 -1
  209. package/dist/lazyAccessors-DrJj8NpA.cjs.map +0 -1
  210. package/dist/publisher-CGEo8UKD.mjs +0 -41
  211. package/dist/publisher-CGEo8UKD.mjs.map +0 -1
  212. package/dist/publisher-CqGsXB2X.cjs +0 -53
  213. package/dist/publisher-CqGsXB2X.cjs.map +0 -1
  214. package/dist/subscribers/index.cjs.map +0 -1
  215. package/dist/subscribers/index.d.cts.map +0 -1
  216. package/dist/subscribers/index.d.mts.map +0 -1
  217. package/dist/subscribers/index.mjs.map +0 -1
  218. package/dist/topic/index.d.cts.map +0 -1
  219. package/dist/topic/index.d.mts.map +0 -1
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/subscribers/SubscriberBuilder.ts","../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["obj: any","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","constructs: string[]","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,cAQU,UAMR;CACD,oBAAoB;CAEpB,OAAO,aACNA,KACkD;AAClD,SAAO,QACN,OACC,IAAI,sBAAsB,QAC1B,IAAI,SAAS,cAAc,WAC5B;CACD;CAED,YACiBC,SAOSC,UAAkB,KACjCC,mBACeC,cACAC,WAAsB,CAAE,GACxBC,SAAkB,gBAClBC,kBAUTC,WAKhBC,aAAuB,CAAE,GACxB;AACD,QACC,cAAc,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,UAAmB;CAC3B,AAAQ;CACR,AAAQ;CAER,cAAc;AACb,OAAK,WAAW;CAChB;;;;;;;;;;;;CAaD,MACCC,OAQC;AACD,SAAO,UAAU,MAAM,EACtB,YAAY,MAAM,KAClB,EAAC;CAQF;CAED,QAAQC,SAAuB;AAC9B,SAAO,UAAU,MAAM,EAAE,UAAU,QAAS,EAAC;CAC7C;CAED,OACCC,QAQC;AACD,SAAO,UAAU,MAAM,EACtB,cAAc,OACd,EAAC;CACF;;;;;;;;;;;;CAaD,UACCC,YAQC;EAQD,MAAM,WAAW,WAAW,WAAW;AAEvC,SAAO,UAAU,MAAM;GACtB,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS;GAC3C,aAAa,MAAM,YAAY,KAAK,YAAY;EAChD,EAAC;CAQF;CAED,SACCC,UAQC;AACD,SAAO,UAAU,MAAM,EACtB,WAAW,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,EAC3C,EAAC;CACF;CAED,OACCC,QAQC;AACD,SAAO,UAAU,MAAM,EAAE,SAAS,OAA8B,EAAC;CACjE;CAED,UACCC,WAQC;AACD,SAAO,UAAU,MAAM,EAAE,YAAY,UAAkB,EAAC;CACxD;CAED,UAOCC,OAUC;EACD,MAAM,cAAc,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,KAAM;AAC1D,SAAO,UAAU,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 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/topic/TopicBuilder.ts","../../src/topic/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAUA;;AAEiB,cAFJ,YAEI,CAAA,cAAA,MAAA,GAAA,MAAA,EAAA,gBAAA,WAAA,GAAc,WAAd,CAAA,CAAA;EAAW,QAAG,KAAA;EAAW,QAMX,OAAA;EAAC;EAAiB,KAAE,CAAA,UAAA,MAAA,CAAA,CAAA,IAAA,EAApB,CAAoB,CAAA,EAAhB,YAAgB,CAAH,CAAG,EAAA,OAAA,CAAA;EAAO,MAAvB,CAAA,MAAA,EAOnB,MAPmB,CAAA,EAAA,IAAA;EAAY;;;;EAeO,MAAE,CAAA,UAAtC,WAAsC,CAAA,CAAA,MAAA,EAAjB,CAAiB,CAAA,EAAb,KAAa,CAAP,KAAO,EAAA,CAAA,CAAA;;AAAR;;;cCvBnC,GAAC,qBAAqB,WAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/topic/TopicBuilder.ts","../../src/topic/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAUA;;AAEiB,cAFJ,YAEI,CAAA,cAAA,MAAA,GAAA,MAAA,EAAA,gBAAA,WAAA,GAAc,WAAd,CAAA,CAAA;EAAW,QAAG,KAAA;EAAW,QAMX,OAAA;EAAC;EAAiB,KAAE,CAAA,UAAA,MAAA,CAAA,CAAA,IAAA,EAApB,CAAoB,CAAA,EAAhB,YAAgB,CAAH,CAAG,EAAA,OAAA,CAAA;EAAO,MAAvB,CAAA,MAAA,EAOnB,MAPmB,CAAA,EAAA,IAAA;EAAY;;;;EAeO,MAAE,CAAA,UAAtC,WAAsC,CAAA,CAAA,MAAA,EAAjB,CAAiB,CAAA,EAAb,KAAa,CAAP,KAAO,EAAA,CAAA,CAAA;;AAAR;;;cCvBnC,GAAC,qBAAqB,WAAA"}