@geekmidas/constructs 9.0.2 → 10.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -44
- package/dist/{AWSScheduledFunction-Bn99MceY.d.cts → AWSScheduledFunction-BvFvBsBN.d.cts} +8 -3
- package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts.map → AWSScheduledFunction-BvFvBsBN.d.cts.map} +1 -1
- package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts → AWSScheduledFunction-CVccZO-L.d.mts} +9 -4
- package/dist/{AWSScheduledFunction-Bn99MceY.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-DgfRslct.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-BVs9DvIj.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 -396
- 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-CLPSIl6S.d.mts.map +0 -1
- package/dist/Endpoint-DgfRslct.d.cts.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-BVs9DvIj.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
package/src/Construct.ts
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import type { AuditStorage } from '@geekmidas/audit';
|
|
2
|
-
import {
|
|
3
|
-
SnifferEnvironmentParser,
|
|
4
|
-
type SniffResult,
|
|
5
|
-
sniffWithFireAndForget,
|
|
6
|
-
} from '@geekmidas/envkit/sniffer';
|
|
7
|
-
import type { EventPublisher, MappedEvent } from '@geekmidas/events';
|
|
8
|
-
import type { Logger } from '@geekmidas/logger';
|
|
9
|
-
import type { Service, ServiceContext } from '@geekmidas/services';
|
|
10
|
-
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
11
|
-
import compact from 'lodash.compact';
|
|
12
|
-
|
|
13
|
-
// Cache for service environment variables to handle singleton services
|
|
14
|
-
// Stores both the full list and the optional subset so the same sniff result
|
|
15
|
-
// can satisfy both getEnvironment() and getEnvironment({ markOptional: true }).
|
|
16
|
-
const serviceEnvCache = new Map<
|
|
17
|
-
Service,
|
|
18
|
-
{ envVars: string[]; optionalEnvVars: string[] }
|
|
19
|
-
>();
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Noop context for environment sniffing.
|
|
23
|
-
* Used when calling service.register() to detect env vars without a real request.
|
|
24
|
-
* Returns dummy values since services should only use context in instance methods,
|
|
25
|
-
* not during registration.
|
|
26
|
-
*/
|
|
27
|
-
const snifferContext: ServiceContext = {
|
|
28
|
-
getLogger() {
|
|
29
|
-
// Return a noop logger for sniffing - services shouldn't log during registration
|
|
30
|
-
return {
|
|
31
|
-
debug: () => {},
|
|
32
|
-
info: () => {},
|
|
33
|
-
warn: () => {},
|
|
34
|
-
error: () => {},
|
|
35
|
-
child: () => snifferContext.getLogger(),
|
|
36
|
-
} as unknown as Logger;
|
|
37
|
-
},
|
|
38
|
-
getRequestId() {
|
|
39
|
-
return 'sniffer-context';
|
|
40
|
-
},
|
|
41
|
-
getRequestStartTime() {
|
|
42
|
-
return Date.now();
|
|
43
|
-
},
|
|
44
|
-
hasContext() {
|
|
45
|
-
return false;
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export abstract class Construct<
|
|
50
|
-
TLogger extends Logger = Logger,
|
|
51
|
-
TServiceName extends string = string,
|
|
52
|
-
T extends EventPublisher<any> | undefined = undefined,
|
|
53
|
-
OutSchema extends StandardSchemaV1 | undefined = undefined,
|
|
54
|
-
TServices extends Service[] = [],
|
|
55
|
-
TAuditStorageServiceName extends string = string,
|
|
56
|
-
TAuditStorage extends AuditStorage | undefined = undefined,
|
|
57
|
-
TDatabaseServiceName extends string = string,
|
|
58
|
-
TDatabase = unknown,
|
|
59
|
-
> {
|
|
60
|
-
/** Database service for this construct (used by Endpoint for RLS/audit context) */
|
|
61
|
-
public databaseService?: Service<TDatabaseServiceName, TDatabase>;
|
|
62
|
-
|
|
63
|
-
constructor(
|
|
64
|
-
public readonly type: ConstructType,
|
|
65
|
-
public readonly logger: TLogger,
|
|
66
|
-
public readonly services: TServices,
|
|
67
|
-
public readonly events: MappedEvent<T, any>[] = [],
|
|
68
|
-
|
|
69
|
-
public readonly publisherService?: Service<TServiceName, T>,
|
|
70
|
-
public outputSchema?: OutSchema,
|
|
71
|
-
public readonly timeout?: number,
|
|
72
|
-
public readonly memorySize?: number,
|
|
73
|
-
public readonly auditorStorageService?: Service<
|
|
74
|
-
TAuditStorageServiceName,
|
|
75
|
-
TAuditStorage
|
|
76
|
-
>,
|
|
77
|
-
) {}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Returns an array of environment variable names required by this construct's services.
|
|
81
|
-
* This is determined by running a "sniffer" EnvironmentParser through each service's
|
|
82
|
-
* register method to track which environment variables are accessed.
|
|
83
|
-
*
|
|
84
|
-
* Results are cached per service class to handle singleton patterns where
|
|
85
|
-
* subsequent register() calls may short-circuit and not access env vars.
|
|
86
|
-
*
|
|
87
|
-
* @param markOptional - When true, optional vars (those accessed via `.optional()` or
|
|
88
|
-
* `.default()`) are suffixed with `?` in the returned array (e.g. `'PORT?'`).
|
|
89
|
-
* @returns Promise that resolves to array of environment variable names, sorted alphabetically
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* ```typescript
|
|
93
|
-
* const endpoint = e
|
|
94
|
-
* .services([databaseService, authService])
|
|
95
|
-
* .get('/users')
|
|
96
|
-
* .handle(async () => []);
|
|
97
|
-
*
|
|
98
|
-
* await endpoint.getEnvironment(); // ['AUTH_SECRET', 'DATABASE_URL']
|
|
99
|
-
* await endpoint.getEnvironment({ markOptional: true }); // ['AUTH_SECRET', 'DATABASE_URL', 'PORT?']
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
async getEnvironment(
|
|
103
|
-
opts: { markOptional?: boolean } = {},
|
|
104
|
-
): Promise<string[]> {
|
|
105
|
-
const { markOptional = false } = opts;
|
|
106
|
-
const envVars = new Set<string>();
|
|
107
|
-
const optionalVars = new Set<string>();
|
|
108
|
-
const services: Service[] = compact([
|
|
109
|
-
...this.services,
|
|
110
|
-
this.publisherService,
|
|
111
|
-
this.publisherService,
|
|
112
|
-
this.auditorStorageService,
|
|
113
|
-
this.databaseService,
|
|
114
|
-
]);
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
for (const service of services) {
|
|
118
|
-
// Check cache first - handles singleton services that short-circuit
|
|
119
|
-
if (serviceEnvCache.has(service)) {
|
|
120
|
-
const cached = serviceEnvCache.get(service)!;
|
|
121
|
-
cached.envVars.forEach((v) => envVars.add(v));
|
|
122
|
-
cached.optionalEnvVars.forEach((v) => optionalVars.add(v));
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Use sniffService to properly handle all error scenarios
|
|
127
|
-
const result = await sniffService(service);
|
|
128
|
-
|
|
129
|
-
// Log any issues for debugging
|
|
130
|
-
if (result.error) {
|
|
131
|
-
this.logger.warn(
|
|
132
|
-
{ error: result.error.message, service: service.serviceName },
|
|
133
|
-
'Service threw error during env sniffing (env vars still captured)',
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
if (result.unhandledRejections.length > 0) {
|
|
137
|
-
this.logger.warn(
|
|
138
|
-
{
|
|
139
|
-
errors: result.unhandledRejections.map((e) => e.message),
|
|
140
|
-
service: service.serviceName,
|
|
141
|
-
},
|
|
142
|
-
'Fire-and-forget rejections during env sniffing (suppressed)',
|
|
143
|
-
);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Cache and collect env vars (both required and optional)
|
|
147
|
-
serviceEnvCache.set(service, {
|
|
148
|
-
envVars: result.envVars,
|
|
149
|
-
optionalEnvVars: result.optionalEnvVars,
|
|
150
|
-
});
|
|
151
|
-
result.envVars.forEach((v) => envVars.add(v));
|
|
152
|
-
result.optionalEnvVars.forEach((v) => optionalVars.add(v));
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const sorted = Array.from(envVars).sort();
|
|
156
|
-
if (!markOptional || optionalVars.size === 0) return sorted;
|
|
157
|
-
return sorted.map((v) => (optionalVars.has(v) ? `${v}?` : v));
|
|
158
|
-
} catch (error) {
|
|
159
|
-
this.logger.error(
|
|
160
|
-
{ error },
|
|
161
|
-
'Error determining environment variables for construct',
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
return [];
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export enum ConstructType {
|
|
170
|
-
Cron = 'dev.geekmidas.function.cron',
|
|
171
|
-
Endpoint = 'dev.geekmidas.function.endpoint',
|
|
172
|
-
Function = 'dev.geekmidas.function.function',
|
|
173
|
-
Subscriber = 'dev.geekmidas.function.subscriber',
|
|
174
|
-
Queue = 'dev.geekmidas.function.queue',
|
|
175
|
-
Topic = 'dev.geekmidas.resource.topic',
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Utility to test sniffing a service for environment variables.
|
|
180
|
-
* Useful for debugging services that throw errors during sniffing.
|
|
181
|
-
*
|
|
182
|
-
* @example
|
|
183
|
-
* ```typescript
|
|
184
|
-
* import { sniffService } from '@geekmidas/constructs';
|
|
185
|
-
* import { authService } from './services/AuthService';
|
|
186
|
-
*
|
|
187
|
-
* const result = await sniffService(authService);
|
|
188
|
-
* console.log('Env vars:', result.envVars);
|
|
189
|
-
* console.log('Error:', result.error);
|
|
190
|
-
* ```
|
|
191
|
-
*/
|
|
192
|
-
export async function sniffService(service: Service): Promise<SniffResult> {
|
|
193
|
-
const sniffer = new SnifferEnvironmentParser();
|
|
194
|
-
|
|
195
|
-
return sniffWithFireAndForget(sniffer, () =>
|
|
196
|
-
service.register({
|
|
197
|
-
envParser: sniffer as any,
|
|
198
|
-
context: snifferContext,
|
|
199
|
-
}),
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Export for testing
|
|
204
|
-
export { snifferContext };
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Build-Time Optimization Benchmarks
|
|
3
|
-
*
|
|
4
|
-
* Compares:
|
|
5
|
-
* - Raw Hono (baseline)
|
|
6
|
-
* - HonoEndpoint.addRoutes (current runtime approach)
|
|
7
|
-
* - Build-time generated inline handlers (Phase 2 optimization)
|
|
8
|
-
*
|
|
9
|
-
* Run with: pnpm bench packages/constructs/src/__benchmarks__/build-time-optimization.bench.ts
|
|
10
|
-
*/
|
|
11
|
-
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
12
|
-
import { ServiceDiscovery } from '@geekmidas/services';
|
|
13
|
-
import { Hono } from 'hono';
|
|
14
|
-
import { validator } from 'hono/validator';
|
|
15
|
-
import { bench, describe } from 'vitest';
|
|
16
|
-
import { Endpoint, ResponseBuilder } from '../endpoints';
|
|
17
|
-
import { HonoEndpoint } from '../endpoints/HonoEndpointAdaptor';
|
|
18
|
-
import {
|
|
19
|
-
authEndpoint,
|
|
20
|
-
mockLogger,
|
|
21
|
-
postEndpoint,
|
|
22
|
-
simpleEndpoint,
|
|
23
|
-
} from './fixtures';
|
|
24
|
-
|
|
25
|
-
const envParser = new EnvironmentParser({});
|
|
26
|
-
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Build-Time Generated Style: Validator Factories (reusable)
|
|
29
|
-
// ============================================================================
|
|
30
|
-
|
|
31
|
-
const validateBody = (endpoint: any) =>
|
|
32
|
-
validator('json', async (value, c) => {
|
|
33
|
-
if (!endpoint.input?.body) return undefined;
|
|
34
|
-
const parsed = await Endpoint.validate(endpoint.input.body, value);
|
|
35
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
36
|
-
return parsed.value;
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
const _validateQuery = (endpoint: any) =>
|
|
40
|
-
validator('query', async (_, c) => {
|
|
41
|
-
if (!endpoint.input?.query) return undefined;
|
|
42
|
-
const rawQuery = Object.fromEntries(new URL(c.req.url).searchParams);
|
|
43
|
-
const parsed = await Endpoint.validate(endpoint.input.query, rawQuery);
|
|
44
|
-
if (parsed.issues) return c.json(parsed.issues, 422);
|
|
45
|
-
return parsed.value;
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// ============================================================================
|
|
49
|
-
// App Setup: Raw Hono (baseline)
|
|
50
|
-
// ============================================================================
|
|
51
|
-
|
|
52
|
-
const rawHonoApp = new Hono();
|
|
53
|
-
rawHonoApp.get('/health', (c) =>
|
|
54
|
-
c.json({ status: 'ok', timestamp: Date.now() }),
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// App Setup: HonoEndpoint.addRoutes (current runtime approach)
|
|
59
|
-
// ============================================================================
|
|
60
|
-
|
|
61
|
-
const runtimeApp = new Hono();
|
|
62
|
-
const runtimeServiceDiscovery = ServiceDiscovery.getInstance(envParser);
|
|
63
|
-
HonoEndpoint.addRoutes(
|
|
64
|
-
[simpleEndpoint] as any,
|
|
65
|
-
runtimeServiceDiscovery as any,
|
|
66
|
-
runtimeApp,
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
// ============================================================================
|
|
70
|
-
// App Setup: Build-Time Generated Minimal Handler
|
|
71
|
-
// ============================================================================
|
|
72
|
-
|
|
73
|
-
const buildTimeMinimalApp = new Hono();
|
|
74
|
-
// Simulates generated code for minimal-tier endpoint (no auth, no services)
|
|
75
|
-
buildTimeMinimalApp.get('/health', async (c) => {
|
|
76
|
-
const result = await simpleEndpoint.handler(
|
|
77
|
-
{
|
|
78
|
-
services: {},
|
|
79
|
-
logger: mockLogger,
|
|
80
|
-
body: undefined,
|
|
81
|
-
query: undefined,
|
|
82
|
-
params: undefined,
|
|
83
|
-
session: undefined,
|
|
84
|
-
header: Endpoint.createHeaders(c.req.header()),
|
|
85
|
-
cookie: Endpoint.createCookies(c.req.header().cookie),
|
|
86
|
-
auditor: undefined,
|
|
87
|
-
db: undefined,
|
|
88
|
-
} as any,
|
|
89
|
-
{ getMetadata: () => ({}) } as any,
|
|
90
|
-
);
|
|
91
|
-
return c.json(result, simpleEndpoint.status as any);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// ============================================================================
|
|
95
|
-
// App Setup: Build-Time Generated Standard Handler (with auth)
|
|
96
|
-
// ============================================================================
|
|
97
|
-
|
|
98
|
-
const buildTimeStandardApp = new Hono();
|
|
99
|
-
const standardServiceDiscovery = ServiceDiscovery.getInstance(envParser);
|
|
100
|
-
|
|
101
|
-
// Simulates generated code for standard-tier endpoint (auth + services)
|
|
102
|
-
buildTimeStandardApp.get('/profile', async (c) => {
|
|
103
|
-
const headerValues = c.req.header();
|
|
104
|
-
const header = Endpoint.createHeaders(headerValues);
|
|
105
|
-
const cookie = Endpoint.createCookies(headerValues.cookie);
|
|
106
|
-
|
|
107
|
-
const services = await standardServiceDiscovery.register(
|
|
108
|
-
authEndpoint.services,
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// Authentication
|
|
112
|
-
const session = await authEndpoint.getSession({
|
|
113
|
-
services,
|
|
114
|
-
logger: mockLogger,
|
|
115
|
-
header,
|
|
116
|
-
cookie,
|
|
117
|
-
} as any);
|
|
118
|
-
|
|
119
|
-
const isAuthorized = await authEndpoint.authorize({
|
|
120
|
-
header,
|
|
121
|
-
cookie,
|
|
122
|
-
services,
|
|
123
|
-
logger: mockLogger,
|
|
124
|
-
session,
|
|
125
|
-
} as any);
|
|
126
|
-
|
|
127
|
-
if (!isAuthorized) {
|
|
128
|
-
return c.json({ error: 'Unauthorized' }, 401);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const responseBuilder = new ResponseBuilder();
|
|
132
|
-
const result = await authEndpoint.handler(
|
|
133
|
-
{
|
|
134
|
-
services,
|
|
135
|
-
logger: mockLogger,
|
|
136
|
-
body: undefined,
|
|
137
|
-
query: undefined,
|
|
138
|
-
params: undefined,
|
|
139
|
-
session,
|
|
140
|
-
header,
|
|
141
|
-
cookie,
|
|
142
|
-
auditor: undefined,
|
|
143
|
-
db: undefined,
|
|
144
|
-
} as any,
|
|
145
|
-
responseBuilder,
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
const status = (responseBuilder.getMetadata().status ??
|
|
149
|
-
authEndpoint.status) as any;
|
|
150
|
-
return c.json(result, status);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
// Runtime version of auth endpoint for comparison
|
|
154
|
-
const runtimeAuthApp = new Hono();
|
|
155
|
-
HonoEndpoint.addRoutes(
|
|
156
|
-
[authEndpoint] as any,
|
|
157
|
-
standardServiceDiscovery as any,
|
|
158
|
-
runtimeAuthApp,
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
// ============================================================================
|
|
162
|
-
// App Setup: Build-Time Generated with Body Validation
|
|
163
|
-
// ============================================================================
|
|
164
|
-
|
|
165
|
-
const buildTimeBodyApp = new Hono();
|
|
166
|
-
const bodyServiceDiscovery = ServiceDiscovery.getInstance(envParser);
|
|
167
|
-
|
|
168
|
-
// Simulates generated code with body validation
|
|
169
|
-
buildTimeBodyApp.post('/users', validateBody(postEndpoint), async (c) => {
|
|
170
|
-
const headerValues = c.req.header();
|
|
171
|
-
const header = Endpoint.createHeaders(headerValues);
|
|
172
|
-
const cookie = Endpoint.createCookies(headerValues.cookie);
|
|
173
|
-
|
|
174
|
-
const services = await bodyServiceDiscovery.register(postEndpoint.services);
|
|
175
|
-
|
|
176
|
-
const responseBuilder = new ResponseBuilder();
|
|
177
|
-
const result = await postEndpoint.handler(
|
|
178
|
-
{
|
|
179
|
-
services,
|
|
180
|
-
logger: mockLogger,
|
|
181
|
-
body: (c.req.valid as any)('json'),
|
|
182
|
-
query: undefined,
|
|
183
|
-
params: undefined,
|
|
184
|
-
session: undefined,
|
|
185
|
-
header,
|
|
186
|
-
cookie,
|
|
187
|
-
auditor: undefined,
|
|
188
|
-
db: undefined,
|
|
189
|
-
} as any,
|
|
190
|
-
responseBuilder,
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
const status = (responseBuilder.getMetadata().status ??
|
|
194
|
-
postEndpoint.status) as any;
|
|
195
|
-
return c.json(result, status);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// Runtime version for comparison
|
|
199
|
-
const runtimeBodyApp = new Hono();
|
|
200
|
-
HonoEndpoint.addRoutes(
|
|
201
|
-
[postEndpoint] as any,
|
|
202
|
-
bodyServiceDiscovery as any,
|
|
203
|
-
runtimeBodyApp,
|
|
204
|
-
);
|
|
205
|
-
|
|
206
|
-
// ============================================================================
|
|
207
|
-
// Request Helpers
|
|
208
|
-
// ============================================================================
|
|
209
|
-
|
|
210
|
-
function createRequest(
|
|
211
|
-
path: string,
|
|
212
|
-
options: {
|
|
213
|
-
method?: string;
|
|
214
|
-
body?: unknown;
|
|
215
|
-
headers?: Record<string, string>;
|
|
216
|
-
} = {},
|
|
217
|
-
): Request {
|
|
218
|
-
const { method = 'GET', body, headers = {} } = options;
|
|
219
|
-
const init: RequestInit = {
|
|
220
|
-
method,
|
|
221
|
-
headers: { 'Content-Type': 'application/json', ...headers },
|
|
222
|
-
};
|
|
223
|
-
if (body) init.body = JSON.stringify(body);
|
|
224
|
-
return new Request(`http://localhost${path}`, init) as Request;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// ============================================================================
|
|
228
|
-
// Benchmarks
|
|
229
|
-
// ============================================================================
|
|
230
|
-
|
|
231
|
-
describe('Build-Time vs Runtime: Minimal Endpoint (GET /health)', () => {
|
|
232
|
-
const req = createRequest('/health');
|
|
233
|
-
|
|
234
|
-
bench('Raw Hono (baseline)', async () => {
|
|
235
|
-
await rawHonoApp.fetch(req);
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
bench('HonoEndpoint.addRoutes (runtime)', async () => {
|
|
239
|
-
await runtimeApp.fetch(req);
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
bench('Build-time generated (minimal tier)', async () => {
|
|
243
|
-
await buildTimeMinimalApp.fetch(req);
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
describe('Build-Time vs Runtime: Auth Endpoint (GET /profile)', () => {
|
|
248
|
-
const req = createRequest('/profile', {
|
|
249
|
-
headers: { Authorization: 'Bearer test-token' },
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
bench('HonoEndpoint.addRoutes (runtime)', async () => {
|
|
253
|
-
await runtimeAuthApp.fetch(req);
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
bench('Build-time generated (standard tier)', async () => {
|
|
257
|
-
await buildTimeStandardApp.fetch(req);
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
describe('Build-Time vs Runtime: Body Validation (POST /users)', () => {
|
|
262
|
-
const req = createRequest('/users', {
|
|
263
|
-
method: 'POST',
|
|
264
|
-
body: { name: 'Test User', email: 'test@example.com' },
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
bench('HonoEndpoint.addRoutes (runtime)', async () => {
|
|
268
|
-
await runtimeBodyApp.fetch(req);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
bench('Build-time generated (standard tier)', async () => {
|
|
272
|
-
await buildTimeBodyApp.fetch(req);
|
|
273
|
-
});
|
|
274
|
-
});
|