@geekmidas/constructs 9.0.2 → 10.0.0-alpha.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 +71 -44
- package/dist/{AWSScheduledFunction-Bn99MceY.d.cts → AWSScheduledFunction-9bJS4WdJ.d.cts} +8 -3
- package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts.map → AWSScheduledFunction-9bJS4WdJ.d.cts.map} +1 -1
- package/dist/{AWSScheduledFunction-CufMMhGB.mjs → AWSScheduledFunction-BJjj8B5V.mjs} +3 -3
- package/dist/{AWSScheduledFunction-CufMMhGB.mjs.map → AWSScheduledFunction-BJjj8B5V.mjs.map} +1 -1
- package/dist/{AWSScheduledFunction-ysaCsdWx.d.mts → AWSScheduledFunction-BO5iEMSh.d.mts} +9 -4
- package/dist/{AWSScheduledFunction-Bn99MceY.d.cts.map → AWSScheduledFunction-BO5iEMSh.d.mts.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-CdhThxDI.mjs} +3 -2
- package/dist/Construct-CdhThxDI.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/{Endpoint-DgfRslct.d.cts → Endpoint-BKR5QH6O.d.mts} +57 -8
- package/dist/Endpoint-BKR5QH6O.d.mts.map +1 -0
- package/dist/{Endpoint-CLPSIl6S.d.mts → Endpoint-BQ9O0P1w.d.cts} +58 -9
- package/dist/Endpoint-BQ9O0P1w.d.cts.map +1 -0
- package/dist/{lazyAccessors-DfqZR6C4.mjs → Endpoint-BTj58Gob.mjs} +840 -1003
- package/dist/Endpoint-BTj58Gob.mjs.map +1 -0
- package/dist/EndpointFactory-BejSTzbB.mjs +808 -0
- package/dist/EndpointFactory-BejSTzbB.mjs.map +1 -0
- package/dist/EndpointFactory-DYoGLaIT.cjs +850 -0
- package/dist/EndpointFactory-DYoGLaIT.cjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-DJDT3PMx.mjs → HonoEndpointAdaptor-7aYNdqJq.mjs} +5 -4
- package/dist/HonoEndpointAdaptor-7aYNdqJq.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-Cpff1uZH.mjs} +55 -51
- package/dist/functions-Cpff1uZH.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-BVs9DvIj.d.cts → index-BTvozlUD.d.cts} +36 -9
- package/dist/index-BTvozlUD.d.cts.map +1 -0
- package/dist/index-Cvz551AO.d.mts +419 -0
- package/dist/index-Cvz551AO.d.mts.map +1 -0
- package/dist/index-D5zqAJ2e.d.cts +419 -0
- package/dist/index-D5zqAJ2e.d.cts.map +1 -0
- package/dist/{index-DP6fqv0I.d.mts → index-L7pz0R0T.d.mts} +48 -19
- package/dist/index-L7pz0R0T.d.mts.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
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
-
|
|
3
|
-
exports[`HonoEndpointAdaptor > addRoute > should return 422 for invalid body 1`] = `
|
|
4
|
-
[
|
|
5
|
-
{
|
|
6
|
-
"code": "too_small",
|
|
7
|
-
"inclusive": true,
|
|
8
|
-
"message": "Too small: expected string to have >=3 characters",
|
|
9
|
-
"minimum": 3,
|
|
10
|
-
"origin": "string",
|
|
11
|
-
"path": [
|
|
12
|
-
"name",
|
|
13
|
-
],
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"code": "invalid_type",
|
|
17
|
-
"expected": "number",
|
|
18
|
-
"message": "Invalid input: expected number, received string",
|
|
19
|
-
"path": [
|
|
20
|
-
"age",
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
]
|
|
24
|
-
`;
|
|
25
|
-
|
|
26
|
-
exports[`HonoEndpointAdaptor > addRoute > should return 422 for invalid path parameters 1`] = `
|
|
27
|
-
[
|
|
28
|
-
{
|
|
29
|
-
"code": "invalid_format",
|
|
30
|
-
"format": "uuid",
|
|
31
|
-
"message": "Invalid UUID",
|
|
32
|
-
"origin": "string",
|
|
33
|
-
"path": [
|
|
34
|
-
"id",
|
|
35
|
-
],
|
|
36
|
-
"pattern": "/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/",
|
|
37
|
-
},
|
|
38
|
-
]
|
|
39
|
-
`;
|
|
40
|
-
|
|
41
|
-
exports[`HonoEndpointAdaptor > addRoute > should return 422 for invalid query parameters 1`] = `
|
|
42
|
-
[
|
|
43
|
-
{
|
|
44
|
-
"code": "invalid_format",
|
|
45
|
-
"format": "regex",
|
|
46
|
-
"message": "Invalid string: must match pattern /^\\d+$/",
|
|
47
|
-
"origin": "string",
|
|
48
|
-
"path": [
|
|
49
|
-
"page",
|
|
50
|
-
],
|
|
51
|
-
"pattern": "/^\\d+$/",
|
|
52
|
-
},
|
|
53
|
-
]
|
|
54
|
-
`;
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { describe, expectTypeOf, it } from 'vitest';
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
import { e } from '../EndpointFactory';
|
|
4
|
-
|
|
5
|
-
describe('Endpoint type inference', () => {
|
|
6
|
-
it('should not include body/params/query when not defined', () => {
|
|
7
|
-
const _endpoint = e.get('/test').handle((ctx) => {
|
|
8
|
-
expectTypeOf(ctx).toHaveProperty('services');
|
|
9
|
-
expectTypeOf(ctx).toHaveProperty('logger');
|
|
10
|
-
expectTypeOf(ctx).toHaveProperty('header');
|
|
11
|
-
expectTypeOf(ctx).toHaveProperty('session');
|
|
12
|
-
|
|
13
|
-
// These should NOT exist
|
|
14
|
-
expectTypeOf(ctx).not.toHaveProperty('body');
|
|
15
|
-
expectTypeOf(ctx).not.toHaveProperty('params');
|
|
16
|
-
expectTypeOf(ctx).not.toHaveProperty('query');
|
|
17
|
-
|
|
18
|
-
return { success: true };
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should include body when defined', () => {
|
|
23
|
-
const _endpoint = e
|
|
24
|
-
.post('/test')
|
|
25
|
-
.body(z.object({ name: z.string() }))
|
|
26
|
-
.handle((ctx) => {
|
|
27
|
-
expectTypeOf(ctx).toHaveProperty('body');
|
|
28
|
-
expectTypeOf(ctx.body).toEqualTypeOf<{ name: string }>();
|
|
29
|
-
|
|
30
|
-
// These should NOT exist
|
|
31
|
-
expectTypeOf(ctx).not.toHaveProperty('params');
|
|
32
|
-
expectTypeOf(ctx).not.toHaveProperty('query');
|
|
33
|
-
|
|
34
|
-
return { success: true };
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should include params when defined', () => {
|
|
39
|
-
const _endpoint = e
|
|
40
|
-
.get('/test/:id')
|
|
41
|
-
.params(z.object({ id: z.string() }))
|
|
42
|
-
.handle((ctx) => {
|
|
43
|
-
expectTypeOf(ctx).toHaveProperty('params');
|
|
44
|
-
expectTypeOf(ctx.params).toEqualTypeOf<{ id: string }>();
|
|
45
|
-
|
|
46
|
-
// These should NOT exist
|
|
47
|
-
expectTypeOf(ctx).not.toHaveProperty('body');
|
|
48
|
-
expectTypeOf(ctx).not.toHaveProperty('query');
|
|
49
|
-
|
|
50
|
-
return { success: true };
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('should include query when defined', () => {
|
|
55
|
-
const _endpoint = e
|
|
56
|
-
.get('/test')
|
|
57
|
-
.query(z.object({ filter: z.string() }))
|
|
58
|
-
.handle((ctx) => {
|
|
59
|
-
expectTypeOf(ctx).toHaveProperty('query');
|
|
60
|
-
expectTypeOf(ctx.query).toEqualTypeOf<{ filter: string }>();
|
|
61
|
-
|
|
62
|
-
// These should NOT exist
|
|
63
|
-
expectTypeOf(ctx).not.toHaveProperty('body');
|
|
64
|
-
expectTypeOf(ctx).not.toHaveProperty('params');
|
|
65
|
-
|
|
66
|
-
return { success: true };
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('should include all properties when all are defined', () => {
|
|
71
|
-
const _endpoint = e
|
|
72
|
-
.post('/test/:id')
|
|
73
|
-
.body(z.object({ name: z.string() }))
|
|
74
|
-
.params(z.object({ id: z.string() }))
|
|
75
|
-
.query(z.object({ filter: z.string() }))
|
|
76
|
-
.handle((ctx) => {
|
|
77
|
-
expectTypeOf(ctx).toHaveProperty('body');
|
|
78
|
-
expectTypeOf(ctx).toHaveProperty('params');
|
|
79
|
-
expectTypeOf(ctx).toHaveProperty('query');
|
|
80
|
-
|
|
81
|
-
expectTypeOf(ctx.body).toEqualTypeOf<{ name: string }>();
|
|
82
|
-
expectTypeOf(ctx.params).toEqualTypeOf<{ id: string }>();
|
|
83
|
-
expectTypeOf(ctx.query).toEqualTypeOf<{ filter: string }>();
|
|
84
|
-
|
|
85
|
-
return { success: true };
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
});
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import { getProjectRoot } from '../helpers';
|
|
4
|
-
|
|
5
|
-
describe('helpers', () => {
|
|
6
|
-
describe('getProjectRoot', () => {
|
|
7
|
-
it('should find project root from current directory', async () => {
|
|
8
|
-
const cwd = process.cwd();
|
|
9
|
-
const root = await getProjectRoot(cwd);
|
|
10
|
-
// Should find the toolbox root which has pnpm-lock.yaml
|
|
11
|
-
expect(root).toBe(cwd);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('should find project root from nested directory', async () => {
|
|
15
|
-
const cwd = process.cwd();
|
|
16
|
-
const nested = path.join(cwd, 'packages', 'constructs', 'src');
|
|
17
|
-
const root = await getProjectRoot(nested);
|
|
18
|
-
// Should find the toolbox root
|
|
19
|
-
expect(root).toBe(cwd);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should return root when reaching filesystem root', async () => {
|
|
23
|
-
// This tests the base case - when we reach '/', return '/'
|
|
24
|
-
const root = await getProjectRoot('/');
|
|
25
|
-
expect(root).toBe('/');
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('should handle directory with no lock file', async () => {
|
|
29
|
-
// Create a temp directory path that definitely has no lock file
|
|
30
|
-
// It should traverse up until it finds one or reaches root
|
|
31
|
-
const tempPath = '/tmp/test-no-lock-file-12345';
|
|
32
|
-
const root = await getProjectRoot(tempPath);
|
|
33
|
-
// Should eventually reach '/' or find a project root
|
|
34
|
-
expect(typeof root).toBe('string');
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
});
|
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
3
|
-
createApiGatewayCookies,
|
|
4
|
-
createApiGatewayHeaders,
|
|
5
|
-
createCookieHeaderAccessor,
|
|
6
|
-
createNoopCookies,
|
|
7
|
-
createNoopHeaders,
|
|
8
|
-
createObjectHeaders,
|
|
9
|
-
} from '../lazyAccessors';
|
|
10
|
-
|
|
11
|
-
describe('lazyAccessors', () => {
|
|
12
|
-
describe('createApiGatewayHeaders', () => {
|
|
13
|
-
it('should return undefined for single key lookup with null headers', () => {
|
|
14
|
-
const header = createApiGatewayHeaders(null);
|
|
15
|
-
expect(header('content-type')).toBeUndefined();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('should return undefined for single key lookup with undefined headers', () => {
|
|
19
|
-
const header = createApiGatewayHeaders(undefined);
|
|
20
|
-
expect(header('content-type')).toBeUndefined();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('should return empty object for all headers when headers is null', () => {
|
|
24
|
-
const header = createApiGatewayHeaders(null);
|
|
25
|
-
expect(header()).toEqual({});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('should return header value for direct key lookup', () => {
|
|
29
|
-
const header = createApiGatewayHeaders({
|
|
30
|
-
'content-type': 'application/json',
|
|
31
|
-
authorization: 'Bearer token',
|
|
32
|
-
});
|
|
33
|
-
expect(header('content-type')).toBe('application/json');
|
|
34
|
-
expect(header('authorization')).toBe('Bearer token');
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('should handle case-insensitive lookups', () => {
|
|
38
|
-
const header = createApiGatewayHeaders({
|
|
39
|
-
'Content-Type': 'application/json',
|
|
40
|
-
});
|
|
41
|
-
expect(header('content-type')).toBe('application/json');
|
|
42
|
-
expect(header('CONTENT-TYPE')).toBe('application/json');
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('should return all headers normalized to lowercase', () => {
|
|
46
|
-
const header = createApiGatewayHeaders({
|
|
47
|
-
'Content-Type': 'application/json',
|
|
48
|
-
Authorization: 'Bearer token',
|
|
49
|
-
});
|
|
50
|
-
const all = header();
|
|
51
|
-
expect(all).toEqual({
|
|
52
|
-
'content-type': 'application/json',
|
|
53
|
-
authorization: 'Bearer token',
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('should cache normalized headers', () => {
|
|
58
|
-
const headers = {
|
|
59
|
-
'Content-Type': 'application/json',
|
|
60
|
-
};
|
|
61
|
-
const header = createApiGatewayHeaders(headers);
|
|
62
|
-
|
|
63
|
-
// First call should normalize
|
|
64
|
-
const first = header();
|
|
65
|
-
// Second call should return cached
|
|
66
|
-
const second = header();
|
|
67
|
-
|
|
68
|
-
expect(first).toBe(second);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('should skip undefined header values', () => {
|
|
72
|
-
const header = createApiGatewayHeaders({
|
|
73
|
-
'content-type': 'application/json',
|
|
74
|
-
'x-custom': undefined,
|
|
75
|
-
});
|
|
76
|
-
const all = header();
|
|
77
|
-
expect(all).toEqual({
|
|
78
|
-
'content-type': 'application/json',
|
|
79
|
-
});
|
|
80
|
-
expect(header('x-custom')).toBeUndefined();
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('should handle mixed case lookups with fallback to normalized', () => {
|
|
84
|
-
const header = createApiGatewayHeaders({
|
|
85
|
-
'X-Custom-Header': 'value',
|
|
86
|
-
});
|
|
87
|
-
// Direct lookup fails, fallback to normalized
|
|
88
|
-
expect(header('x-custom-header')).toBe('value');
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
describe('createApiGatewayCookies', () => {
|
|
93
|
-
it('should parse cookies from array format (API Gateway v2)', () => {
|
|
94
|
-
const cookie = createApiGatewayCookies(
|
|
95
|
-
['session=abc123', 'user=john'],
|
|
96
|
-
undefined,
|
|
97
|
-
);
|
|
98
|
-
expect(cookie('session')).toBe('abc123');
|
|
99
|
-
expect(cookie('user')).toBe('john');
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('should return all cookies when called without arguments', () => {
|
|
103
|
-
const cookie = createApiGatewayCookies(
|
|
104
|
-
['session=abc123', 'user=john'],
|
|
105
|
-
undefined,
|
|
106
|
-
);
|
|
107
|
-
expect(cookie()).toEqual({
|
|
108
|
-
session: 'abc123',
|
|
109
|
-
user: 'john',
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should fall back to cookie header when cookies array is undefined', () => {
|
|
114
|
-
const cookie = createApiGatewayCookies(
|
|
115
|
-
undefined,
|
|
116
|
-
'session=abc123; user=john',
|
|
117
|
-
);
|
|
118
|
-
expect(cookie('session')).toBe('abc123');
|
|
119
|
-
expect(cookie('user')).toBe('john');
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it('should decode URL-encoded values', () => {
|
|
123
|
-
const cookie = createApiGatewayCookies(
|
|
124
|
-
['name=John%20Doe', 'path=%2Fhome'],
|
|
125
|
-
undefined,
|
|
126
|
-
);
|
|
127
|
-
expect(cookie('name')).toBe('John Doe');
|
|
128
|
-
expect(cookie('path')).toBe('/home');
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it('should decode URL-encoded values from cookie header', () => {
|
|
132
|
-
const cookie = createApiGatewayCookies(
|
|
133
|
-
undefined,
|
|
134
|
-
'name=John%20Doe; path=%2Fhome',
|
|
135
|
-
);
|
|
136
|
-
expect(cookie('name')).toBe('John Doe');
|
|
137
|
-
expect(cookie('path')).toBe('/home');
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('should return undefined for missing cookie', () => {
|
|
141
|
-
const cookie = createApiGatewayCookies(['session=abc123'], undefined);
|
|
142
|
-
expect(cookie('missing')).toBeUndefined();
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it('should return empty object when no cookies present', () => {
|
|
146
|
-
const cookie = createApiGatewayCookies(undefined, undefined);
|
|
147
|
-
expect(cookie()).toEqual({});
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('should cache parsed cookies', () => {
|
|
151
|
-
const cookie = createApiGatewayCookies(['session=abc123'], undefined);
|
|
152
|
-
const first = cookie();
|
|
153
|
-
const second = cookie();
|
|
154
|
-
expect(first).toBe(second);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('should skip malformed cookies in array', () => {
|
|
158
|
-
const cookie = createApiGatewayCookies(
|
|
159
|
-
['valid=value', 'malformed', '=nokey'],
|
|
160
|
-
undefined,
|
|
161
|
-
);
|
|
162
|
-
expect(cookie()).toEqual({
|
|
163
|
-
valid: 'value',
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it('should skip malformed cookies in header', () => {
|
|
168
|
-
const cookie = createApiGatewayCookies(
|
|
169
|
-
undefined,
|
|
170
|
-
'valid=value; malformed; =nokey',
|
|
171
|
-
);
|
|
172
|
-
expect(cookie()).toEqual({
|
|
173
|
-
valid: 'value',
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
describe('createObjectHeaders', () => {
|
|
179
|
-
it('should return header value for direct lookup', () => {
|
|
180
|
-
const header = createObjectHeaders({
|
|
181
|
-
'content-type': 'application/json',
|
|
182
|
-
});
|
|
183
|
-
expect(header('content-type')).toBe('application/json');
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it('should handle case-insensitive lookups', () => {
|
|
187
|
-
const header = createObjectHeaders({
|
|
188
|
-
'Content-Type': 'application/json',
|
|
189
|
-
});
|
|
190
|
-
expect(header('content-type')).toBe('application/json');
|
|
191
|
-
expect(header('CONTENT-TYPE')).toBe('application/json');
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('should return all headers when called without arguments', () => {
|
|
195
|
-
const header = createObjectHeaders({
|
|
196
|
-
'Content-Type': 'application/json',
|
|
197
|
-
Authorization: 'Bearer token',
|
|
198
|
-
});
|
|
199
|
-
expect(header()).toEqual({
|
|
200
|
-
'content-type': 'application/json',
|
|
201
|
-
authorization: 'Bearer token',
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
it('should return undefined for missing header', () => {
|
|
206
|
-
const header = createObjectHeaders({
|
|
207
|
-
'content-type': 'application/json',
|
|
208
|
-
});
|
|
209
|
-
expect(header('missing')).toBeUndefined();
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
it('should return empty object for undefined headers', () => {
|
|
213
|
-
const header = createObjectHeaders(undefined);
|
|
214
|
-
expect(header()).toEqual({});
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it('should return undefined for key lookup with undefined headers', () => {
|
|
218
|
-
const header = createObjectHeaders(undefined);
|
|
219
|
-
expect(header('content-type')).toBeUndefined();
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
it('should cache normalized headers', () => {
|
|
223
|
-
const header = createObjectHeaders({
|
|
224
|
-
'Content-Type': 'application/json',
|
|
225
|
-
});
|
|
226
|
-
const first = header();
|
|
227
|
-
const second = header();
|
|
228
|
-
expect(first).toBe(second);
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
it('should normalize headers on single key lookup that requires fallback', () => {
|
|
232
|
-
const header = createObjectHeaders({
|
|
233
|
-
'X-Custom': 'value',
|
|
234
|
-
});
|
|
235
|
-
// First lookup triggers normalization
|
|
236
|
-
expect(header('x-custom')).toBe('value');
|
|
237
|
-
// Subsequent lookups use cached normalized version
|
|
238
|
-
expect(header('X-CUSTOM')).toBe('value');
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
describe('createCookieHeaderAccessor', () => {
|
|
243
|
-
it('should parse cookies from header string', () => {
|
|
244
|
-
const cookie = createCookieHeaderAccessor('session=abc123; user=john');
|
|
245
|
-
expect(cookie('session')).toBe('abc123');
|
|
246
|
-
expect(cookie('user')).toBe('john');
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
it('should return all cookies when called without arguments', () => {
|
|
250
|
-
const cookie = createCookieHeaderAccessor('session=abc123; user=john');
|
|
251
|
-
expect(cookie()).toEqual({
|
|
252
|
-
session: 'abc123',
|
|
253
|
-
user: 'john',
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
it('should decode URL-encoded values', () => {
|
|
258
|
-
const cookie = createCookieHeaderAccessor(
|
|
259
|
-
'name=John%20Doe; path=%2Fhome',
|
|
260
|
-
);
|
|
261
|
-
expect(cookie('name')).toBe('John Doe');
|
|
262
|
-
expect(cookie('path')).toBe('/home');
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
it('should return undefined for missing cookie', () => {
|
|
266
|
-
const cookie = createCookieHeaderAccessor('session=abc123');
|
|
267
|
-
expect(cookie('missing')).toBeUndefined();
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
it('should return empty object for undefined cookie header', () => {
|
|
271
|
-
const cookie = createCookieHeaderAccessor(undefined);
|
|
272
|
-
expect(cookie()).toEqual({});
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
it('should cache parsed cookies', () => {
|
|
276
|
-
const cookie = createCookieHeaderAccessor('session=abc123');
|
|
277
|
-
const first = cookie();
|
|
278
|
-
const second = cookie();
|
|
279
|
-
expect(first).toBe(second);
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
it('should skip malformed cookies', () => {
|
|
283
|
-
const cookie = createCookieHeaderAccessor(
|
|
284
|
-
'valid=value; malformed; =nokey',
|
|
285
|
-
);
|
|
286
|
-
expect(cookie()).toEqual({
|
|
287
|
-
valid: 'value',
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
it('should handle cookies with equals signs in value', () => {
|
|
292
|
-
const cookie = createCookieHeaderAccessor('token=abc=def=ghi');
|
|
293
|
-
expect(cookie('token')).toBe('abc=def=ghi');
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
it('should handle extra whitespace', () => {
|
|
297
|
-
const cookie = createCookieHeaderAccessor(
|
|
298
|
-
' session=abc123 ; user=john ',
|
|
299
|
-
);
|
|
300
|
-
expect(cookie('session')).toBe('abc123');
|
|
301
|
-
expect(cookie('user')).toBe('john');
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
describe('createNoopHeaders', () => {
|
|
306
|
-
it('should return undefined for any key lookup', () => {
|
|
307
|
-
const header = createNoopHeaders();
|
|
308
|
-
expect(header('content-type')).toBeUndefined();
|
|
309
|
-
expect(header('any-header')).toBeUndefined();
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
it('should return empty object when called without arguments', () => {
|
|
313
|
-
const header = createNoopHeaders();
|
|
314
|
-
expect(header()).toEqual({});
|
|
315
|
-
});
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
describe('createNoopCookies', () => {
|
|
319
|
-
it('should return undefined for any name lookup', () => {
|
|
320
|
-
const cookie = createNoopCookies();
|
|
321
|
-
expect(cookie('session')).toBeUndefined();
|
|
322
|
-
expect(cookie('any-cookie')).toBeUndefined();
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
it('should return empty object when called without arguments', () => {
|
|
326
|
-
const cookie = createNoopCookies();
|
|
327
|
-
expect(cookie()).toEqual({});
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
});
|