@geekmidas/constructs 7.0.1 → 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.
- package/README.md +71 -44
- package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts → AWSScheduledFunction-BvFvBsBN.d.cts} +10 -5
- package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts.map → AWSScheduledFunction-BvFvBsBN.d.cts.map} +1 -1
- package/dist/{AWSScheduledFunction-CTIa90EH.d.cts → AWSScheduledFunction-CVccZO-L.d.mts} +10 -5
- package/dist/{AWSScheduledFunction-CTIa90EH.d.cts.map → AWSScheduledFunction-CVccZO-L.d.mts.map} +1 -1
- package/dist/{AWSScheduledFunction-CufMMhGB.mjs → AWSScheduledFunction-Db1lttJH.mjs} +3 -3
- package/dist/{AWSScheduledFunction-CufMMhGB.mjs.map → AWSScheduledFunction-Db1lttJH.mjs.map} +1 -1
- package/dist/{AWSScheduledFunction-DbkDr8CA.cjs → AWSScheduledFunction-qu4ieRZR.cjs} +9 -9
- package/dist/{AWSScheduledFunction-DbkDr8CA.cjs.map → AWSScheduledFunction-qu4ieRZR.cjs.map} +1 -1
- package/dist/{Construct-_1wX7p_Y.d.cts → Construct-B-xc0SE9.d.mts} +27 -5
- package/dist/Construct-B-xc0SE9.d.mts.map +1 -0
- package/dist/{Construct-r0U2zBwW.mjs → Construct-HmWM6YYu.mjs} +4 -3
- package/dist/Construct-HmWM6YYu.mjs.map +1 -0
- package/dist/{Construct-DCMuYOox.d.mts → Construct-WhCXIOPV.d.cts} +29 -7
- package/dist/Construct-WhCXIOPV.d.cts.map +1 -0
- package/dist/{Construct-vXMZJgRp.cjs → Construct-roId57cU.cjs} +7 -43
- package/dist/Construct-roId57cU.cjs.map +1 -0
- package/dist/{lazyAccessors-DmTG8sQH.cjs → Endpoint-BBkV6l0k.cjs} +869 -1079
- package/dist/Endpoint-BBkV6l0k.cjs.map +1 -0
- package/dist/{lazyAccessors-DfqZR6C4.mjs → Endpoint-BGwpNEX4.mjs} +840 -1003
- package/dist/Endpoint-BGwpNEX4.mjs.map +1 -0
- package/dist/{Endpoint-CAzNbDEt.d.cts → Endpoint-BnxZqIX-.d.cts} +53 -4
- package/dist/Endpoint-BnxZqIX-.d.cts.map +1 -0
- package/dist/{Endpoint-CLPSIl6S.d.mts → Endpoint-ROcXU-eH.d.mts} +55 -6
- package/dist/Endpoint-ROcXU-eH.d.mts.map +1 -0
- package/dist/EndpointFactory-DYoGLaIT.cjs +850 -0
- package/dist/EndpointFactory-DYoGLaIT.cjs.map +1 -0
- package/dist/EndpointFactory-Di0X9AWp.mjs +808 -0
- package/dist/EndpointFactory-Di0X9AWp.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-DJDT3PMx.mjs → HonoEndpointAdaptor-DFKIIG2o.mjs} +5 -4
- package/dist/HonoEndpointAdaptor-DFKIIG2o.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-CkJENANP.cjs → HonoEndpointAdaptor-wMsCyMgt.cjs} +24 -23
- package/dist/HonoEndpointAdaptor-wMsCyMgt.cjs.map +1 -0
- package/dist/{Queue-DaxjwmOQ.d.cts → Queue-D6WeziRD.d.cts} +43 -4
- package/dist/Queue-D6WeziRD.d.cts.map +1 -0
- package/dist/{Queue-HBDf0fqz.d.mts → Queue-DpUeqdC8.d.mts} +43 -4
- package/dist/Queue-DpUeqdC8.d.mts.map +1 -0
- package/dist/{Subscriber-B69ngPwl.d.cts → Subscriber-4rBJgDKI.d.mts} +9 -4
- package/dist/{Subscriber-B69ngPwl.d.cts.map → Subscriber-4rBJgDKI.d.mts.map} +1 -1
- package/dist/{Subscriber-D8Xm-86W.d.mts → Subscriber-DVQowdyj.d.cts} +11 -6
- package/dist/Subscriber-DVQowdyj.d.cts.map +1 -0
- package/dist/{Topic-C5ZMfveW.d.cts → Topic-Ohx9dvWr.d.cts} +33 -2
- package/dist/Topic-Ohx9dvWr.d.cts.map +1 -0
- package/dist/{Topic-DT10AqHk.d.mts → Topic-cmy2jOUy.d.mts} +33 -2
- package/dist/Topic-cmy2jOUy.d.mts.map +1 -0
- package/dist/adaptors/aws.cjs +39 -26
- package/dist/adaptors/aws.cjs.map +1 -1
- package/dist/adaptors/aws.d.cts +24 -16
- package/dist/adaptors/aws.d.cts.map +1 -1
- package/dist/adaptors/aws.d.mts +25 -17
- package/dist/adaptors/aws.d.mts.map +1 -1
- package/dist/adaptors/aws.mjs +26 -14
- package/dist/adaptors/aws.mjs.map +1 -1
- package/dist/adaptors/hono.cjs +9 -6
- package/dist/adaptors/hono.d.cts +7 -6
- package/dist/adaptors/hono.d.cts.map +1 -1
- package/dist/adaptors/hono.d.mts +8 -7
- package/dist/adaptors/hono.d.mts.map +1 -1
- package/dist/adaptors/hono.mjs +9 -6
- package/dist/adaptors/testing.cjs +18 -14
- package/dist/adaptors/testing.cjs.map +1 -1
- package/dist/adaptors/testing.d.cts +7 -6
- package/dist/adaptors/testing.d.cts.map +1 -1
- package/dist/adaptors/testing.d.mts +11 -10
- package/dist/adaptors/testing.d.mts.map +1 -1
- package/dist/adaptors/testing.mjs +10 -7
- package/dist/adaptors/testing.mjs.map +1 -1
- package/dist/auth.cjs +165 -0
- package/dist/auth.cjs.map +1 -0
- package/dist/auth.d.cts +108 -0
- package/dist/auth.d.cts.map +1 -0
- package/dist/auth.d.mts +108 -0
- package/dist/auth.d.mts.map +1 -0
- package/dist/auth.mjs +164 -0
- package/dist/auth.mjs.map +1 -0
- package/dist/cache-0ANvRQnD.mjs +51 -0
- package/dist/cache-0ANvRQnD.mjs.map +1 -0
- package/dist/cache-3WSvAulx.cjs +57 -0
- package/dist/cache-3WSvAulx.cjs.map +1 -0
- package/dist/cache-CdQ7OLpR.d.cts +47 -0
- package/dist/cache-CdQ7OLpR.d.cts.map +1 -0
- package/dist/cache-DYoJFcfd.d.mts +47 -0
- package/dist/cache-DYoJFcfd.d.mts.map +1 -0
- package/dist/cache.cjs +3 -0
- package/dist/cache.d.cts +3 -0
- package/dist/cache.d.mts +3 -0
- package/dist/cache.mjs +3 -0
- package/dist/chunk-DWy1uDak.cjs +39 -0
- package/dist/clone-DblgEZZa.mjs +39 -0
- package/dist/clone-DblgEZZa.mjs.map +1 -0
- package/dist/clone-Dy0cR2SZ.cjs +45 -0
- package/dist/clone-Dy0cR2SZ.cjs.map +1 -0
- package/dist/construct-interface-BfjcOD_E.cjs +117 -0
- package/dist/construct-interface-BfjcOD_E.cjs.map +1 -0
- package/dist/construct-interface-BqwRNYA2.d.mts +131 -0
- package/dist/construct-interface-BqwRNYA2.d.mts.map +1 -0
- package/dist/construct-interface-D2nNkHUN.d.cts +131 -0
- package/dist/construct-interface-D2nNkHUN.d.cts.map +1 -0
- package/dist/construct-interface-Z4CpS8tK.mjs +81 -0
- package/dist/construct-interface-Z4CpS8tK.mjs.map +1 -0
- package/dist/construct-interface.cjs +8 -0
- package/dist/construct-interface.d.cts +2 -0
- package/dist/construct-interface.d.mts +2 -0
- package/dist/construct-interface.mjs +3 -0
- package/dist/credential.cjs +96 -0
- package/dist/credential.cjs.map +1 -0
- package/dist/credential.d.cts +61 -0
- package/dist/credential.d.cts.map +1 -0
- package/dist/credential.d.mts +61 -0
- package/dist/credential.d.mts.map +1 -0
- package/dist/credential.mjs +94 -0
- package/dist/credential.mjs.map +1 -0
- package/dist/crons/index.cjs +39 -37
- package/dist/crons/index.cjs.map +1 -1
- package/dist/crons/index.d.cts +21 -8
- package/dist/crons/index.d.cts.map +1 -1
- package/dist/crons/index.d.mts +29 -13
- package/dist/crons/index.d.mts.map +1 -1
- package/dist/crons/index.mjs +37 -36
- package/dist/crons/index.mjs.map +1 -1
- package/dist/database/kysely.cjs +181 -0
- package/dist/database/kysely.cjs.map +1 -0
- package/dist/database/kysely.d.cts +152 -0
- package/dist/database/kysely.d.cts.map +1 -0
- package/dist/database/kysely.d.mts +152 -0
- package/dist/database/kysely.d.mts.map +1 -0
- package/dist/database/kysely.mjs +180 -0
- package/dist/database/kysely.mjs.map +1 -0
- package/dist/email.cjs +59 -0
- package/dist/email.cjs.map +1 -0
- package/dist/email.d.cts +50 -0
- package/dist/email.d.cts.map +1 -0
- package/dist/email.d.mts +50 -0
- package/dist/email.d.mts.map +1 -0
- package/dist/email.mjs +58 -0
- package/dist/email.mjs.map +1 -0
- package/dist/endpoints/index.cjs +21 -747
- package/dist/endpoints/index.d.cts +7 -343
- package/dist/endpoints/index.d.mts +7 -342
- package/dist/endpoints/index.mjs +11 -738
- package/dist/file-server.cjs +154 -0
- package/dist/file-server.cjs.map +1 -0
- package/dist/file-server.d.cts +156 -0
- package/dist/file-server.d.cts.map +1 -0
- package/dist/file-server.d.mts +156 -0
- package/dist/file-server.d.mts.map +1 -0
- package/dist/file-server.mjs +152 -0
- package/dist/file-server.mjs.map +1 -0
- package/dist/functions/index.cjs +4 -2
- package/dist/functions/index.d.cts +3 -2
- package/dist/functions/index.d.mts +3 -2
- package/dist/functions/index.mjs +4 -2
- package/dist/{functions-B-qt91O7.mjs → functions-CvT_q7Y4.mjs} +55 -51
- package/dist/functions-CvT_q7Y4.mjs.map +1 -0
- package/dist/{functions-C8i1kCMM.cjs → functions-DukjG8ov.cjs} +62 -57
- package/dist/functions-DukjG8ov.cjs.map +1 -0
- package/dist/index-7OcOWe75.d.cts +419 -0
- package/dist/index-7OcOWe75.d.cts.map +1 -0
- package/dist/index-Bt-F7u8L.d.mts +419 -0
- package/dist/index-Bt-F7u8L.d.mts.map +1 -0
- package/dist/{index-DP6fqv0I.d.mts → index-CPeqtKgq.d.mts} +48 -19
- package/dist/index-CPeqtKgq.d.mts.map +1 -0
- package/dist/{index-BGeTScmi.d.cts → index-Dadljnh_.d.cts} +36 -9
- package/dist/index-Dadljnh_.d.cts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +1 -1
- package/dist/lazyAccessors-DM6HcXQk.mjs +175 -0
- package/dist/lazyAccessors-DM6HcXQk.mjs.map +1 -0
- package/dist/lazyAccessors-DrJj8NpA.cjs +223 -0
- package/dist/lazyAccessors-DrJj8NpA.cjs.map +1 -0
- package/dist/object-storage.cjs +48 -0
- package/dist/object-storage.cjs.map +1 -0
- package/dist/object-storage.d.cts +36 -0
- package/dist/object-storage.d.cts.map +1 -0
- package/dist/object-storage.d.mts +36 -0
- package/dist/object-storage.d.mts.map +1 -0
- package/dist/object-storage.mjs +47 -0
- package/dist/object-storage.mjs.map +1 -0
- package/dist/{processAudits-CKjjivyz.cjs → processAudits-Bc8rz6Ev.cjs} +3 -3
- package/dist/{processAudits-CKjjivyz.cjs.map → processAudits-Bc8rz6Ev.cjs.map} +1 -1
- package/dist/{processAudits-ySnizdMG.mjs → processAudits-D89tICM4.mjs} +1 -1
- package/dist/{processAudits-ySnizdMG.mjs.map → processAudits-D89tICM4.mjs.map} +1 -1
- package/dist/{publisher-BrFOF847.mjs → publisher-CGEo8UKD.mjs} +1 -1
- package/dist/{publisher-BrFOF847.mjs.map → publisher-CGEo8UKD.mjs.map} +1 -1
- package/dist/{publisher-lFQleddL.cjs → publisher-CqGsXB2X.cjs} +1 -1
- package/dist/{publisher-lFQleddL.cjs.map → publisher-CqGsXB2X.cjs.map} +1 -1
- package/dist/queue/index.cjs +92 -30
- package/dist/queue/index.cjs.map +1 -1
- package/dist/queue/index.d.cts +19 -4
- package/dist/queue/index.d.cts.map +1 -1
- package/dist/queue/index.d.mts +22 -6
- package/dist/queue/index.d.mts.map +1 -1
- package/dist/queue/index.mjs +90 -29
- package/dist/queue/index.mjs.map +1 -1
- package/dist/rest-api.cjs +187 -0
- package/dist/rest-api.cjs.map +1 -0
- package/dist/rest-api.d.cts +221 -0
- package/dist/rest-api.d.cts.map +1 -0
- package/dist/rest-api.d.mts +221 -0
- package/dist/rest-api.d.mts.map +1 -0
- package/dist/rest-api.mjs +186 -0
- package/dist/rest-api.mjs.map +1 -0
- package/dist/site.cjs +48 -0
- package/dist/site.cjs.map +1 -0
- package/dist/site.d.cts +101 -0
- package/dist/site.d.cts.map +1 -0
- package/dist/site.d.mts +101 -0
- package/dist/site.d.mts.map +1 -0
- package/dist/site.mjs +47 -0
- package/dist/site.mjs.map +1 -0
- package/dist/subscribers/index.cjs +35 -27
- package/dist/subscribers/index.cjs.map +1 -1
- package/dist/subscribers/index.d.cts +20 -5
- package/dist/subscribers/index.d.cts.map +1 -1
- package/dist/subscribers/index.d.mts +23 -7
- package/dist/subscribers/index.d.mts.map +1 -1
- package/dist/subscribers/index.mjs +34 -27
- package/dist/subscribers/index.mjs.map +1 -1
- package/dist/surfaceEnv-BFXEms2f.cjs +39 -0
- package/dist/surfaceEnv-BFXEms2f.cjs.map +1 -0
- package/dist/surfaceEnv-C3Ktahea.mjs +27 -0
- package/dist/surfaceEnv-C3Ktahea.mjs.map +1 -0
- package/dist/{telemetry-3vdxGn4q.d.mts → telemetry-C3L0iS28.d.cts} +2 -2
- package/dist/{telemetry-3vdxGn4q.d.mts.map → telemetry-C3L0iS28.d.cts.map} +1 -1
- package/dist/{telemetry-Dqx-D3F7.d.cts → telemetry-D7bVFLGi.d.mts} +2 -2
- package/dist/{telemetry-Dqx-D3F7.d.cts.map → telemetry-D7bVFLGi.d.mts.map} +1 -1
- package/dist/topic/index.cjs +56 -13
- package/dist/topic/index.cjs.map +1 -1
- package/dist/topic/index.d.cts +2 -2
- package/dist/topic/index.d.cts.map +1 -1
- package/dist/topic/index.d.mts +2 -2
- package/dist/topic/index.d.mts.map +1 -1
- package/dist/topic/index.mjs +54 -12
- package/dist/topic/index.mjs.map +1 -1
- package/dist/{types-BDNGr7pv.d.mts → types-BlAkSuGI.d.cts} +1 -1
- package/dist/{types-BDNGr7pv.d.mts.map → types-BlAkSuGI.d.cts.map} +1 -1
- package/dist/{types-BdAaYDvd.d.cts → types-aKksMEWL.d.mts} +1 -1
- package/dist/{types-BdAaYDvd.d.cts.map → types-aKksMEWL.d.mts.map} +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +155 -23
- package/CHANGELOG.md +0 -366
- package/dist/Construct-DCMuYOox.d.mts.map +0 -1
- package/dist/Construct-_1wX7p_Y.d.cts.map +0 -1
- package/dist/Construct-r0U2zBwW.mjs.map +0 -1
- package/dist/Construct-vXMZJgRp.cjs.map +0 -1
- package/dist/Endpoint-CAzNbDEt.d.cts.map +0 -1
- package/dist/Endpoint-CLPSIl6S.d.mts.map +0 -1
- package/dist/HonoEndpointAdaptor-CkJENANP.cjs.map +0 -1
- package/dist/HonoEndpointAdaptor-DJDT3PMx.mjs.map +0 -1
- package/dist/Queue-DaxjwmOQ.d.cts.map +0 -1
- package/dist/Queue-HBDf0fqz.d.mts.map +0 -1
- package/dist/Subscriber-D8Xm-86W.d.mts.map +0 -1
- package/dist/Topic-C5ZMfveW.d.cts.map +0 -1
- package/dist/Topic-DT10AqHk.d.mts.map +0 -1
- package/dist/endpoints/index.cjs.map +0 -1
- package/dist/endpoints/index.d.cts.map +0 -1
- package/dist/endpoints/index.d.mts.map +0 -1
- package/dist/endpoints/index.mjs.map +0 -1
- package/dist/functions-B-qt91O7.mjs.map +0 -1
- package/dist/functions-C8i1kCMM.cjs.map +0 -1
- package/dist/index-BGeTScmi.d.cts.map +0 -1
- package/dist/index-DP6fqv0I.d.mts.map +0 -1
- package/dist/lazyAccessors-DfqZR6C4.mjs.map +0 -1
- package/dist/lazyAccessors-DmTG8sQH.cjs.map +0 -1
- package/src/Construct.ts +0 -204
- package/src/__benchmarks__/build-time-optimization.bench.ts +0 -274
- package/src/__benchmarks__/endpoint.bench.ts +0 -494
- package/src/__benchmarks__/fixtures.ts +0 -241
- package/src/__benchmarks__/hono-adaptor.bench.ts +0 -533
- package/src/__benchmarks__/hono-server.bench.ts +0 -249
- package/src/__benchmarks__/response-builder.bench.ts +0 -428
- package/src/__benchmarks__/strategies/strategy-a-lazy-services.ts +0 -319
- package/src/__benchmarks__/strategies/strategy-c-middleware.ts +0 -530
- package/src/__benchmarks__/strategies/strategy-d-opt-in-events.ts +0 -567
- package/src/__tests__/Construct.environment.spec.ts +0 -704
- package/src/__tests__/publisher.setting.spec.ts +0 -508
- package/src/__tests__/publisher.spec.ts +0 -452
- package/src/adaptors/aws.ts +0 -6
- package/src/adaptors/hono.ts +0 -1
- package/src/adaptors/testing.ts +0 -11
- package/src/crons/AWSScheduledFunction.ts +0 -73
- package/src/crons/Cron.ts +0 -149
- package/src/crons/CronBuilder.ts +0 -271
- package/src/crons/__tests__/AWSScheduledFunction.spec.ts +0 -152
- package/src/crons/__tests__/Cron.spec.ts +0 -464
- package/src/crons/__tests__/CronBuilder.state-isolation.spec.ts +0 -227
- package/src/crons/index.ts +0 -12
- package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +0 -677
- package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +0 -105
- package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +0 -97
- package/src/endpoints/Authorizer.ts +0 -152
- package/src/endpoints/Endpoint.ts +0 -1287
- package/src/endpoints/EndpointBuilder.ts +0 -758
- package/src/endpoints/EndpointFactory.ts +0 -1148
- package/src/endpoints/HonoEndpointAdaptor.ts +0 -677
- package/src/endpoints/MswEndpointAdaptor.ts +0 -226
- package/src/endpoints/TestEndpointAdaptor.ts +0 -422
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.audits.spec.ts +0 -499
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +0 -560
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +0 -1304
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +0 -626
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +0 -732
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.factory-publisher.spec.ts +0 -296
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +0 -951
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.responseType.spec.ts +0 -111
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.rls.spec.ts +0 -307
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +0 -629
- package/src/endpoints/__tests__/Authorizer.spec.ts +0 -286
- package/src/endpoints/__tests__/Endpoint.cookies.spec.ts +0 -207
- package/src/endpoints/__tests__/Endpoint.headers.spec.ts +0 -187
- package/src/endpoints/__tests__/Endpoint.manifest.spec.ts +0 -175
- package/src/endpoints/__tests__/Endpoint.spec.ts +0 -857
- package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +0 -448
- package/src/endpoints/__tests__/EndpointBuilder.responseType.spec.ts +0 -47
- package/src/endpoints/__tests__/EndpointBuilder.spec.ts +0 -523
- package/src/endpoints/__tests__/EndpointFactory.authorizers.spec.ts +0 -492
- package/src/endpoints/__tests__/EndpointFactory.database-auditor.spec.ts +0 -509
- package/src/endpoints/__tests__/EndpointFactory.reference-audit.spec.ts +0 -190
- package/src/endpoints/__tests__/EndpointFactory.spec.ts +0 -479
- package/src/endpoints/__tests__/EndpointFactory.state-isolation.spec.ts +0 -155
- package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +0 -703
- package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +0 -632
- package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +0 -577
- package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +0 -1067
- package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +0 -317
- package/src/endpoints/__tests__/HonoEndpointAdaptor.pgboss-publisher.spec.ts +0 -289
- package/src/endpoints/__tests__/HonoEndpointAdaptor.responseType.spec.ts +0 -128
- package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +0 -1207
- package/src/endpoints/__tests__/MswEndpointAdaptor.spec.ts +0 -211
- package/src/endpoints/__tests__/ResponseBuilder.spec.ts +0 -235
- package/src/endpoints/__tests__/TestEndpointAdaptor.audits.spec.ts +0 -602
- package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +0 -1044
- package/src/endpoints/__tests__/__snapshots__/HonoEndpointAdaptor.spec.ts.snap +0 -54
- package/src/endpoints/__tests__/endpoint-types.test.ts +0 -88
- package/src/endpoints/__tests__/helpers.spec.ts +0 -37
- package/src/endpoints/__tests__/lazyAccessors.spec.ts +0 -330
- package/src/endpoints/__tests__/processAudits.spec.ts +0 -631
- package/src/endpoints/audit.ts +0 -87
- package/src/endpoints/helpers.ts +0 -98
- package/src/endpoints/index.ts +0 -42
- package/src/endpoints/lazyAccessors.ts +0 -241
- package/src/endpoints/parseHonoQuery.ts +0 -16
- package/src/endpoints/parseQueryParams.ts +0 -32
- package/src/endpoints/processAudits.ts +0 -371
- package/src/endpoints/rls.ts +0 -67
- package/src/functions/AWSLambdaFunction.ts +0 -348
- package/src/functions/BaseFunctionBuilder.ts +0 -201
- package/src/functions/Function.ts +0 -238
- package/src/functions/FunctionBuilder.ts +0 -391
- package/src/functions/FunctionExecutionWrapper.ts +0 -216
- package/src/functions/TestFunctionAdaptor.ts +0 -217
- package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +0 -513
- package/src/functions/__tests__/Function.audits.spec.ts +0 -393
- package/src/functions/__tests__/Function.spec.ts +0 -477
- package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +0 -207
- package/src/functions/__tests__/TestFunctionAdaptor.spec.ts +0 -480
- package/src/functions/index.ts +0 -12
- package/src/index.ts +0 -23
- package/src/publisher.ts +0 -93
- package/src/queue/AWSLambdaQueueAdaptor.ts +0 -162
- package/src/queue/Queue.ts +0 -128
- package/src/queue/QueueBuilder.ts +0 -115
- package/src/queue/TestQueueAdaptor.ts +0 -63
- package/src/queue/__tests__/QueueBuilder.spec.ts +0 -137
- package/src/queue/index.ts +0 -12
- package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +0 -342
- package/src/subscribers/Subscriber.ts +0 -117
- package/src/subscribers/SubscriberBuilder.ts +0 -186
- package/src/subscribers/TestSubscriberAdaptor.ts +0 -133
- package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +0 -1018
- package/src/subscribers/__tests__/Subscriber.spec.ts +0 -430
- package/src/subscribers/__tests__/TestSubscriberAdaptor.spec.ts +0 -652
- package/src/subscribers/index.ts +0 -6
- package/src/telemetry.ts +0 -103
- package/src/topic/Topic.ts +0 -103
- package/src/topic/TopicBuilder.ts +0 -51
- package/src/topic/__tests__/TopicBuilder.spec.ts +0 -82
- package/src/topic/index.ts +0 -11
- package/src/types.ts +0 -13
- package/test.ts +0 -91
- package/tsconfig.json +0 -9
- package/tsdown.config.ts +0 -34
|
@@ -1,567 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck - Experimental benchmark strategy file
|
|
2
|
-
/**
|
|
3
|
-
* Strategy D: Opt-in Event Publishing
|
|
4
|
-
*
|
|
5
|
-
* Key optimizations:
|
|
6
|
-
* 1. Only add event middleware to routes that publish events
|
|
7
|
-
* 2. Remove global event middleware entirely
|
|
8
|
-
* 3. Zero overhead for routes without events
|
|
9
|
-
* 4. Per-route event publishing configuration
|
|
10
|
-
*/
|
|
11
|
-
import type { Logger } from '@geekmidas/logger';
|
|
12
|
-
import type {
|
|
13
|
-
Service,
|
|
14
|
-
ServiceDiscovery,
|
|
15
|
-
ServiceRecord,
|
|
16
|
-
} from '@geekmidas/services';
|
|
17
|
-
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
18
|
-
import type { Context, Hono, Next } from 'hono';
|
|
19
|
-
import { validator } from 'hono/validator';
|
|
20
|
-
import {
|
|
21
|
-
Endpoint,
|
|
22
|
-
type EndpointSchemas,
|
|
23
|
-
ResponseBuilder,
|
|
24
|
-
} from '../../endpoints/Endpoint';
|
|
25
|
-
import { parseHonoQuery } from '../../endpoints/parseHonoQuery';
|
|
26
|
-
import type { HttpMethod, LowerHttpMethod } from '../../types';
|
|
27
|
-
|
|
28
|
-
// ============================================================================
|
|
29
|
-
// Event Publishing Middleware (Per-Route)
|
|
30
|
-
// ============================================================================
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Creates event publishing middleware only for endpoints with events
|
|
34
|
-
* This runs AFTER the handler to publish events on success
|
|
35
|
-
*/
|
|
36
|
-
function createEventPublishMiddleware<
|
|
37
|
-
TServices extends Service[],
|
|
38
|
-
TLogger extends Logger,
|
|
39
|
-
>(
|
|
40
|
-
endpoint: Endpoint<
|
|
41
|
-
any,
|
|
42
|
-
any,
|
|
43
|
-
any,
|
|
44
|
-
any,
|
|
45
|
-
TServices,
|
|
46
|
-
TLogger,
|
|
47
|
-
any,
|
|
48
|
-
any,
|
|
49
|
-
any,
|
|
50
|
-
any,
|
|
51
|
-
any,
|
|
52
|
-
any,
|
|
53
|
-
any,
|
|
54
|
-
any
|
|
55
|
-
>,
|
|
56
|
-
_serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,
|
|
57
|
-
): ((c: Context, next: Next) => Promise<Response | undefined>) | null {
|
|
58
|
-
// Return null if no events configured - middleware won't be added
|
|
59
|
-
if (!endpoint.events || endpoint.events.length === 0) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return async (c, next) => {
|
|
64
|
-
await next();
|
|
65
|
-
|
|
66
|
-
// Only publish events on success
|
|
67
|
-
if (Endpoint.isSuccessStatus(c.res.status)) {
|
|
68
|
-
const response = c.get('__response');
|
|
69
|
-
const logger = c.get('__logger') as Logger;
|
|
70
|
-
|
|
71
|
-
if (response !== undefined) {
|
|
72
|
-
// Note: In a real implementation, this would call publishConstructEvents
|
|
73
|
-
// For benchmarking, we simulate the work
|
|
74
|
-
await simulateEventPublish(endpoint.events, response, logger);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Simulates event publishing for benchmarking
|
|
82
|
-
*/
|
|
83
|
-
async function simulateEventPublish(
|
|
84
|
-
events: any[],
|
|
85
|
-
response: any,
|
|
86
|
-
logger: Logger,
|
|
87
|
-
): Promise<void> {
|
|
88
|
-
// Simulate the async work of event publishing
|
|
89
|
-
// In production, this would serialize and publish to a message broker
|
|
90
|
-
for (const event of events) {
|
|
91
|
-
// Simulated event processing
|
|
92
|
-
const eventPayload = typeof event === 'function' ? event(response) : event;
|
|
93
|
-
logger.debug({ event: eventPayload }, 'Publishing event');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ============================================================================
|
|
98
|
-
// Hono Context Type Augmentation
|
|
99
|
-
// ============================================================================
|
|
100
|
-
|
|
101
|
-
declare module 'hono' {
|
|
102
|
-
interface ContextVariableMap {
|
|
103
|
-
__response: unknown;
|
|
104
|
-
__logger: Logger;
|
|
105
|
-
__endpoint: Endpoint<
|
|
106
|
-
any,
|
|
107
|
-
any,
|
|
108
|
-
any,
|
|
109
|
-
any,
|
|
110
|
-
any,
|
|
111
|
-
any,
|
|
112
|
-
any,
|
|
113
|
-
any,
|
|
114
|
-
any,
|
|
115
|
-
any,
|
|
116
|
-
any,
|
|
117
|
-
any,
|
|
118
|
-
any,
|
|
119
|
-
any
|
|
120
|
-
>;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ============================================================================
|
|
125
|
-
// Main Adaptor with Opt-in Events
|
|
126
|
-
// ============================================================================
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* HonoEndpoint adaptor with opt-in event publishing
|
|
130
|
-
* No global event middleware - only routes with events get the overhead
|
|
131
|
-
*/
|
|
132
|
-
export class OptInEventHonoEndpoint {
|
|
133
|
-
/**
|
|
134
|
-
* Add routes with opt-in event publishing
|
|
135
|
-
*/
|
|
136
|
-
static addRoutes<
|
|
137
|
-
TServices extends Service[] = [],
|
|
138
|
-
TLogger extends Logger = Logger,
|
|
139
|
-
>(
|
|
140
|
-
endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],
|
|
141
|
-
serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,
|
|
142
|
-
app: Hono,
|
|
143
|
-
): void {
|
|
144
|
-
// NO global event middleware here!
|
|
145
|
-
// Each route adds its own if needed
|
|
146
|
-
|
|
147
|
-
// Sort endpoints (static routes before dynamic)
|
|
148
|
-
const sortedEndpoints = [...endpoints].sort((a, b) => {
|
|
149
|
-
const aHasDynamic = a.route.includes(':');
|
|
150
|
-
const bHasDynamic = b.route.includes(':');
|
|
151
|
-
if (!aHasDynamic && bHasDynamic) return -1;
|
|
152
|
-
if (aHasDynamic && !bHasDynamic) return 1;
|
|
153
|
-
return a.route.localeCompare(b.route);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
for (const endpoint of sortedEndpoints) {
|
|
157
|
-
OptInEventHonoEndpoint.addRoute(endpoint, serviceDiscovery, app);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Add a single route with opt-in event publishing
|
|
163
|
-
*/
|
|
164
|
-
static addRoute<
|
|
165
|
-
TRoute extends string,
|
|
166
|
-
TMethod extends HttpMethod,
|
|
167
|
-
TInput extends EndpointSchemas = {},
|
|
168
|
-
TOutSchema extends StandardSchemaV1 | undefined = undefined,
|
|
169
|
-
TServices extends Service[] = [],
|
|
170
|
-
TLogger extends Logger = Logger,
|
|
171
|
-
>(
|
|
172
|
-
endpoint: Endpoint<
|
|
173
|
-
TRoute,
|
|
174
|
-
TMethod,
|
|
175
|
-
TInput,
|
|
176
|
-
TOutSchema,
|
|
177
|
-
TServices,
|
|
178
|
-
TLogger,
|
|
179
|
-
any,
|
|
180
|
-
any,
|
|
181
|
-
any,
|
|
182
|
-
any,
|
|
183
|
-
any,
|
|
184
|
-
any,
|
|
185
|
-
any,
|
|
186
|
-
any
|
|
187
|
-
>,
|
|
188
|
-
serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,
|
|
189
|
-
app: Hono,
|
|
190
|
-
): void {
|
|
191
|
-
const { route } = endpoint;
|
|
192
|
-
const method = endpoint.method.toLowerCase() as LowerHttpMethod<TMethod>;
|
|
193
|
-
|
|
194
|
-
// Pre-resolve services at setup time
|
|
195
|
-
const servicesPromise =
|
|
196
|
-
endpoint.services.length > 0
|
|
197
|
-
? serviceDiscovery.register(endpoint.services)
|
|
198
|
-
: Promise.resolve({} as ServiceRecord<TServices>);
|
|
199
|
-
|
|
200
|
-
// Pre-resolve database service if configured
|
|
201
|
-
const dbPromise = endpoint.databaseService
|
|
202
|
-
? serviceDiscovery
|
|
203
|
-
.register([endpoint.databaseService])
|
|
204
|
-
.then(
|
|
205
|
-
(s) => s[endpoint.databaseService?.serviceName as keyof typeof s],
|
|
206
|
-
)
|
|
207
|
-
: Promise.resolve(undefined);
|
|
208
|
-
|
|
209
|
-
// Build middleware chain
|
|
210
|
-
const middlewares: ((
|
|
211
|
-
c: Context,
|
|
212
|
-
next: Next,
|
|
213
|
-
) => Promise<Response | undefined>)[] = [];
|
|
214
|
-
|
|
215
|
-
// Validators (always needed)
|
|
216
|
-
const validators = [
|
|
217
|
-
validator('json', async (value, c) => {
|
|
218
|
-
if (!endpoint.input?.body) return undefined;
|
|
219
|
-
const parsed = await Endpoint.validate(endpoint.input.body, value);
|
|
220
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
221
|
-
return parsed.value;
|
|
222
|
-
}),
|
|
223
|
-
validator('query', async (_, c) => {
|
|
224
|
-
if (!endpoint.input?.query) return undefined;
|
|
225
|
-
const parsedQuery = parseHonoQuery(c);
|
|
226
|
-
const parsed = await Endpoint.validate(
|
|
227
|
-
endpoint.input.query,
|
|
228
|
-
parsedQuery,
|
|
229
|
-
);
|
|
230
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
231
|
-
return parsed.value;
|
|
232
|
-
}),
|
|
233
|
-
validator('param', async (params, c) => {
|
|
234
|
-
if (!endpoint.input?.params) return undefined;
|
|
235
|
-
const parsed = await Endpoint.validate(endpoint.input.params, params);
|
|
236
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
237
|
-
return parsed.value;
|
|
238
|
-
}),
|
|
239
|
-
];
|
|
240
|
-
|
|
241
|
-
// Add event middleware ONLY if endpoint has events
|
|
242
|
-
const eventMiddleware = createEventPublishMiddleware(
|
|
243
|
-
endpoint,
|
|
244
|
-
serviceDiscovery,
|
|
245
|
-
);
|
|
246
|
-
if (eventMiddleware) {
|
|
247
|
-
middlewares.push(eventMiddleware);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Core handler
|
|
251
|
-
const handler = async (c: Context): Promise<Response> => {
|
|
252
|
-
try {
|
|
253
|
-
const [services, db] = await Promise.all([servicesPromise, dbPromise]);
|
|
254
|
-
|
|
255
|
-
const headerValues = c.req.header();
|
|
256
|
-
const header = Endpoint.createHeaders(headerValues);
|
|
257
|
-
const cookie = Endpoint.createCookies(headerValues.cookie);
|
|
258
|
-
|
|
259
|
-
// Handle authorization if needed
|
|
260
|
-
let session: unknown;
|
|
261
|
-
if (endpoint.authorizer !== 'none') {
|
|
262
|
-
session = await endpoint.getSession({
|
|
263
|
-
services: services as any,
|
|
264
|
-
logger: endpoint.logger,
|
|
265
|
-
header,
|
|
266
|
-
cookie,
|
|
267
|
-
...(db !== undefined && { db }),
|
|
268
|
-
} as any);
|
|
269
|
-
|
|
270
|
-
const isAuthorized = await endpoint.authorize({
|
|
271
|
-
header,
|
|
272
|
-
cookie,
|
|
273
|
-
services: services as any,
|
|
274
|
-
logger: endpoint.logger,
|
|
275
|
-
session,
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
if (!isAuthorized) {
|
|
279
|
-
return c.json({ error: 'Unauthorized' }, 401);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Execute handler
|
|
284
|
-
const responseBuilder = new ResponseBuilder();
|
|
285
|
-
const response = await endpoint.handler(
|
|
286
|
-
{
|
|
287
|
-
services: services as any,
|
|
288
|
-
logger: endpoint.logger,
|
|
289
|
-
body: c.req.valid('json'),
|
|
290
|
-
query: c.req.valid('query'),
|
|
291
|
-
params: c.req.valid('param'),
|
|
292
|
-
session,
|
|
293
|
-
header,
|
|
294
|
-
cookie,
|
|
295
|
-
auditor: undefined,
|
|
296
|
-
db,
|
|
297
|
-
} as any,
|
|
298
|
-
responseBuilder,
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
// Store response for event middleware (only needed if events are configured)
|
|
302
|
-
if (endpoint.events?.length) {
|
|
303
|
-
c.set('__response', response);
|
|
304
|
-
c.set('__logger', endpoint.logger);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Build response
|
|
308
|
-
let data = response;
|
|
309
|
-
let metadata = responseBuilder.getMetadata();
|
|
310
|
-
|
|
311
|
-
if (Endpoint.hasMetadata(response)) {
|
|
312
|
-
data = response.data;
|
|
313
|
-
metadata = response.metadata;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
const output = endpoint.outputSchema
|
|
317
|
-
? await endpoint.parseOutput(data)
|
|
318
|
-
: data;
|
|
319
|
-
|
|
320
|
-
const status = (metadata.status ?? endpoint.status) as any;
|
|
321
|
-
return c.json(output, status);
|
|
322
|
-
} catch (_error) {
|
|
323
|
-
return c.json({ error: 'Internal Server Error' }, 500);
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
// Register route
|
|
328
|
-
app[method](route, ...validators, ...middlewares, handler);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
// ============================================================================
|
|
333
|
-
// Combined Optimized Adaptor (A + C + D combined)
|
|
334
|
-
// ============================================================================
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Fully optimized HonoEndpoint adaptor combining:
|
|
338
|
-
* - Strategy A: Lazy service resolution
|
|
339
|
-
* - Strategy C: Middleware composition
|
|
340
|
-
* - Strategy D: Opt-in event publishing
|
|
341
|
-
*/
|
|
342
|
-
export class FullyOptimizedHonoEndpoint {
|
|
343
|
-
/**
|
|
344
|
-
* Add routes with all optimizations
|
|
345
|
-
*/
|
|
346
|
-
static addRoutes<
|
|
347
|
-
TServices extends Service[] = [],
|
|
348
|
-
TLogger extends Logger = Logger,
|
|
349
|
-
>(
|
|
350
|
-
endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],
|
|
351
|
-
serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,
|
|
352
|
-
app: Hono,
|
|
353
|
-
): void {
|
|
354
|
-
// Sort endpoints
|
|
355
|
-
const sortedEndpoints = [...endpoints].sort((a, b) => {
|
|
356
|
-
const aHasDynamic = a.route.includes(':');
|
|
357
|
-
const bHasDynamic = b.route.includes(':');
|
|
358
|
-
if (!aHasDynamic && bHasDynamic) return -1;
|
|
359
|
-
if (aHasDynamic && !bHasDynamic) return 1;
|
|
360
|
-
return a.route.localeCompare(b.route);
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
for (const endpoint of sortedEndpoints) {
|
|
364
|
-
FullyOptimizedHonoEndpoint.addRoute(endpoint, serviceDiscovery, app);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* Add a single route with all optimizations
|
|
370
|
-
*/
|
|
371
|
-
static addRoute<
|
|
372
|
-
TRoute extends string,
|
|
373
|
-
TMethod extends HttpMethod,
|
|
374
|
-
TInput extends EndpointSchemas = {},
|
|
375
|
-
TOutSchema extends StandardSchemaV1 | undefined = undefined,
|
|
376
|
-
TServices extends Service[] = [],
|
|
377
|
-
TLogger extends Logger = Logger,
|
|
378
|
-
>(
|
|
379
|
-
endpoint: Endpoint<
|
|
380
|
-
TRoute,
|
|
381
|
-
TMethod,
|
|
382
|
-
TInput,
|
|
383
|
-
TOutSchema,
|
|
384
|
-
TServices,
|
|
385
|
-
TLogger,
|
|
386
|
-
any,
|
|
387
|
-
any,
|
|
388
|
-
any,
|
|
389
|
-
any,
|
|
390
|
-
any,
|
|
391
|
-
any,
|
|
392
|
-
any,
|
|
393
|
-
any
|
|
394
|
-
>,
|
|
395
|
-
serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,
|
|
396
|
-
app: Hono,
|
|
397
|
-
): void {
|
|
398
|
-
const { route } = endpoint;
|
|
399
|
-
const method = endpoint.method.toLowerCase() as LowerHttpMethod<TMethod>;
|
|
400
|
-
|
|
401
|
-
// Pre-analyze endpoint features at registration time
|
|
402
|
-
const hasServices = endpoint.services.length > 0;
|
|
403
|
-
const hasDatabaseService = !!endpoint.databaseService;
|
|
404
|
-
const hasAuthorizer = endpoint.authorizer !== 'none';
|
|
405
|
-
const hasEvents = (endpoint.events?.length ?? 0) > 0;
|
|
406
|
-
|
|
407
|
-
// Pre-resolve services at setup time (not per request)
|
|
408
|
-
const allServices = hasServices ? endpoint.services : [];
|
|
409
|
-
if (hasDatabaseService && endpoint.databaseService) {
|
|
410
|
-
allServices.push(endpoint.databaseService);
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
// Single service registration for all needed services
|
|
414
|
-
const servicesPromise =
|
|
415
|
-
allServices.length > 0
|
|
416
|
-
? serviceDiscovery.register(allServices)
|
|
417
|
-
: Promise.resolve({} as any);
|
|
418
|
-
|
|
419
|
-
// Build minimal middleware chain
|
|
420
|
-
const middlewares: ((
|
|
421
|
-
c: Context,
|
|
422
|
-
next: Next,
|
|
423
|
-
) => Promise<Response | undefined>)[] = [];
|
|
424
|
-
|
|
425
|
-
// Validators
|
|
426
|
-
const validators = [
|
|
427
|
-
validator('json', async (value, c) => {
|
|
428
|
-
if (!endpoint.input?.body) return undefined;
|
|
429
|
-
const parsed = await Endpoint.validate(endpoint.input.body, value);
|
|
430
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
431
|
-
return parsed.value;
|
|
432
|
-
}),
|
|
433
|
-
validator('query', async (_, c) => {
|
|
434
|
-
if (!endpoint.input?.query) return undefined;
|
|
435
|
-
const parsedQuery = parseHonoQuery(c);
|
|
436
|
-
const parsed = await Endpoint.validate(
|
|
437
|
-
endpoint.input.query,
|
|
438
|
-
parsedQuery,
|
|
439
|
-
);
|
|
440
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
441
|
-
return parsed.value;
|
|
442
|
-
}),
|
|
443
|
-
validator('param', async (params, c) => {
|
|
444
|
-
if (!endpoint.input?.params) return undefined;
|
|
445
|
-
const parsed = await Endpoint.validate(endpoint.input.params, params);
|
|
446
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
447
|
-
return parsed.value;
|
|
448
|
-
}),
|
|
449
|
-
];
|
|
450
|
-
|
|
451
|
-
// Only add auth middleware if needed
|
|
452
|
-
if (hasAuthorizer) {
|
|
453
|
-
middlewares.push(async (c, next) => {
|
|
454
|
-
const services = await servicesPromise;
|
|
455
|
-
const headerValues = c.req.header();
|
|
456
|
-
const header = Endpoint.createHeaders(headerValues);
|
|
457
|
-
const cookie = Endpoint.createCookies(headerValues.cookie);
|
|
458
|
-
|
|
459
|
-
const db = hasDatabaseService
|
|
460
|
-
? services[
|
|
461
|
-
endpoint.databaseService?.serviceName as keyof typeof services
|
|
462
|
-
]
|
|
463
|
-
: undefined;
|
|
464
|
-
|
|
465
|
-
const session = await endpoint.getSession({
|
|
466
|
-
services,
|
|
467
|
-
logger: endpoint.logger,
|
|
468
|
-
header,
|
|
469
|
-
cookie,
|
|
470
|
-
...(db !== undefined && { db }),
|
|
471
|
-
} as any);
|
|
472
|
-
|
|
473
|
-
const isAuthorized = await endpoint.authorize({
|
|
474
|
-
header,
|
|
475
|
-
cookie,
|
|
476
|
-
services,
|
|
477
|
-
logger: endpoint.logger,
|
|
478
|
-
session,
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
if (!isAuthorized) {
|
|
482
|
-
return c.json({ error: 'Unauthorized' }, 401);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
c.set('__session' as any, session);
|
|
486
|
-
await next();
|
|
487
|
-
});
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
// Only add event middleware if needed
|
|
491
|
-
if (hasEvents) {
|
|
492
|
-
middlewares.push(async (c, next) => {
|
|
493
|
-
await next();
|
|
494
|
-
|
|
495
|
-
if (Endpoint.isSuccessStatus(c.res.status)) {
|
|
496
|
-
const response = c.get('__response');
|
|
497
|
-
if (response !== undefined) {
|
|
498
|
-
await simulateEventPublish(
|
|
499
|
-
endpoint.events!,
|
|
500
|
-
response,
|
|
501
|
-
endpoint.logger,
|
|
502
|
-
);
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
});
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
// Minimal core handler
|
|
509
|
-
const handler = async (c: Context): Promise<Response> => {
|
|
510
|
-
try {
|
|
511
|
-
const services = await servicesPromise;
|
|
512
|
-
|
|
513
|
-
const db = hasDatabaseService
|
|
514
|
-
? services[
|
|
515
|
-
endpoint.databaseService?.serviceName as keyof typeof services
|
|
516
|
-
]
|
|
517
|
-
: undefined;
|
|
518
|
-
|
|
519
|
-
const headerValues = c.req.header();
|
|
520
|
-
|
|
521
|
-
// Execute handler
|
|
522
|
-
const responseBuilder = new ResponseBuilder();
|
|
523
|
-
const response = await endpoint.handler(
|
|
524
|
-
{
|
|
525
|
-
services,
|
|
526
|
-
logger: endpoint.logger,
|
|
527
|
-
body: c.req.valid('json'),
|
|
528
|
-
query: c.req.valid('query'),
|
|
529
|
-
params: c.req.valid('param'),
|
|
530
|
-
session: hasAuthorizer ? c.get('__session' as any) : undefined,
|
|
531
|
-
header: Endpoint.createHeaders(headerValues),
|
|
532
|
-
cookie: Endpoint.createCookies(headerValues.cookie),
|
|
533
|
-
auditor: undefined,
|
|
534
|
-
db,
|
|
535
|
-
} as any,
|
|
536
|
-
responseBuilder,
|
|
537
|
-
);
|
|
538
|
-
|
|
539
|
-
// Store for event middleware if needed
|
|
540
|
-
if (hasEvents) {
|
|
541
|
-
c.set('__response', response);
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
// Build response
|
|
545
|
-
let data = response;
|
|
546
|
-
let metadata = responseBuilder.getMetadata();
|
|
547
|
-
|
|
548
|
-
if (Endpoint.hasMetadata(response)) {
|
|
549
|
-
data = response.data;
|
|
550
|
-
metadata = response.metadata;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
const output = endpoint.outputSchema
|
|
554
|
-
? await endpoint.parseOutput(data)
|
|
555
|
-
: data;
|
|
556
|
-
|
|
557
|
-
const status = (metadata.status ?? endpoint.status) as any;
|
|
558
|
-
return c.json(output, status);
|
|
559
|
-
} catch (_error) {
|
|
560
|
-
return c.json({ error: 'Internal Server Error' }, 500);
|
|
561
|
-
}
|
|
562
|
-
};
|
|
563
|
-
|
|
564
|
-
// Register route with minimal middleware
|
|
565
|
-
app[method](route, ...validators, ...middlewares, handler);
|
|
566
|
-
}
|
|
567
|
-
}
|