@geekmidas/constructs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +614 -0
- package/dist/AWSLambdaFunction-CpHFE2m6.d.mts +27 -0
- package/dist/AWSLambdaFunction-CwagvPG3.d.cts +27 -0
- package/dist/AWSLambdaFunction-DWIZYsCy.mjs +79 -0
- package/dist/AWSLambdaFunction-DWIZYsCy.mjs.map +1 -0
- package/dist/AWSLambdaFunction-qA5LqPsv.cjs +85 -0
- package/dist/AWSLambdaFunction-qA5LqPsv.cjs.map +1 -0
- package/dist/AWSLambdaSubscriberAdaptor-C1wQuucQ.d.mts +32 -0
- package/dist/AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs +138 -0
- package/dist/AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs.map +1 -0
- package/dist/AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs +132 -0
- package/dist/AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs.map +1 -0
- package/dist/AWSLambdaSubscriberAdaptor-QKVxR6qh.d.cts +32 -0
- package/dist/AmazonApiGatewayEndpointAdaptor-BoBh7vvD.d.mts +61 -0
- package/dist/AmazonApiGatewayEndpointAdaptor-Cx1oqcqh.mjs +124 -0
- package/dist/AmazonApiGatewayEndpointAdaptor-Cx1oqcqh.mjs.map +1 -0
- package/dist/AmazonApiGatewayEndpointAdaptor-DtzgQ9Vb.d.cts +61 -0
- package/dist/AmazonApiGatewayEndpointAdaptor-i74DEUbc.cjs +130 -0
- package/dist/AmazonApiGatewayEndpointAdaptor-i74DEUbc.cjs.map +1 -0
- package/dist/AmazonApiGatewayV1EndpointAdaptor-CLmBDYsl.mjs +42 -0
- package/dist/AmazonApiGatewayV1EndpointAdaptor-CLmBDYsl.mjs.map +1 -0
- package/dist/AmazonApiGatewayV1EndpointAdaptor-EhMd1YqV.d.mts +21 -0
- package/dist/AmazonApiGatewayV1EndpointAdaptor-GkMAUPL5.cjs +47 -0
- package/dist/AmazonApiGatewayV1EndpointAdaptor-GkMAUPL5.cjs.map +1 -0
- package/dist/AmazonApiGatewayV1EndpointAdaptor-Gw-j61qM.d.cts +21 -0
- package/dist/AmazonApiGatewayV2EndpointAdaptor-3RqegmJC.mjs +41 -0
- package/dist/AmazonApiGatewayV2EndpointAdaptor-3RqegmJC.mjs.map +1 -0
- package/dist/AmazonApiGatewayV2EndpointAdaptor-LUlpwmUW.d.cts +21 -0
- package/dist/AmazonApiGatewayV2EndpointAdaptor-YlFoFSS9.cjs +46 -0
- package/dist/AmazonApiGatewayV2EndpointAdaptor-YlFoFSS9.cjs.map +1 -0
- package/dist/AmazonApiGatewayV2EndpointAdaptor-zfd1gqXA.d.mts +21 -0
- package/dist/BaseFunctionBuilder-5QCHkchp.d.cts +31 -0
- package/dist/BaseFunctionBuilder-BFPVGnKi.d.mts +31 -0
- package/dist/BaseFunctionBuilder-BPE9JBbT.mjs +56 -0
- package/dist/BaseFunctionBuilder-BPE9JBbT.mjs.map +1 -0
- package/dist/BaseFunctionBuilder-DtO4Nwxm.cjs +62 -0
- package/dist/BaseFunctionBuilder-DtO4Nwxm.cjs.map +1 -0
- package/dist/Construct-BSEs6uwW.cjs +75 -0
- package/dist/Construct-BSEs6uwW.cjs.map +1 -0
- package/dist/Construct-BbKCIPQm.mjs +63 -0
- package/dist/Construct-BbKCIPQm.mjs.map +1 -0
- package/dist/Construct-Bm-PSO2V.d.cts +42 -0
- package/dist/Construct-DIguIyw4.d.mts +42 -0
- package/dist/Construct.cjs +4 -0
- package/dist/Construct.d.cts +2 -0
- package/dist/Construct.d.mts +2 -0
- package/dist/Construct.mjs +3 -0
- package/dist/Cron-Bgs6EQOb.mjs +20 -0
- package/dist/Cron-Bgs6EQOb.mjs.map +1 -0
- package/dist/Cron-DQiCj3ef.cjs +25 -0
- package/dist/Cron-DQiCj3ef.cjs.map +1 -0
- package/dist/Cron-FpAw03k6.d.mts +25 -0
- package/dist/Cron-ztnK6zgU.d.cts +25 -0
- package/dist/CronBuilder-B2clNQSP.d.mts +24 -0
- package/dist/CronBuilder-Cje9K8lZ.d.cts +24 -0
- package/dist/CronBuilder-DIBqJkh_.cjs +60 -0
- package/dist/CronBuilder-DIBqJkh_.cjs.map +1 -0
- package/dist/CronBuilder-DecAvvcn.mjs +54 -0
- package/dist/CronBuilder-DecAvvcn.mjs.map +1 -0
- package/dist/Endpoint-BaHC9y4Z.cjs +291 -0
- package/dist/Endpoint-BaHC9y4Z.cjs.map +1 -0
- package/dist/Endpoint-C7z9YJHK.d.cts +405 -0
- package/dist/Endpoint-DCn53Vd8.d.mts +405 -0
- package/dist/Endpoint-ierdM62O.mjs +279 -0
- package/dist/Endpoint-ierdM62O.mjs.map +1 -0
- package/dist/EndpointBuilder-BHFSpbPR.cjs +107 -0
- package/dist/EndpointBuilder-BHFSpbPR.cjs.map +1 -0
- package/dist/EndpointBuilder-BLUsoK3l.mjs +101 -0
- package/dist/EndpointBuilder-BLUsoK3l.mjs.map +1 -0
- package/dist/EndpointBuilder-Bfnb2oJr.d.mts +49 -0
- package/dist/EndpointBuilder-CP9RGwZH.d.cts +49 -0
- package/dist/EndpointFactory-BYdDVCNj.mjs +127 -0
- package/dist/EndpointFactory-BYdDVCNj.mjs.map +1 -0
- package/dist/EndpointFactory-CNtMXgIh.d.mts +52 -0
- package/dist/EndpointFactory-CXX4E6Gx.cjs +139 -0
- package/dist/EndpointFactory-CXX4E6Gx.cjs.map +1 -0
- package/dist/EndpointFactory-D2zgWbXZ.d.cts +52 -0
- package/dist/Function-BP58p9Mp.d.cts +59 -0
- package/dist/Function-BsBxc2wA.d.mts +59 -0
- package/dist/Function-C5mW-38v.mjs +72 -0
- package/dist/Function-C5mW-38v.mjs.map +1 -0
- package/dist/Function-CbO2NZx-.cjs +84 -0
- package/dist/Function-CbO2NZx-.cjs.map +1 -0
- package/dist/FunctionBuilder-BS1KgxA_.d.cts +24 -0
- package/dist/FunctionBuilder-C-PfPN3r.d.mts +24 -0
- package/dist/FunctionBuilder-CosgPmMl.mjs +53 -0
- package/dist/FunctionBuilder-CosgPmMl.mjs.map +1 -0
- package/dist/FunctionBuilder-DuOeWCAl.cjs +59 -0
- package/dist/FunctionBuilder-DuOeWCAl.cjs.map +1 -0
- package/dist/FunctionExecutionWrapper-Bx-Dl-2a.d.cts +24 -0
- package/dist/FunctionExecutionWrapper-CElXEjPe.cjs +42 -0
- package/dist/FunctionExecutionWrapper-CElXEjPe.cjs.map +1 -0
- package/dist/FunctionExecutionWrapper-DvglBBjE.d.mts +24 -0
- package/dist/FunctionExecutionWrapper-XGrSAAPD.mjs +36 -0
- package/dist/FunctionExecutionWrapper-XGrSAAPD.mjs.map +1 -0
- package/dist/HonoEndpointAdaptor-B0IO1zj2.d.mts +41 -0
- package/dist/HonoEndpointAdaptor-B4snrp7v.cjs +154 -0
- package/dist/HonoEndpointAdaptor-B4snrp7v.cjs.map +1 -0
- package/dist/HonoEndpointAdaptor-B6lW9Q1k.d.cts +41 -0
- package/dist/HonoEndpointAdaptor-D-M4-6Tf.mjs +148 -0
- package/dist/HonoEndpointAdaptor-D-M4-6Tf.mjs.map +1 -0
- package/dist/Subscriber-BoFm12i_.d.cts +33 -0
- package/dist/Subscriber-BwuCaC9G.mjs +28 -0
- package/dist/Subscriber-BwuCaC9G.mjs.map +1 -0
- package/dist/Subscriber-THGsj7Iy.d.mts +33 -0
- package/dist/Subscriber-iMRFG7ba.cjs +34 -0
- package/dist/Subscriber-iMRFG7ba.cjs.map +1 -0
- package/dist/SubscriberBuilder-CiPxgnKT.d.mts +26 -0
- package/dist/SubscriberBuilder-Dhz0C_t-.mjs +54 -0
- package/dist/SubscriberBuilder-Dhz0C_t-.mjs.map +1 -0
- package/dist/SubscriberBuilder-DuIgxuzc.d.cts +26 -0
- package/dist/SubscriberBuilder-wthr-FL9.cjs +60 -0
- package/dist/SubscriberBuilder-wthr-FL9.cjs.map +1 -0
- package/dist/adaptors/aws.cjs +19 -0
- package/dist/adaptors/aws.d.cts +15 -0
- package/dist/adaptors/aws.d.mts +15 -0
- package/dist/adaptors/aws.mjs +16 -0
- package/dist/adaptors/hono.cjs +12 -0
- package/dist/adaptors/hono.d.cts +9 -0
- package/dist/adaptors/hono.d.mts +9 -0
- package/dist/adaptors/hono.mjs +12 -0
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/crons/Cron.cjs +8 -0
- package/dist/crons/Cron.d.cts +7 -0
- package/dist/crons/Cron.d.mts +7 -0
- package/dist/crons/Cron.mjs +8 -0
- package/dist/crons/CronBuilder.cjs +9 -0
- package/dist/crons/CronBuilder.d.cts +8 -0
- package/dist/crons/CronBuilder.d.mts +8 -0
- package/dist/crons/CronBuilder.mjs +9 -0
- package/dist/crons/index.cjs +16 -0
- package/dist/crons/index.cjs.map +1 -0
- package/dist/crons/index.d.cts +16 -0
- package/dist/crons/index.d.mts +16 -0
- package/dist/crons/index.mjs +14 -0
- package/dist/crons/index.mjs.map +1 -0
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +10 -0
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +9 -0
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -0
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +10 -0
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +12 -0
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +10 -0
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -0
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +12 -0
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +12 -0
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +10 -0
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -0
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +12 -0
- package/dist/endpoints/Endpoint.cjs +9 -0
- package/dist/endpoints/Endpoint.d.cts +8 -0
- package/dist/endpoints/Endpoint.d.mts +8 -0
- package/dist/endpoints/Endpoint.mjs +8 -0
- package/dist/endpoints/EndpointBuilder.cjs +9 -0
- package/dist/endpoints/EndpointBuilder.d.cts +9 -0
- package/dist/endpoints/EndpointBuilder.d.mts +9 -0
- package/dist/endpoints/EndpointBuilder.mjs +9 -0
- package/dist/endpoints/EndpointFactory.cjs +11 -0
- package/dist/endpoints/EndpointFactory.d.cts +10 -0
- package/dist/endpoints/EndpointFactory.d.mts +10 -0
- package/dist/endpoints/EndpointFactory.mjs +10 -0
- package/dist/endpoints/HonoEndpointAdaptor.cjs +12 -0
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +9 -0
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -0
- package/dist/endpoints/HonoEndpointAdaptor.mjs +12 -0
- package/dist/endpoints/TestEndpointAdaptor.cjs +54 -0
- package/dist/endpoints/TestEndpointAdaptor.cjs.map +1 -0
- package/dist/endpoints/TestEndpointAdaptor.d.cts +29 -0
- package/dist/endpoints/TestEndpointAdaptor.d.mts +29 -0
- package/dist/endpoints/TestEndpointAdaptor.mjs +53 -0
- package/dist/endpoints/TestEndpointAdaptor.mjs.map +1 -0
- package/dist/endpoints/helpers.cjs +10 -0
- package/dist/endpoints/helpers.d.cts +58 -0
- package/dist/endpoints/helpers.d.mts +58 -0
- package/dist/endpoints/helpers.mjs +9 -0
- package/dist/endpoints/index.cjs +16 -0
- package/dist/endpoints/index.cjs.map +1 -0
- package/dist/endpoints/index.d.cts +16 -0
- package/dist/endpoints/index.d.mts +16 -0
- package/dist/endpoints/index.mjs +15 -0
- package/dist/endpoints/index.mjs.map +1 -0
- package/dist/endpoints/parseHonoQuery.cjs +3 -0
- package/dist/endpoints/parseHonoQuery.d.cts +12 -0
- package/dist/endpoints/parseHonoQuery.d.mts +12 -0
- package/dist/endpoints/parseHonoQuery.mjs +3 -0
- package/dist/endpoints/parseQueryParams.cjs +3 -0
- package/dist/endpoints/parseQueryParams.d.cts +13 -0
- package/dist/endpoints/parseQueryParams.d.mts +13 -0
- package/dist/endpoints/parseQueryParams.mjs +3 -0
- package/dist/functions/AWSLambdaFunction.cjs +9 -0
- package/dist/functions/AWSLambdaFunction.d.cts +5 -0
- package/dist/functions/AWSLambdaFunction.d.mts +5 -0
- package/dist/functions/AWSLambdaFunction.mjs +9 -0
- package/dist/functions/BaseFunctionBuilder.cjs +4 -0
- package/dist/functions/BaseFunctionBuilder.d.cts +3 -0
- package/dist/functions/BaseFunctionBuilder.d.mts +3 -0
- package/dist/functions/BaseFunctionBuilder.mjs +4 -0
- package/dist/functions/Function.cjs +5 -0
- package/dist/functions/Function.d.cts +3 -0
- package/dist/functions/Function.d.mts +3 -0
- package/dist/functions/Function.mjs +4 -0
- package/dist/functions/FunctionBuilder.cjs +6 -0
- package/dist/functions/FunctionBuilder.d.cts +5 -0
- package/dist/functions/FunctionBuilder.d.mts +5 -0
- package/dist/functions/FunctionBuilder.mjs +6 -0
- package/dist/functions/FunctionExecutionWrapper.cjs +8 -0
- package/dist/functions/FunctionExecutionWrapper.d.cts +4 -0
- package/dist/functions/FunctionExecutionWrapper.d.mts +4 -0
- package/dist/functions/FunctionExecutionWrapper.mjs +8 -0
- package/dist/functions/TestFunctionAdaptor.cjs +38 -0
- package/dist/functions/TestFunctionAdaptor.cjs.map +1 -0
- package/dist/functions/TestFunctionAdaptor.d.cts +26 -0
- package/dist/functions/TestFunctionAdaptor.d.mts +26 -0
- package/dist/functions/TestFunctionAdaptor.mjs +37 -0
- package/dist/functions/TestFunctionAdaptor.mjs.map +1 -0
- package/dist/functions/index.cjs +10 -0
- package/dist/functions/index.d.cts +6 -0
- package/dist/functions/index.d.mts +6 -0
- package/dist/functions/index.mjs +7 -0
- package/dist/functions-DVDb5wEA.cjs +13 -0
- package/dist/functions-DVDb5wEA.cjs.map +1 -0
- package/dist/functions-mM-jcphA.mjs +8 -0
- package/dist/functions-mM-jcphA.mjs.map +1 -0
- package/dist/helpers-BeGM4pP_.cjs +95 -0
- package/dist/helpers-BeGM4pP_.cjs.map +1 -0
- package/dist/helpers-DbpO95aE.mjs +83 -0
- package/dist/helpers-DbpO95aE.mjs.map +1 -0
- package/dist/index-CuGR4L7O.d.mts +9 -0
- package/dist/index-Fg3N3EKD.d.cts +9 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.cts +4 -0
- package/dist/index.d.mts +4 -0
- package/dist/index.mjs +3 -0
- package/dist/parseHonoQuery-DopC24vB.cjs +37 -0
- package/dist/parseHonoQuery-DopC24vB.cjs.map +1 -0
- package/dist/parseHonoQuery-znDKBhdE.mjs +31 -0
- package/dist/parseHonoQuery-znDKBhdE.mjs.map +1 -0
- package/dist/parseQueryParams-BJaRh3OB.mjs +32 -0
- package/dist/parseQueryParams-BJaRh3OB.mjs.map +1 -0
- package/dist/parseQueryParams-BzPop4I1.cjs +38 -0
- package/dist/parseQueryParams-BzPop4I1.cjs.map +1 -0
- package/dist/publisher-Bw4770Hi.mjs +41 -0
- package/dist/publisher-Bw4770Hi.mjs.map +1 -0
- package/dist/publisher-lFQleddL.cjs +53 -0
- package/dist/publisher-lFQleddL.cjs.map +1 -0
- package/dist/publisher.cjs +4 -0
- package/dist/publisher.d.cts +13 -0
- package/dist/publisher.d.mts +13 -0
- package/dist/publisher.mjs +3 -0
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +3 -0
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +4 -0
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +4 -0
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +3 -0
- package/dist/subscribers/Subscriber.cjs +4 -0
- package/dist/subscribers/Subscriber.d.cts +3 -0
- package/dist/subscribers/Subscriber.d.mts +3 -0
- package/dist/subscribers/Subscriber.mjs +4 -0
- package/dist/subscribers/SubscriberBuilder.cjs +5 -0
- package/dist/subscribers/SubscriberBuilder.d.cts +4 -0
- package/dist/subscribers/SubscriberBuilder.d.mts +4 -0
- package/dist/subscribers/SubscriberBuilder.mjs +5 -0
- package/dist/subscribers/index.cjs +12 -0
- package/dist/subscribers/index.cjs.map +1 -0
- package/dist/subscribers/index.d.cts +10 -0
- package/dist/subscribers/index.d.mts +10 -0
- package/dist/subscribers/index.mjs +10 -0
- package/dist/subscribers/index.mjs.map +1 -0
- package/dist/types-Bp9ysFXd.d.cts +7 -0
- package/dist/types-DBKNYvsW.d.mts +7 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.cts +2 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.mjs +0 -0
- package/package.json +91 -0
- package/src/Construct.ts +98 -0
- package/src/__tests__/Construct.environment.spec.ts +360 -0
- package/src/__tests__/publisher.setting.spec.ts +511 -0
- package/src/__tests__/publisher.spec.ts +454 -0
- package/src/adaptors/aws.ts +4 -0
- package/src/adaptors/hono.ts +1 -0
- package/src/crons/Cron.ts +137 -0
- package/src/crons/CronBuilder.ts +192 -0
- package/src/crons/__tests__/Cron.spec.ts +464 -0
- package/src/crons/index.ts +11 -0
- package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +315 -0
- package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +101 -0
- package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +95 -0
- package/src/endpoints/Endpoint.ts +771 -0
- package/src/endpoints/EndpointBuilder.ts +308 -0
- package/src/endpoints/EndpointFactory.ts +329 -0
- package/src/endpoints/HonoEndpointAdaptor.ts +365 -0
- package/src/endpoints/TestEndpointAdaptor.ts +130 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +553 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +927 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +721 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.factory-publisher.spec.ts +296 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +441 -0
- package/src/endpoints/__tests__/Endpoint.spec.ts +800 -0
- package/src/endpoints/__tests__/EndpointBuilder.spec.ts +488 -0
- package/src/endpoints/__tests__/EndpointFactory.spec.ts +479 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +569 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +313 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +1078 -0
- package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +236 -0
- package/src/endpoints/__tests__/__snapshots__/HonoEndpointAdaptor.spec.ts.snap +54 -0
- package/src/endpoints/__tests__/endpoint-types.test.ts +88 -0
- package/src/endpoints/helpers.ts +99 -0
- package/src/endpoints/index.ts +5 -0
- package/src/endpoints/parseHonoQuery.ts +51 -0
- package/src/endpoints/parseQueryParams.ts +51 -0
- package/src/functions/AWSLambdaFunction.ts +222 -0
- package/src/functions/BaseFunctionBuilder.ts +110 -0
- package/src/functions/Function.ts +160 -0
- package/src/functions/FunctionBuilder.ts +182 -0
- package/src/functions/FunctionExecutionWrapper.ts +86 -0
- package/src/functions/TestFunctionAdaptor.ts +125 -0
- package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +376 -0
- package/src/functions/__tests__/Function.spec.ts +402 -0
- package/src/functions/__tests__/TestFunctionAdaptor.spec.ts +398 -0
- package/src/functions/index.ts +10 -0
- package/src/index.ts +14 -0
- package/src/publisher.ts +83 -0
- package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +269 -0
- package/src/subscribers/Subscriber.ts +112 -0
- package/src/subscribers/SubscriberBuilder.ts +150 -0
- package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +623 -0
- package/src/subscribers/__tests__/Subscriber.spec.ts +432 -0
- package/src/subscribers/index.ts +5 -0
- package/src/types.ts +13 -0
- package/tsdown.config.ts +3 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { EnvironmentParser } from '@geekmidas/envkit';
|
|
2
|
+
import type { EventPublisher } from '@geekmidas/events';
|
|
3
|
+
import type { Logger } from '@geekmidas/logger';
|
|
4
|
+
import type {
|
|
5
|
+
ComposableStandardSchema,
|
|
6
|
+
InferComposableStandardSchema,
|
|
7
|
+
InferStandardSchema,
|
|
8
|
+
} from '@geekmidas/schema';
|
|
9
|
+
import {
|
|
10
|
+
type Service,
|
|
11
|
+
ServiceDiscovery,
|
|
12
|
+
type ServiceRecord,
|
|
13
|
+
} from '@geekmidas/services';
|
|
14
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
15
|
+
import { publishEvents } from '../publisher';
|
|
16
|
+
import type { Function, FunctionHandler } from './Function';
|
|
17
|
+
import { FunctionBuilder } from './FunctionBuilder';
|
|
18
|
+
|
|
19
|
+
export abstract class FunctionExecutionWrapper<
|
|
20
|
+
TInput extends ComposableStandardSchema | undefined = undefined,
|
|
21
|
+
TOutSchema extends StandardSchemaV1 | undefined = undefined,
|
|
22
|
+
TServices extends Service[] = [],
|
|
23
|
+
TLogger extends Logger = Logger,
|
|
24
|
+
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
25
|
+
TEventPublisherServiceName extends string = string,
|
|
26
|
+
> {
|
|
27
|
+
constructor(
|
|
28
|
+
protected envParser: EnvironmentParser<{}>,
|
|
29
|
+
protected readonly fn: Function<
|
|
30
|
+
TInput,
|
|
31
|
+
TServices,
|
|
32
|
+
TLogger,
|
|
33
|
+
TOutSchema,
|
|
34
|
+
FunctionHandler<TInput, TServices, TLogger, TOutSchema>,
|
|
35
|
+
TEventPublisher,
|
|
36
|
+
TEventPublisherServiceName
|
|
37
|
+
>,
|
|
38
|
+
) {}
|
|
39
|
+
|
|
40
|
+
protected _logger?: TLogger;
|
|
41
|
+
|
|
42
|
+
get logger(): TLogger {
|
|
43
|
+
return this._logger || this.fn.logger;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {
|
|
47
|
+
const serviceDiscovery = ServiceDiscovery.getInstance<
|
|
48
|
+
ServiceRecord<TServices>,
|
|
49
|
+
TLogger
|
|
50
|
+
>(this.logger, this.envParser);
|
|
51
|
+
|
|
52
|
+
return serviceDiscovery;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
getServices(): Promise<ServiceRecord<TServices>> {
|
|
56
|
+
return this.serviceDiscovery.register(this.fn.services);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async getFunctionInput<TEvent>(
|
|
60
|
+
event: TEvent,
|
|
61
|
+
): Promise<InferComposableStandardSchema<TInput>> {
|
|
62
|
+
const parsedInput = await FunctionBuilder.parseComposableStandardSchema(
|
|
63
|
+
event,
|
|
64
|
+
this.fn.input,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
return parsedInput as InferComposableStandardSchema<TInput>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async publishEvents(response: InferStandardSchema<TOutSchema>) {
|
|
71
|
+
await publishEvents(
|
|
72
|
+
this.logger,
|
|
73
|
+
this.serviceDiscovery,
|
|
74
|
+
this.fn.events,
|
|
75
|
+
response,
|
|
76
|
+
this.fn.publisherService,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async parseComposableStandardSchema<T extends ComposableStandardSchema>(
|
|
81
|
+
data: unknown,
|
|
82
|
+
schema: T,
|
|
83
|
+
): Promise<InferComposableStandardSchema<T>> {
|
|
84
|
+
return FunctionBuilder.parseComposableStandardSchema(data, schema);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
2
|
+
import type { EventPublisher } from '@geekmidas/events';
|
|
3
|
+
import type { Logger } from '@geekmidas/logger';
|
|
4
|
+
import type {
|
|
5
|
+
ComposableStandardSchema,
|
|
6
|
+
InferComposableStandardSchema,
|
|
7
|
+
InferStandardSchema,
|
|
8
|
+
} from '@geekmidas/schema';
|
|
9
|
+
import {
|
|
10
|
+
type Service,
|
|
11
|
+
ServiceDiscovery,
|
|
12
|
+
type ServiceRecord,
|
|
13
|
+
} from '@geekmidas/services';
|
|
14
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
15
|
+
import { publishEvents } from '../publisher';
|
|
16
|
+
import type { Function } from './Function';
|
|
17
|
+
import { FunctionBuilder } from './FunctionBuilder';
|
|
18
|
+
|
|
19
|
+
export class TestFunctionAdaptor<
|
|
20
|
+
TInput extends StandardSchemaV1 | undefined = undefined,
|
|
21
|
+
TOutSchema extends StandardSchemaV1 | undefined = undefined,
|
|
22
|
+
TServices extends Service[] = [],
|
|
23
|
+
TLogger extends Logger = Logger,
|
|
24
|
+
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
25
|
+
TEventPublisherServiceName extends string = string,
|
|
26
|
+
> {
|
|
27
|
+
static getDefaultServiceDiscovery<
|
|
28
|
+
TInput extends ComposableStandardSchema | undefined = undefined,
|
|
29
|
+
TOutSchema extends StandardSchemaV1 | undefined = undefined,
|
|
30
|
+
TServices extends Service[] = [],
|
|
31
|
+
TLogger extends Logger = Logger,
|
|
32
|
+
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
33
|
+
TEventPublisherServiceName extends string = string,
|
|
34
|
+
>(
|
|
35
|
+
fn: Function<
|
|
36
|
+
TInput,
|
|
37
|
+
TServices,
|
|
38
|
+
TLogger,
|
|
39
|
+
TOutSchema,
|
|
40
|
+
any,
|
|
41
|
+
TEventPublisher,
|
|
42
|
+
TEventPublisherServiceName
|
|
43
|
+
>,
|
|
44
|
+
) {
|
|
45
|
+
return ServiceDiscovery.getInstance(fn.logger, new EnvironmentParser({}));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
constructor(
|
|
49
|
+
private readonly fn: Function<
|
|
50
|
+
TInput,
|
|
51
|
+
TServices,
|
|
52
|
+
TLogger,
|
|
53
|
+
TOutSchema,
|
|
54
|
+
any,
|
|
55
|
+
TEventPublisher,
|
|
56
|
+
TEventPublisherServiceName
|
|
57
|
+
>,
|
|
58
|
+
private serviceDiscovery: ServiceDiscovery<
|
|
59
|
+
any,
|
|
60
|
+
any
|
|
61
|
+
> = TestFunctionAdaptor.getDefaultServiceDiscovery(fn),
|
|
62
|
+
) {}
|
|
63
|
+
|
|
64
|
+
async invoke(
|
|
65
|
+
ctx: TestFunctionRequest<
|
|
66
|
+
TInput,
|
|
67
|
+
TServices,
|
|
68
|
+
TEventPublisher,
|
|
69
|
+
TEventPublisherServiceName
|
|
70
|
+
>,
|
|
71
|
+
): Promise<InferStandardSchema<TOutSchema>> {
|
|
72
|
+
// Parse input if schema is provided
|
|
73
|
+
|
|
74
|
+
const parsedInput = await FunctionBuilder.parseComposableStandardSchema(
|
|
75
|
+
ctx.input,
|
|
76
|
+
this.fn.input,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
// Create logger with context
|
|
80
|
+
const logger = this.fn.logger.child({
|
|
81
|
+
test: true,
|
|
82
|
+
}) as TLogger;
|
|
83
|
+
|
|
84
|
+
// Register services (use provided services or register from function)
|
|
85
|
+
let services: ServiceRecord<TServices>;
|
|
86
|
+
if (ctx.services) {
|
|
87
|
+
services = ctx.services;
|
|
88
|
+
} else {
|
|
89
|
+
services = await this.serviceDiscovery.register(this.fn.services);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Execute the function
|
|
93
|
+
const response = await this.fn['fn']({
|
|
94
|
+
input: parsedInput,
|
|
95
|
+
services,
|
|
96
|
+
logger,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Parse output if schema is provided
|
|
100
|
+
const output = await this.fn.parseOutput(response);
|
|
101
|
+
|
|
102
|
+
// Register publisher service if provided in context
|
|
103
|
+
|
|
104
|
+
await publishEvents(
|
|
105
|
+
logger,
|
|
106
|
+
this.serviceDiscovery,
|
|
107
|
+
this.fn.events,
|
|
108
|
+
output,
|
|
109
|
+
this.fn.publisherService,
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
return output;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export type TestFunctionRequest<
|
|
117
|
+
TInput extends StandardSchemaV1 | undefined = undefined,
|
|
118
|
+
TServices extends Service[] = [],
|
|
119
|
+
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
120
|
+
TEventPublisherServiceName extends string = string,
|
|
121
|
+
> = {
|
|
122
|
+
input: InferComposableStandardSchema<TInput>;
|
|
123
|
+
services: ServiceRecord<TServices>;
|
|
124
|
+
publisher?: Service<TEventPublisherServiceName, TEventPublisher>;
|
|
125
|
+
} & InferComposableStandardSchema<{ input: TInput }>;
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
2
|
+
import type { EventPublisher, PublishableMessage } from '@geekmidas/events';
|
|
3
|
+
import { ConsoleLogger } from '@geekmidas/logger/console';
|
|
4
|
+
import type { Service } from '@geekmidas/services';
|
|
5
|
+
import type { Context } from 'aws-lambda';
|
|
6
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
7
|
+
import { z } from 'zod/v4';
|
|
8
|
+
import { AWSLambdaFunction } from '../AWSLambdaFunction';
|
|
9
|
+
import { Function } from '../Function';
|
|
10
|
+
|
|
11
|
+
// Mock services
|
|
12
|
+
class TestService implements Service<'TestService', TestService> {
|
|
13
|
+
serviceName = 'TestService' as const;
|
|
14
|
+
static serviceName = 'TestService';
|
|
15
|
+
|
|
16
|
+
async register() {
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getValue() {
|
|
21
|
+
return 'test-value';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Mock event publisher
|
|
26
|
+
type TestEvent = PublishableMessage<'test.event', { data: string }>;
|
|
27
|
+
|
|
28
|
+
class TestPublisher implements EventPublisher<TestEvent> {
|
|
29
|
+
publishedEvents: TestEvent[] = [];
|
|
30
|
+
|
|
31
|
+
async publish(events: TestEvent[]): Promise<void> {
|
|
32
|
+
this.publishedEvents.push(...events);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class TestPublisherService
|
|
37
|
+
implements Service<'TestPublisherService', TestPublisher>
|
|
38
|
+
{
|
|
39
|
+
serviceName = 'TestPublisherService' as const;
|
|
40
|
+
static serviceName = 'TestPublisherService';
|
|
41
|
+
publisher = new TestPublisher();
|
|
42
|
+
|
|
43
|
+
async register() {
|
|
44
|
+
return this.publisher;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Mock Lambda context
|
|
49
|
+
const createMockContext = (): Context => ({
|
|
50
|
+
functionName: 'test-function',
|
|
51
|
+
functionVersion: '1',
|
|
52
|
+
invokedFunctionArn: 'arn:aws:lambda:region:account:function:test-function',
|
|
53
|
+
memoryLimitInMB: '128',
|
|
54
|
+
awsRequestId: 'test-request-id',
|
|
55
|
+
logGroupName: '/aws/lambda/test-function',
|
|
56
|
+
logStreamName: '2023/01/01/[$LATEST]test-stream',
|
|
57
|
+
getRemainingTimeInMillis: () => 30000,
|
|
58
|
+
done: vi.fn(),
|
|
59
|
+
fail: vi.fn(),
|
|
60
|
+
succeed: vi.fn(),
|
|
61
|
+
callbackWaitsForEmptyEventLoop: true,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe('AWSLambdaFunction', () => {
|
|
65
|
+
let envParser: EnvironmentParser<{}>;
|
|
66
|
+
let logger: ConsoleLogger;
|
|
67
|
+
|
|
68
|
+
beforeEach(() => {
|
|
69
|
+
envParser = new EnvironmentParser({});
|
|
70
|
+
logger = new ConsoleLogger();
|
|
71
|
+
vi.clearAllMocks();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('basic function execution', () => {
|
|
75
|
+
it('should execute a simple function without input/output schemas', async () => {
|
|
76
|
+
const fn = new Function(async ({ input }) => {
|
|
77
|
+
return { message: `Hello ` };
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
81
|
+
const handler = adaptor.handler;
|
|
82
|
+
|
|
83
|
+
const result = await handler(
|
|
84
|
+
{ name: 'World' },
|
|
85
|
+
createMockContext(),
|
|
86
|
+
vi.fn(),
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
expect(result).toBeUndefined();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should execute a function with input schema validation', async () => {
|
|
93
|
+
const inputSchema = { name: z.string() };
|
|
94
|
+
const outputSchema = z.object({ message: z.string() });
|
|
95
|
+
const handler = vi.fn(async ({ input }) => ({
|
|
96
|
+
message: `Hello ${input.name}`,
|
|
97
|
+
}));
|
|
98
|
+
|
|
99
|
+
const fn = new Function(
|
|
100
|
+
handler,
|
|
101
|
+
undefined,
|
|
102
|
+
undefined,
|
|
103
|
+
inputSchema,
|
|
104
|
+
outputSchema,
|
|
105
|
+
[],
|
|
106
|
+
logger,
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
110
|
+
const lambdaHandler = adaptor.handler;
|
|
111
|
+
|
|
112
|
+
const result = await lambdaHandler(
|
|
113
|
+
{ name: 'TypeScript' },
|
|
114
|
+
createMockContext(),
|
|
115
|
+
vi.fn(),
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
expect(result).toEqual({ message: 'Hello TypeScript' });
|
|
119
|
+
expect(handler).toHaveBeenCalledWith(
|
|
120
|
+
expect.objectContaining({
|
|
121
|
+
input: { name: 'TypeScript' },
|
|
122
|
+
}),
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should fail with invalid input', async () => {
|
|
127
|
+
const inputSchema = { age: z.number() };
|
|
128
|
+
const fn = new Function(
|
|
129
|
+
async () => ({ success: true }),
|
|
130
|
+
undefined,
|
|
131
|
+
undefined,
|
|
132
|
+
inputSchema,
|
|
133
|
+
undefined,
|
|
134
|
+
[],
|
|
135
|
+
logger,
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
139
|
+
const handler = adaptor.handler;
|
|
140
|
+
|
|
141
|
+
await expect(
|
|
142
|
+
handler({ age: 'not a number' }, createMockContext(), vi.fn()),
|
|
143
|
+
).rejects.toThrow();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('should validate output schema', async () => {
|
|
147
|
+
const outputSchema = z.object({
|
|
148
|
+
id: z.string(),
|
|
149
|
+
timestamp: z.number(),
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const fn = new Function(
|
|
153
|
+
async () => ({
|
|
154
|
+
id: '123',
|
|
155
|
+
timestamp: Date.now(),
|
|
156
|
+
}),
|
|
157
|
+
undefined,
|
|
158
|
+
undefined,
|
|
159
|
+
undefined,
|
|
160
|
+
outputSchema,
|
|
161
|
+
[],
|
|
162
|
+
logger,
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
166
|
+
const handler = adaptor.handler;
|
|
167
|
+
|
|
168
|
+
const result = await handler({}, createMockContext(), vi.fn());
|
|
169
|
+
|
|
170
|
+
expect(result).toMatchObject({
|
|
171
|
+
id: '123',
|
|
172
|
+
timestamp: expect.any(Number),
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should fail with invalid output', async () => {
|
|
177
|
+
const outputSchema = z.object({
|
|
178
|
+
id: z.string(),
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const fn = new Function(
|
|
182
|
+
// @ts-ignore
|
|
183
|
+
async () => ({
|
|
184
|
+
id: 123, // Invalid type, should be string
|
|
185
|
+
}),
|
|
186
|
+
undefined,
|
|
187
|
+
undefined,
|
|
188
|
+
undefined,
|
|
189
|
+
outputSchema,
|
|
190
|
+
[],
|
|
191
|
+
logger,
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
195
|
+
const handler = adaptor.handler;
|
|
196
|
+
|
|
197
|
+
await expect(handler({}, createMockContext(), vi.fn())).rejects.toThrow();
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
describe('services', () => {
|
|
202
|
+
it('should inject services into function context', async () => {
|
|
203
|
+
const service = new TestService();
|
|
204
|
+
const handler = vi.fn(async ({ services }) => ({
|
|
205
|
+
value: services.TestService.getValue(),
|
|
206
|
+
}));
|
|
207
|
+
|
|
208
|
+
const schema = z.object({ value: z.string() });
|
|
209
|
+
const fn = new Function(
|
|
210
|
+
handler,
|
|
211
|
+
undefined,
|
|
212
|
+
undefined,
|
|
213
|
+
undefined,
|
|
214
|
+
schema,
|
|
215
|
+
[service],
|
|
216
|
+
logger,
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
220
|
+
const lambdaHandler = adaptor.handler;
|
|
221
|
+
|
|
222
|
+
const result = await lambdaHandler({}, createMockContext(), vi.fn());
|
|
223
|
+
|
|
224
|
+
expect(result).toEqual({ value: 'test-value' });
|
|
225
|
+
expect(handler).toHaveBeenCalledWith(
|
|
226
|
+
expect.objectContaining({
|
|
227
|
+
services: expect.objectContaining({
|
|
228
|
+
TestService: expect.any(TestService),
|
|
229
|
+
}),
|
|
230
|
+
}),
|
|
231
|
+
);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
describe('logging', () => {
|
|
236
|
+
it('should create child logger with Lambda context', async () => {
|
|
237
|
+
const mockLogger = {
|
|
238
|
+
child: vi.fn().mockReturnThis(),
|
|
239
|
+
info: vi.fn(),
|
|
240
|
+
error: vi.fn(),
|
|
241
|
+
warn: vi.fn(),
|
|
242
|
+
debug: vi.fn(),
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
const fn = new Function(
|
|
246
|
+
async ({ logger }) => {
|
|
247
|
+
logger.info('Function executed');
|
|
248
|
+
return { success: true };
|
|
249
|
+
},
|
|
250
|
+
undefined,
|
|
251
|
+
undefined,
|
|
252
|
+
undefined,
|
|
253
|
+
undefined,
|
|
254
|
+
[],
|
|
255
|
+
mockLogger as any,
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
259
|
+
const handler = adaptor.handler;
|
|
260
|
+
|
|
261
|
+
const context = createMockContext();
|
|
262
|
+
await handler({}, context, vi.fn());
|
|
263
|
+
|
|
264
|
+
expect(mockLogger.child).toHaveBeenCalledWith({
|
|
265
|
+
fn: {
|
|
266
|
+
name: 'test-function',
|
|
267
|
+
version: '1',
|
|
268
|
+
memory: '128',
|
|
269
|
+
},
|
|
270
|
+
req: {
|
|
271
|
+
id: 'test-request-id',
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
expect(mockLogger.info).toHaveBeenCalledWith('Function executed');
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
describe('error handling', () => {
|
|
279
|
+
it('should wrap and log errors', async () => {
|
|
280
|
+
const mockLogger = {
|
|
281
|
+
child: vi.fn().mockReturnThis(),
|
|
282
|
+
error: vi.fn(),
|
|
283
|
+
info: vi.fn(),
|
|
284
|
+
warn: vi.fn(),
|
|
285
|
+
debug: vi.fn(),
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
const fn = new Function(
|
|
289
|
+
async () => {
|
|
290
|
+
throw new Error('Function failed');
|
|
291
|
+
},
|
|
292
|
+
undefined,
|
|
293
|
+
undefined,
|
|
294
|
+
undefined,
|
|
295
|
+
undefined,
|
|
296
|
+
[],
|
|
297
|
+
mockLogger as any,
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
301
|
+
const handler = adaptor.handler;
|
|
302
|
+
|
|
303
|
+
await expect(handler({}, createMockContext(), vi.fn())).rejects.toThrow();
|
|
304
|
+
|
|
305
|
+
expect(mockLogger.error).toHaveBeenCalledWith(
|
|
306
|
+
expect.any(Error),
|
|
307
|
+
'Error processing function',
|
|
308
|
+
);
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
describe('events', () => {
|
|
313
|
+
it('should publish events after successful execution', async () => {
|
|
314
|
+
const publisherService = new TestPublisherService();
|
|
315
|
+
|
|
316
|
+
const fn = new Function(
|
|
317
|
+
async () => ({ id: '123' }),
|
|
318
|
+
undefined,
|
|
319
|
+
undefined,
|
|
320
|
+
undefined,
|
|
321
|
+
z.object({ id: z.string() }),
|
|
322
|
+
[],
|
|
323
|
+
logger,
|
|
324
|
+
publisherService,
|
|
325
|
+
[
|
|
326
|
+
{
|
|
327
|
+
type: 'test.event',
|
|
328
|
+
payload: (response) => ({ data: response.id }),
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
334
|
+
const handler = adaptor.handler;
|
|
335
|
+
|
|
336
|
+
await handler({}, createMockContext(), vi.fn());
|
|
337
|
+
|
|
338
|
+
expect(publisherService.publisher.publishedEvents).toHaveLength(1);
|
|
339
|
+
expect(publisherService.publisher.publishedEvents[0]).toEqual({
|
|
340
|
+
type: 'test.event',
|
|
341
|
+
payload: { data: '123' },
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
it('should conditionally publish events based on when clause', async () => {
|
|
346
|
+
const publisherService = new TestPublisherService();
|
|
347
|
+
|
|
348
|
+
const fn = new Function(
|
|
349
|
+
async () => ({ success: false }),
|
|
350
|
+
undefined,
|
|
351
|
+
undefined,
|
|
352
|
+
undefined,
|
|
353
|
+
z.object({ success: z.boolean() }),
|
|
354
|
+
[],
|
|
355
|
+
logger,
|
|
356
|
+
publisherService,
|
|
357
|
+
[
|
|
358
|
+
{
|
|
359
|
+
type: 'test.event',
|
|
360
|
+
payload: () => ({ data: 'test' }),
|
|
361
|
+
when: (response) => response.success === true,
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
367
|
+
const handler = adaptor.handler;
|
|
368
|
+
|
|
369
|
+
await handler({}, createMockContext(), vi.fn());
|
|
370
|
+
|
|
371
|
+
expect(publisherService.publisher.publishedEvents).toHaveLength(0);
|
|
372
|
+
});
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
// Skipping timeout tests for now as middleware order needs to be adjusted
|
|
376
|
+
});
|