@geekmidas/constructs 10.0.0-alpha.2 → 10.0.0-alpha.21
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 +46 -3
- package/dist/{Construct-Ct8nalEi.d.mts → Construct-DTqYvkPG.d.cts} +11 -13
- package/dist/Construct-DTqYvkPG.d.cts.map +1 -0
- package/dist/{Construct-BD5neF7w.mjs → Construct-Detz65RA.mjs} +31 -29
- package/dist/Construct-Detz65RA.mjs.map +1 -0
- package/dist/{Construct-C0ijr2qp.d.cts → Construct-pVadmURD.d.mts} +10 -12
- package/dist/Construct-pVadmURD.d.mts.map +1 -0
- package/dist/{Construct-CyS3RpTL.cjs → Construct-yG9Sw-5p.cjs} +51 -43
- package/dist/Construct-yG9Sw-5p.cjs.map +1 -0
- package/dist/{Cron-ByxdOfpE.d.mts → Cron-AYpQq725.d.mts} +13 -6
- package/dist/Cron-AYpQq725.d.mts.map +1 -0
- package/dist/{Cron-Wqh464aO.d.cts → Cron-Bdcg9OAL.d.cts} +12 -5
- package/dist/Cron-Bdcg9OAL.d.cts.map +1 -0
- package/dist/{CronBuilder-BL0AP6fs.d.mts → CronBuilder-DR21m9h2.d.cts} +7 -10
- package/dist/CronBuilder-DR21m9h2.d.cts.map +1 -0
- package/dist/{CronBuilder-BqpEzMPQ.d.cts → CronBuilder-DeBnPVIT.d.mts} +7 -10
- package/dist/CronBuilder-DeBnPVIT.d.mts.map +1 -0
- package/dist/{CronBuilder-BmABazzH.mjs → CronBuilder-vkjuo1UP.mjs} +23 -15
- package/dist/CronBuilder-vkjuo1UP.mjs.map +1 -0
- package/dist/{CronBuilder-CkXPJiGO.cjs → CronBuilder-zdTdaT-e.cjs} +33 -25
- package/dist/CronBuilder-zdTdaT-e.cjs.map +1 -0
- package/dist/{Endpoint-2Wg7T7Cq.d.mts → Endpoint-BxkRWQ8G.d.mts} +63 -84
- package/dist/Endpoint-BxkRWQ8G.d.mts.map +1 -0
- package/dist/{Endpoint-BiaaMEn_.cjs → Endpoint-CtiPUpRX.cjs} +145 -131
- package/dist/Endpoint-CtiPUpRX.cjs.map +1 -0
- package/dist/{Endpoint-VIOpSo0S.mjs → Endpoint-DCr5tlbJ.mjs} +117 -109
- package/dist/Endpoint-DCr5tlbJ.mjs.map +1 -0
- package/dist/{Endpoint-CH9Fn1AD.d.cts → Endpoint-DbYQJgb-.d.cts} +61 -82
- package/dist/Endpoint-DbYQJgb-.d.cts.map +1 -0
- package/dist/{EndpointFactory-DTTCkGEL.mjs → EndpointFactory-Bs8pu-yY.mjs} +20 -29
- package/dist/EndpointFactory-Bs8pu-yY.mjs.map +1 -0
- package/dist/{index-BxHDdy6a.d.mts → EndpointFactory-DE6nKtFZ.d.cts} +12 -92
- package/dist/EndpointFactory-DE6nKtFZ.d.cts.map +1 -0
- package/dist/{index-V2nksZIJ.d.cts → EndpointFactory-T06kTFHg.d.mts} +12 -92
- package/dist/EndpointFactory-T06kTFHg.d.mts.map +1 -0
- package/dist/{EndpointFactory-ChxLZllA.cjs → EndpointFactory-vE2C1NG1.cjs} +57 -66
- package/dist/EndpointFactory-vE2C1NG1.cjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-NKQQQbBY.mjs → HonoEndpointAdaptor-Be6UdK0r.mjs} +40 -47
- package/dist/{HonoEndpointAdaptor-D233Jvpk.cjs.map → HonoEndpointAdaptor-Be6UdK0r.mjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-D233Jvpk.cjs → HonoEndpointAdaptor-C9aivwKl.cjs} +48 -52
- package/dist/HonoEndpointAdaptor-C9aivwKl.cjs.map +1 -0
- package/dist/{Queue-D7ZuwBhy.d.cts → Queue-Bhzi2WQC.d.cts} +8 -9
- package/dist/Queue-Bhzi2WQC.d.cts.map +1 -0
- package/dist/{Queue-gVGfi2Yk.d.mts → Queue-BoUA-e83.d.mts} +9 -10
- package/dist/Queue-BoUA-e83.d.mts.map +1 -0
- package/dist/{Subscriber-2mEi0ImH.d.cts → Subscriber-CIO3pwji.d.mts} +7 -8
- package/dist/Subscriber-CIO3pwji.d.mts.map +1 -0
- package/dist/{Subscriber-xTJ9ayPN.d.mts → Subscriber-DQCaiOXF.d.cts} +7 -8
- package/dist/Subscriber-DQCaiOXF.d.cts.map +1 -0
- package/dist/{SubscriberBuilder-BjkbeT9l.mjs → SubscriberBuilder-B4YRTBng.mjs} +16 -10
- package/dist/SubscriberBuilder-B4YRTBng.mjs.map +1 -0
- package/dist/{SubscriberBuilder-4OPehf2R.cjs → SubscriberBuilder-C2bCOuPT.cjs} +28 -23
- package/dist/SubscriberBuilder-C2bCOuPT.cjs.map +1 -0
- package/dist/{SubscriberBuilder-Dptmo-1A.d.mts → SubscriberBuilder-ChX5v948.d.cts} +8 -11
- package/dist/SubscriberBuilder-ChX5v948.d.cts.map +1 -0
- package/dist/{SubscriberBuilder-waNhzjSM.d.cts → SubscriberBuilder-Dbiaskfi.d.mts} +8 -11
- package/dist/SubscriberBuilder-Dbiaskfi.d.mts.map +1 -0
- package/dist/{Topic-19QeHBIR.d.cts → Topic-D6blllEn.d.cts} +5 -7
- package/dist/Topic-D6blllEn.d.cts.map +1 -0
- package/dist/{Topic-DuFeqkBh.d.mts → Topic-DVvheJ_-.d.mts} +6 -8
- package/dist/Topic-DVvheJ_-.d.mts.map +1 -0
- package/dist/adaptors/aws.cjs +87 -106
- package/dist/adaptors/aws.cjs.map +1 -1
- package/dist/adaptors/aws.d.cts +14 -27
- package/dist/adaptors/aws.d.cts.map +1 -1
- package/dist/adaptors/aws.d.mts +16 -29
- package/dist/adaptors/aws.d.mts.map +1 -1
- package/dist/adaptors/aws.mjs +60 -81
- package/dist/adaptors/aws.mjs.map +1 -1
- package/dist/adaptors/hono.cjs +3 -10
- package/dist/adaptors/hono.d.cts +5 -13
- package/dist/adaptors/hono.d.cts.map +1 -1
- package/dist/adaptors/hono.d.mts +7 -15
- package/dist/adaptors/hono.d.mts.map +1 -1
- package/dist/adaptors/hono.mjs +2 -10
- package/dist/adaptors/testing.cjs +271 -82
- package/dist/adaptors/testing.cjs.map +1 -1
- package/dist/adaptors/testing.d.cts +62 -33
- package/dist/adaptors/testing.d.cts.map +1 -1
- package/dist/adaptors/testing.d.mts +63 -34
- package/dist/adaptors/testing.d.mts.map +1 -1
- package/dist/adaptors/testing.mjs +249 -63
- package/dist/adaptors/testing.mjs.map +1 -1
- package/dist/auth-BlO8MUkR.d.cts +123 -0
- package/dist/auth-BlO8MUkR.d.cts.map +1 -0
- package/dist/auth-CHWIdcQO.d.mts +123 -0
- package/dist/auth-CHWIdcQO.d.mts.map +1 -0
- package/dist/auth.cjs +41 -16
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.d.cts +2 -108
- package/dist/auth.d.mts +2 -108
- package/dist/auth.mjs +32 -8
- package/dist/auth.mjs.map +1 -1
- package/dist/{cache-BrRz3fEB.d.mts → cache-AgQUMma6.d.mts} +3 -6
- package/dist/cache-AgQUMma6.d.mts.map +1 -0
- package/dist/{cache-BtZY_tHe.d.cts → cache-obq0fOIM.d.cts} +3 -6
- package/dist/cache-obq0fOIM.d.cts.map +1 -0
- package/dist/cache.cjs +68 -2
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.cts +1 -2
- package/dist/cache.d.mts +1 -2
- package/dist/cache.mjs +67 -2
- package/dist/cache.mjs.map +1 -0
- package/dist/{clone-DblgEZZa.mjs → clone-EKNovYHu.mjs} +3 -3
- package/dist/clone-EKNovYHu.mjs.map +1 -0
- package/dist/{clone-Dy0cR2SZ.cjs → clone-UGJpvQnL.cjs} +7 -8
- package/dist/clone-UGJpvQnL.cjs.map +1 -0
- package/dist/{construct-interface-g5GM5pwR.d.mts → construct-interface-Clz7_BwB.d.mts} +15 -6
- package/dist/construct-interface-Clz7_BwB.d.mts.map +1 -0
- package/dist/{construct-interface-D9d4Gm4p.d.cts → construct-interface-DIaTNKax.d.cts} +15 -6
- package/dist/construct-interface-DIaTNKax.d.cts.map +1 -0
- package/dist/construct-interface.cjs +87 -7
- package/dist/construct-interface.cjs.map +1 -0
- package/dist/construct-interface.d.cts +2 -2
- package/dist/construct-interface.d.mts +2 -2
- package/dist/construct-interface.mjs +81 -2
- package/dist/construct-interface.mjs.map +1 -0
- package/dist/credential.cjs +43 -9
- package/dist/credential.cjs.map +1 -1
- package/dist/credential.d.cts +5 -8
- package/dist/credential.d.cts.map +1 -1
- package/dist/credential.d.mts +5 -8
- package/dist/credential.d.mts.map +1 -1
- package/dist/credential.mjs +36 -2
- package/dist/credential.mjs.map +1 -1
- package/dist/crons/index.cjs +68 -10
- package/dist/crons/index.cjs.map +1 -1
- package/dist/crons/index.d.cts +32 -14
- package/dist/crons/index.d.cts.map +1 -1
- package/dist/crons/index.d.mts +32 -14
- package/dist/crons/index.d.mts.map +1 -1
- package/dist/crons/index.mjs +66 -10
- package/dist/crons/index.mjs.map +1 -1
- package/dist/database/kysely.cjs +28 -14
- package/dist/database/kysely.cjs.map +1 -1
- package/dist/database/kysely.d.cts +2 -152
- package/dist/database/kysely.d.mts +2 -152
- package/dist/database/kysely.mjs +16 -4
- package/dist/database/kysely.mjs.map +1 -1
- package/dist/email.cjs +25 -12
- package/dist/email.cjs.map +1 -1
- package/dist/email.d.cts +3 -7
- package/dist/email.d.cts.map +1 -1
- package/dist/email.d.mts +3 -7
- package/dist/email.d.mts.map +1 -1
- package/dist/email.mjs +16 -3
- package/dist/email.mjs.map +1 -1
- package/dist/endpoints/index.cjs +7 -10
- package/dist/endpoints/index.d.cts +60 -7
- package/dist/endpoints/index.d.cts.map +1 -0
- package/dist/endpoints/index.d.mts +60 -7
- package/dist/endpoints/index.d.mts.map +1 -0
- package/dist/endpoints/index.mjs +5 -10
- package/dist/file-server.cjs +42 -10
- package/dist/file-server.cjs.map +1 -1
- package/dist/file-server.d.cts +6 -10
- package/dist/file-server.d.cts.map +1 -1
- package/dist/file-server.d.mts +6 -10
- package/dist/file-server.d.mts.map +1 -1
- package/dist/file-server.mjs +34 -2
- package/dist/file-server.mjs.map +1 -1
- package/dist/functions/index.cjs +2 -6
- package/dist/functions/index.d.cts +2 -4
- package/dist/functions/index.d.mts +2 -4
- package/dist/functions/index.mjs +2 -6
- package/dist/{functions-Bd3TPxid.cjs → functions-VnOTEp74.cjs} +309 -264
- package/dist/functions-VnOTEp74.cjs.map +1 -0
- package/dist/{functions-Cxbo-pEd.mjs → functions-faoJOUmr.mjs} +282 -234
- package/dist/functions-faoJOUmr.mjs.map +1 -0
- package/dist/index-CeEtxDmK.d.cts +79 -0
- package/dist/index-CeEtxDmK.d.cts.map +1 -0
- package/dist/index-CeEtxDmK.d.mts +79 -0
- package/dist/index-CeEtxDmK.d.mts.map +1 -0
- package/dist/{index-JSf9xNIJ.d.cts → index-DU3Twmwh.d.mts} +19 -24
- package/dist/index-DU3Twmwh.d.mts.map +1 -0
- package/dist/index-fnpjXiA-.d.mts +26 -0
- package/dist/index-fnpjXiA-.d.mts.map +1 -0
- package/dist/{index-CubPzHd9.d.mts → index-nBQT1tAh.d.cts} +19 -24
- package/dist/index-nBQT1tAh.d.cts.map +1 -0
- package/dist/index-tE_119SX.d.cts +26 -0
- package/dist/index-tE_119SX.d.cts.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +2 -3
- package/dist/kysely-CXi49zc2.d.cts +150 -0
- package/dist/kysely-CXi49zc2.d.cts.map +1 -0
- package/dist/kysely-D3-G5b0j.d.mts +150 -0
- package/dist/kysely-D3-G5b0j.d.mts.map +1 -0
- package/dist/{lazyAccessors-BoJN3SMd.mjs → lazyAccessors-BHtcqgz2.mjs} +22 -25
- package/dist/lazyAccessors-BHtcqgz2.mjs.map +1 -0
- package/dist/{lazyAccessors-e3j2oE2m.cjs → lazyAccessors-Dx9NLwJZ.cjs} +72 -76
- package/dist/lazyAccessors-Dx9NLwJZ.cjs.map +1 -0
- package/dist/object-storage.cjs +18 -10
- package/dist/object-storage.cjs.map +1 -1
- package/dist/object-storage.d.cts +3 -7
- package/dist/object-storage.d.cts.map +1 -1
- package/dist/object-storage.d.mts +3 -7
- package/dist/object-storage.d.mts.map +1 -1
- package/dist/object-storage.mjs +11 -3
- package/dist/object-storage.mjs.map +1 -1
- package/dist/{processAudits-Dmts9H_b.mjs → processAudits-BpRlPQMW.mjs} +16 -19
- package/dist/processAudits-BpRlPQMW.mjs.map +1 -0
- package/dist/{processAudits-CGqttuXm.cjs → processAudits-D_2W5x8k.cjs} +26 -30
- package/dist/processAudits-D_2W5x8k.cjs.map +1 -0
- package/dist/queue/index.cjs +25 -21
- package/dist/queue/index.cjs.map +1 -1
- package/dist/queue/index.d.cts +8 -15
- package/dist/queue/index.d.cts.map +1 -1
- package/dist/queue/index.d.mts +8 -15
- package/dist/queue/index.d.mts.map +1 -1
- package/dist/queue/index.mjs +15 -11
- package/dist/queue/index.mjs.map +1 -1
- package/dist/rest-api.cjs +88 -62
- package/dist/rest-api.cjs.map +1 -1
- package/dist/rest-api.d.cts +62 -60
- package/dist/rest-api.d.cts.map +1 -1
- package/dist/rest-api.d.mts +62 -60
- package/dist/rest-api.d.mts.map +1 -1
- package/dist/rest-api.mjs +80 -54
- package/dist/rest-api.mjs.map +1 -1
- package/dist/{chunk-DWy1uDak.cjs → rolldown-runtime-y5ARvAq5.cjs} +14 -18
- package/dist/site.cjs +33 -9
- package/dist/site.cjs.map +1 -1
- package/dist/site.d.cts +11 -22
- package/dist/site.d.cts.map +1 -1
- package/dist/site.d.mts +11 -22
- package/dist/site.d.mts.map +1 -1
- package/dist/site.mjs +29 -5
- package/dist/site.mjs.map +1 -1
- package/dist/subscribers/index.cjs +2 -11
- package/dist/subscribers/index.d.cts +3 -14
- package/dist/subscribers/index.d.mts +3 -14
- package/dist/subscribers/index.mjs +2 -11
- package/dist/surfaceEnv-CNimK76p.cjs +56 -0
- package/dist/surfaceEnv-CNimK76p.cjs.map +1 -0
- package/dist/surfaceEnv-wMT5QzgZ.mjs +45 -0
- package/dist/surfaceEnv-wMT5QzgZ.mjs.map +1 -0
- package/dist/{telemetry-C3L0iS28.d.cts → telemetry-DGcFlVpB.d.cts} +2 -5
- package/dist/telemetry-DGcFlVpB.d.cts.map +1 -0
- package/dist/{telemetry-D7bVFLGi.d.mts → telemetry-DGcFlVpB.d.mts} +2 -5
- package/dist/telemetry-DGcFlVpB.d.mts.map +1 -0
- package/dist/topic/index.cjs +18 -20
- package/dist/topic/index.cjs.map +1 -1
- package/dist/topic/index.d.cts +3 -32
- package/dist/topic/index.d.mts +3 -32
- package/dist/topic/index.mjs +8 -10
- package/dist/topic/index.mjs.map +1 -1
- package/dist/{types-BlAkSuGI.d.cts → types-DMuSQeLL.d.cts} +3 -5
- package/dist/types-DMuSQeLL.d.cts.map +1 -0
- package/dist/{types-aKksMEWL.d.mts → types-DMuSQeLL.d.mts} +3 -5
- package/dist/types-DMuSQeLL.d.mts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +1 -0
- package/dist/worker.cjs +109 -35
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +87 -42
- package/dist/worker.d.cts.map +1 -1
- package/dist/worker.d.mts +87 -42
- package/dist/worker.d.mts.map +1 -1
- package/dist/worker.mjs +104 -30
- package/dist/worker.mjs.map +1 -1
- package/package.json +59 -55
- package/dist/Construct-BD5neF7w.mjs.map +0 -1
- package/dist/Construct-C0ijr2qp.d.cts.map +0 -1
- package/dist/Construct-Ct8nalEi.d.mts.map +0 -1
- package/dist/Construct-CyS3RpTL.cjs.map +0 -1
- package/dist/Cron-ByxdOfpE.d.mts.map +0 -1
- package/dist/Cron-Wqh464aO.d.cts.map +0 -1
- package/dist/CronBuilder-BL0AP6fs.d.mts.map +0 -1
- package/dist/CronBuilder-BmABazzH.mjs.map +0 -1
- package/dist/CronBuilder-BqpEzMPQ.d.cts.map +0 -1
- package/dist/CronBuilder-CkXPJiGO.cjs.map +0 -1
- package/dist/Endpoint-2Wg7T7Cq.d.mts.map +0 -1
- package/dist/Endpoint-BiaaMEn_.cjs.map +0 -1
- package/dist/Endpoint-CH9Fn1AD.d.cts.map +0 -1
- package/dist/Endpoint-VIOpSo0S.mjs.map +0 -1
- package/dist/EndpointFactory-ChxLZllA.cjs.map +0 -1
- package/dist/EndpointFactory-DTTCkGEL.mjs.map +0 -1
- package/dist/HonoEndpointAdaptor-NKQQQbBY.mjs.map +0 -1
- package/dist/Queue-D7ZuwBhy.d.cts.map +0 -1
- package/dist/Queue-gVGfi2Yk.d.mts.map +0 -1
- package/dist/Subscriber-2mEi0ImH.d.cts.map +0 -1
- package/dist/Subscriber-xTJ9ayPN.d.mts.map +0 -1
- package/dist/SubscriberBuilder-4OPehf2R.cjs.map +0 -1
- package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +0 -1
- package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +0 -1
- package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +0 -1
- package/dist/Topic-19QeHBIR.d.cts.map +0 -1
- package/dist/Topic-DuFeqkBh.d.mts.map +0 -1
- package/dist/auth.d.cts.map +0 -1
- package/dist/auth.d.mts.map +0 -1
- package/dist/cache-0ANvRQnD.mjs +0 -51
- package/dist/cache-0ANvRQnD.mjs.map +0 -1
- package/dist/cache-3WSvAulx.cjs +0 -57
- package/dist/cache-3WSvAulx.cjs.map +0 -1
- package/dist/cache-BrRz3fEB.d.mts.map +0 -1
- package/dist/cache-BtZY_tHe.d.cts.map +0 -1
- package/dist/clone-DblgEZZa.mjs.map +0 -1
- package/dist/clone-Dy0cR2SZ.cjs.map +0 -1
- package/dist/construct-interface-BfjcOD_E.cjs +0 -117
- package/dist/construct-interface-BfjcOD_E.cjs.map +0 -1
- package/dist/construct-interface-D9d4Gm4p.d.cts.map +0 -1
- package/dist/construct-interface-Z4CpS8tK.mjs +0 -81
- package/dist/construct-interface-Z4CpS8tK.mjs.map +0 -1
- package/dist/construct-interface-g5GM5pwR.d.mts.map +0 -1
- package/dist/database/kysely.d.cts.map +0 -1
- package/dist/database/kysely.d.mts.map +0 -1
- package/dist/functions-Bd3TPxid.cjs.map +0 -1
- package/dist/functions-Cxbo-pEd.mjs.map +0 -1
- package/dist/index-BxHDdy6a.d.mts.map +0 -1
- package/dist/index-CubPzHd9.d.mts.map +0 -1
- package/dist/index-JSf9xNIJ.d.cts.map +0 -1
- package/dist/index-V2nksZIJ.d.cts.map +0 -1
- package/dist/lazyAccessors-BoJN3SMd.mjs.map +0 -1
- package/dist/lazyAccessors-e3j2oE2m.cjs.map +0 -1
- package/dist/processAudits-CGqttuXm.cjs.map +0 -1
- package/dist/processAudits-Dmts9H_b.mjs.map +0 -1
- package/dist/subscribers/index.cjs.map +0 -1
- package/dist/subscribers/index.d.cts.map +0 -1
- package/dist/subscribers/index.d.mts.map +0 -1
- package/dist/subscribers/index.mjs.map +0 -1
- package/dist/surfaceEnv-BFXEms2f.cjs +0 -39
- package/dist/surfaceEnv-BFXEms2f.cjs.map +0 -1
- package/dist/surfaceEnv-C3Ktahea.mjs +0 -27
- package/dist/surfaceEnv-C3Ktahea.mjs.map +0 -1
- package/dist/telemetry-C3L0iS28.d.cts.map +0 -1
- package/dist/telemetry-D7bVFLGi.d.mts.map +0 -1
- package/dist/topic/index.d.cts.map +0 -1
- package/dist/topic/index.d.mts.map +0 -1
- package/dist/types-BlAkSuGI.d.cts.map +0 -1
- package/dist/types-aKksMEWL.d.mts.map +0 -1
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
require(
|
|
3
|
-
require(
|
|
4
|
-
const
|
|
5
|
-
require(
|
|
6
|
-
const
|
|
7
|
-
const require_lazyAccessors = require(
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_auth = require("../auth.cjs");
|
|
3
|
+
const require_functions = require("../functions-VnOTEp74.cjs");
|
|
4
|
+
const require_Endpoint = require("../Endpoint-CtiPUpRX.cjs");
|
|
5
|
+
const require_email = require("../email.cjs");
|
|
6
|
+
const require_database_kysely = require("../database/kysely.cjs");
|
|
7
|
+
const require_lazyAccessors = require("../lazyAccessors-Dx9NLwJZ.cjs");
|
|
8
|
+
const require_HonoEndpointAdaptor = require("../HonoEndpointAdaptor-C9aivwKl.cjs");
|
|
9
|
+
const require_processAudits = require("../processAudits-D_2W5x8k.cjs");
|
|
10
|
+
let _geekmidas_manifest = require("@geekmidas/manifest");
|
|
11
|
+
let _geekmidas_errors = require("@geekmidas/errors");
|
|
12
|
+
let _geekmidas_envkit = require("@geekmidas/envkit");
|
|
13
|
+
let _geekmidas_services = require("@geekmidas/services");
|
|
14
|
+
let hono = require("hono");
|
|
15
|
+
let _geekmidas_audit = require("@geekmidas/audit");
|
|
16
|
+
let _geekmidas_testkit_context = require("@geekmidas/testkit/context");
|
|
17
|
+
let msw = require("msw");
|
|
18
|
+
let node_crypto = require("node:crypto");
|
|
19
|
+
let _geekmidas_testkit_browser = require("@geekmidas/testkit/browser");
|
|
20
|
+
let _geekmidas_testkit_mailbox = require("@geekmidas/testkit/mailbox");
|
|
21
|
+
let _geekmidas_testkit_transactions = require("@geekmidas/testkit/transactions");
|
|
22
|
+
let msw_node = require("msw/node");
|
|
23
|
+
let vitest = require("vitest");
|
|
17
24
|
//#region src/endpoints/MswEndpointAdaptor.ts
|
|
18
|
-
/**
|
|
19
|
-
* Header used to identify which test context a request belongs to.
|
|
20
|
-
* Each concurrent test registers its own context (services, db transaction, etc.)
|
|
21
|
-
* and the MSW handler looks it up by this header value.
|
|
22
|
-
*/
|
|
23
|
-
const TEST_CONTEXT_HEADER = "x-test-context-id";
|
|
24
25
|
const MSW_HTTP_METHODS = [
|
|
25
26
|
"get",
|
|
26
27
|
"post",
|
|
@@ -52,8 +53,8 @@ function createMswHandlers(endpoints, options) {
|
|
|
52
53
|
* Creates a fresh ServiceDiscovery and pre-registers all provided services.
|
|
53
54
|
*/
|
|
54
55
|
function registerContext(id, ctxOptions) {
|
|
55
|
-
const envParser = new
|
|
56
|
-
const serviceDiscovery = new
|
|
56
|
+
const envParser = new _geekmidas_envkit.EnvironmentParser({});
|
|
57
|
+
const serviceDiscovery = new _geekmidas_services.ServiceDiscovery(envParser);
|
|
57
58
|
const serviceDefs = [];
|
|
58
59
|
if (ctxOptions.services) for (const [name, instance] of Object.entries(ctxOptions.services)) serviceDefs.push({
|
|
59
60
|
serviceName: name,
|
|
@@ -88,11 +89,11 @@ function createMswHandlers(endpoints, options) {
|
|
|
88
89
|
const mswUrl = `${baseURL}${endpoint.route}`;
|
|
89
90
|
const mswMethod = msw.http[method];
|
|
90
91
|
handlers.push(mswMethod(mswUrl, async ({ request }) => {
|
|
91
|
-
const contextId = request.headers.get(TEST_CONTEXT_HEADER);
|
|
92
|
+
const contextId = request.headers.get(_geekmidas_testkit_context.TEST_CONTEXT_HEADER);
|
|
92
93
|
const ctx = contextId ? contexts.get(contextId) : void 0;
|
|
93
94
|
if (!ctx) return new Response(JSON.stringify({
|
|
94
95
|
error: "Missing or unknown test context ID",
|
|
95
|
-
hint: `Set the '${TEST_CONTEXT_HEADER}' header to a registered context ID`
|
|
96
|
+
hint: `Set the '${_geekmidas_testkit_context.TEST_CONTEXT_HEADER}' header to a registered context ID`
|
|
96
97
|
}), {
|
|
97
98
|
status: 500,
|
|
98
99
|
headers: { "content-type": "application/json" }
|
|
@@ -112,7 +113,6 @@ function createMswHandlers(endpoints, options) {
|
|
|
112
113
|
registerContext
|
|
113
114
|
};
|
|
114
115
|
}
|
|
115
|
-
|
|
116
116
|
//#endregion
|
|
117
117
|
//#region src/endpoints/TestEndpointAdaptor.ts
|
|
118
118
|
/**
|
|
@@ -132,8 +132,10 @@ function serializeCookie(name, value, options) {
|
|
|
132
132
|
return cookieString;
|
|
133
133
|
}
|
|
134
134
|
var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
135
|
+
endpoint;
|
|
136
|
+
serviceDiscovery;
|
|
135
137
|
static getDefaultServiceDiscover(_endpoint) {
|
|
136
|
-
return
|
|
138
|
+
return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
|
|
137
139
|
}
|
|
138
140
|
constructor(endpoint, serviceDiscovery = TestEndpointAdaptor.getDefaultServiceDiscover(endpoint)) {
|
|
139
141
|
this.endpoint = endpoint;
|
|
@@ -154,7 +156,7 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
|
154
156
|
method: this.endpoint.method
|
|
155
157
|
});
|
|
156
158
|
const rawDb = ctx.database;
|
|
157
|
-
return (0,
|
|
159
|
+
return (0, _geekmidas_services.runWithRequestContext)({
|
|
158
160
|
logger,
|
|
159
161
|
requestId,
|
|
160
162
|
startTime
|
|
@@ -166,7 +168,7 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
|
166
168
|
cookie,
|
|
167
169
|
...rawDb !== void 0 && { db: rawDb }
|
|
168
170
|
});
|
|
169
|
-
|
|
171
|
+
if (!await this.endpoint.authorize({
|
|
170
172
|
header,
|
|
171
173
|
cookie,
|
|
172
174
|
services: ctx.services,
|
|
@@ -176,10 +178,9 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
|
176
178
|
body,
|
|
177
179
|
query,
|
|
178
180
|
params
|
|
179
|
-
})
|
|
180
|
-
if (!isAuthorized) {
|
|
181
|
+
})) {
|
|
181
182
|
logger.warn("Forbidden access attempt");
|
|
182
|
-
throw new
|
|
183
|
+
throw new _geekmidas_errors.ForbiddenError("Forbidden access to the endpoint", "You do not have permission to access this resource.");
|
|
183
184
|
}
|
|
184
185
|
const auditorStorage = ctx.auditorStorage;
|
|
185
186
|
let auditContext;
|
|
@@ -199,24 +200,22 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
|
199
200
|
} catch (error) {
|
|
200
201
|
logger.error(error, "Failed to extract actor for audits");
|
|
201
202
|
}
|
|
202
|
-
const auditor = new __geekmidas_audit.DefaultAuditor({
|
|
203
|
-
actor,
|
|
204
|
-
storage: auditorStorage,
|
|
205
|
-
metadata: {
|
|
206
|
-
endpoint: this.endpoint.route,
|
|
207
|
-
method: this.endpoint.method
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
203
|
auditContext = {
|
|
211
|
-
auditor
|
|
204
|
+
auditor: new _geekmidas_audit.DefaultAuditor({
|
|
205
|
+
actor,
|
|
206
|
+
storage: auditorStorage,
|
|
207
|
+
metadata: {
|
|
208
|
+
endpoint: this.endpoint.route,
|
|
209
|
+
method: this.endpoint.method
|
|
210
|
+
}
|
|
211
|
+
}),
|
|
212
212
|
storage: auditorStorage
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
215
|
const audits = this.endpoint.audits;
|
|
216
216
|
if (!auditContext && audits?.length) logger.warn("No auditor storage service available");
|
|
217
|
-
const
|
|
218
|
-
const
|
|
219
|
-
const db = trx ?? rawDb;
|
|
217
|
+
const { output, metadata } = await require_processAudits.executeWithAuditTransaction(auditContext, async (auditor) => {
|
|
218
|
+
const db = auditor?.getTransaction?.() ?? rawDb;
|
|
220
219
|
const responseBuilder = new require_Endpoint.ResponseBuilder();
|
|
221
220
|
const response = await this.endpoint.handler({
|
|
222
221
|
body,
|
|
@@ -231,36 +230,34 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
|
231
230
|
db
|
|
232
231
|
}, responseBuilder);
|
|
233
232
|
let data = response;
|
|
234
|
-
let metadata
|
|
233
|
+
let metadata = responseBuilder.getMetadata();
|
|
235
234
|
if (require_Endpoint.Endpoint.hasMetadata(response)) {
|
|
236
235
|
data = response.data;
|
|
237
|
-
metadata
|
|
236
|
+
metadata = response.metadata;
|
|
238
237
|
}
|
|
239
|
-
const output$1 = await this.endpoint.parseOutput(data);
|
|
240
238
|
return {
|
|
241
|
-
output:
|
|
242
|
-
metadata
|
|
239
|
+
output: await this.endpoint.parseOutput(data),
|
|
240
|
+
metadata,
|
|
243
241
|
responseBuilder
|
|
244
242
|
};
|
|
245
|
-
}, async (result
|
|
243
|
+
}, async (result, auditor) => {
|
|
246
244
|
if (!audits?.length) return;
|
|
247
245
|
for (const audit of audits) {
|
|
248
|
-
if (audit.when && !audit.when(result
|
|
249
|
-
const payload = audit.payload(result
|
|
250
|
-
const entityId = audit.entityId?.(result
|
|
246
|
+
if (audit.when && !audit.when(result.output)) continue;
|
|
247
|
+
const payload = audit.payload(result.output);
|
|
248
|
+
const entityId = audit.entityId?.(result.output);
|
|
251
249
|
auditor.audit(audit.type, payload, {
|
|
252
250
|
table: audit.table,
|
|
253
251
|
entityId
|
|
254
252
|
});
|
|
255
253
|
}
|
|
256
254
|
}, { db: rawDb });
|
|
257
|
-
const { output, metadata } = result;
|
|
258
255
|
ctx.publisher && await this.serviceDiscovery.register([ctx.publisher]);
|
|
259
256
|
await require_lazyAccessors.publishConstructEvents(this.endpoint, output, this.serviceDiscovery);
|
|
260
257
|
const headers = { ...metadata.headers || {} };
|
|
261
258
|
if (metadata.cookies && metadata.cookies.size > 0) {
|
|
262
259
|
const setCookieValues = [];
|
|
263
|
-
for (const [name, cookie
|
|
260
|
+
for (const [name, cookie] of metadata.cookies.entries()) setCookieValues.push(serializeCookie(name, cookie.value, cookie.options));
|
|
264
261
|
headers["set-cookie"] = setCookieValues;
|
|
265
262
|
}
|
|
266
263
|
return {
|
|
@@ -271,16 +268,16 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
|
|
|
271
268
|
});
|
|
272
269
|
}
|
|
273
270
|
async request(ctx) {
|
|
274
|
-
|
|
275
|
-
return response.body;
|
|
271
|
+
return (await this.fullRequest(ctx)).body;
|
|
276
272
|
}
|
|
277
273
|
};
|
|
278
|
-
|
|
279
274
|
//#endregion
|
|
280
275
|
//#region src/functions/TestFunctionAdaptor.ts
|
|
281
276
|
var TestFunctionAdaptor = class TestFunctionAdaptor {
|
|
277
|
+
fn;
|
|
278
|
+
serviceDiscovery;
|
|
282
279
|
static getDefaultServiceDiscovery(_fn) {
|
|
283
|
-
return
|
|
280
|
+
return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
|
|
284
281
|
}
|
|
285
282
|
constructor(fn, serviceDiscovery = TestFunctionAdaptor.getDefaultServiceDiscovery(fn)) {
|
|
286
283
|
this.fn = fn;
|
|
@@ -294,16 +291,12 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
|
|
|
294
291
|
else services = await this.serviceDiscovery.register(this.fn.services);
|
|
295
292
|
let db;
|
|
296
293
|
if ("db" in ctx && ctx.db !== void 0) db = ctx.db;
|
|
297
|
-
else if (this.fn.databaseService)
|
|
298
|
-
const dbServices = await this.serviceDiscovery.register([this.fn.databaseService]);
|
|
299
|
-
db = dbServices[this.fn.databaseService.serviceName];
|
|
300
|
-
}
|
|
294
|
+
else if (this.fn.databaseService) db = (await this.serviceDiscovery.register([this.fn.databaseService]))[this.fn.databaseService.serviceName];
|
|
301
295
|
let auditor;
|
|
302
296
|
if ("auditor" in ctx && ctx.auditor !== void 0) auditor = ctx.auditor;
|
|
303
297
|
else if (this.fn.auditorStorageService) {
|
|
304
|
-
const
|
|
305
|
-
|
|
306
|
-
auditor = new __geekmidas_audit.DefaultAuditor({
|
|
298
|
+
const storage = (await this.serviceDiscovery.register([this.fn.auditorStorageService]))[this.fn.auditorStorageService.serviceName];
|
|
299
|
+
auditor = new _geekmidas_audit.DefaultAuditor({
|
|
307
300
|
actor: {
|
|
308
301
|
id: "system",
|
|
309
302
|
type: "system"
|
|
@@ -316,11 +309,10 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
|
|
|
316
309
|
});
|
|
317
310
|
}
|
|
318
311
|
const requestId = `test-${Date.now()}`;
|
|
319
|
-
|
|
320
|
-
return (0, __geekmidas_services.runWithRequestContext)({
|
|
312
|
+
return (0, _geekmidas_services.runWithRequestContext)({
|
|
321
313
|
logger,
|
|
322
314
|
requestId,
|
|
323
|
-
startTime
|
|
315
|
+
startTime: Date.now()
|
|
324
316
|
}, async () => {
|
|
325
317
|
const response = await this.fn.fn({
|
|
326
318
|
input: parsedInput,
|
|
@@ -342,7 +334,6 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
|
|
|
342
334
|
});
|
|
343
335
|
}
|
|
344
336
|
};
|
|
345
|
-
|
|
346
337
|
//#endregion
|
|
347
338
|
//#region src/queue/TestQueueAdaptor.ts
|
|
348
339
|
/**
|
|
@@ -355,8 +346,10 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
|
|
|
355
346
|
* await adapter.invoke({ messages: [{ orderId: '123' }] });
|
|
356
347
|
*/
|
|
357
348
|
var TestQueueAdaptor = class TestQueueAdaptor {
|
|
349
|
+
queue;
|
|
350
|
+
serviceDiscovery;
|
|
358
351
|
static getDefaultServiceDiscovery() {
|
|
359
|
-
return
|
|
352
|
+
return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
|
|
360
353
|
}
|
|
361
354
|
constructor(queue, serviceDiscovery = TestQueueAdaptor.getDefaultServiceDiscovery()) {
|
|
362
355
|
this.queue = queue;
|
|
@@ -366,11 +359,10 @@ var TestQueueAdaptor = class TestQueueAdaptor {
|
|
|
366
359
|
const logger = this.queue.logger.child({ test: true });
|
|
367
360
|
const services = request.services ?? await this.serviceDiscovery.register(this.queue.services);
|
|
368
361
|
const requestId = `test-${Date.now()}`;
|
|
369
|
-
|
|
370
|
-
return (0, __geekmidas_services.runWithRequestContext)({
|
|
362
|
+
return (0, _geekmidas_services.runWithRequestContext)({
|
|
371
363
|
logger,
|
|
372
364
|
requestId,
|
|
373
|
-
startTime
|
|
365
|
+
startTime: Date.now()
|
|
374
366
|
}, () => this.queue.handler({
|
|
375
367
|
messages: request.messages,
|
|
376
368
|
services,
|
|
@@ -378,12 +370,13 @@ var TestQueueAdaptor = class TestQueueAdaptor {
|
|
|
378
370
|
}));
|
|
379
371
|
}
|
|
380
372
|
};
|
|
381
|
-
|
|
382
373
|
//#endregion
|
|
383
374
|
//#region src/subscribers/TestSubscriberAdaptor.ts
|
|
384
375
|
var TestSubscriberAdaptor = class TestSubscriberAdaptor {
|
|
376
|
+
subscriber;
|
|
377
|
+
serviceDiscovery;
|
|
385
378
|
static getDefaultServiceDiscovery() {
|
|
386
|
-
return
|
|
379
|
+
return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
|
|
387
380
|
}
|
|
388
381
|
constructor(subscriber, serviceDiscovery = TestSubscriberAdaptor.getDefaultServiceDiscovery()) {
|
|
389
382
|
this.subscriber = subscriber;
|
|
@@ -397,11 +390,10 @@ var TestSubscriberAdaptor = class TestSubscriberAdaptor {
|
|
|
397
390
|
const filteredEvents = this.filterEvents(request.events);
|
|
398
391
|
if (filteredEvents.length === 0) return { batchItemFailures: [] };
|
|
399
392
|
const requestId = `test-${Date.now()}`;
|
|
400
|
-
|
|
401
|
-
return (0, __geekmidas_services.runWithRequestContext)({
|
|
393
|
+
return (0, _geekmidas_services.runWithRequestContext)({
|
|
402
394
|
logger,
|
|
403
395
|
requestId,
|
|
404
|
-
startTime
|
|
396
|
+
startTime: Date.now()
|
|
405
397
|
}, async () => {
|
|
406
398
|
const result = await this.subscriber.handler({
|
|
407
399
|
events: filteredEvents,
|
|
@@ -423,12 +415,209 @@ var TestSubscriberAdaptor = class TestSubscriberAdaptor {
|
|
|
423
415
|
return events.filter((event) => this.subscriber.subscribedEvents.includes(event.type));
|
|
424
416
|
}
|
|
425
417
|
};
|
|
426
|
-
|
|
427
418
|
//#endregion
|
|
428
|
-
|
|
419
|
+
//#region src/testing/featureTest.ts
|
|
420
|
+
/**
|
|
421
|
+
* `featureTest`: an app, driven the way it runs deployed.
|
|
422
|
+
*
|
|
423
|
+
* A browser signs in and calls the API; the API calls the auth server; each
|
|
424
|
+
* over its URL, each database in its own transaction. Nothing runs as a server:
|
|
425
|
+
* every URL an app's constructs answer on is served in-process through MSW,
|
|
426
|
+
* from the real handler, for the test that made the request. Everything else
|
|
427
|
+
* with a real local equivalent — Postgres, Mailpit, MinIO — is used directly.
|
|
428
|
+
*
|
|
429
|
+
* ```ts
|
|
430
|
+
* // test/config.ts
|
|
431
|
+
* export const it = featureTest({
|
|
432
|
+
* modules: import.meta.glob(['../../constructs/*.ts', '../src/endpoints/**\/*.ts'], { eager: true }),
|
|
433
|
+
* database,
|
|
434
|
+
* browser: Browser,
|
|
435
|
+
* });
|
|
436
|
+
*
|
|
437
|
+
* // a test
|
|
438
|
+
* it('shows the signed-in user their profile', async ({ browser, mailbox }) => {
|
|
439
|
+
* await browser.auth.signIn.magicLink({ email: 'ada@shop.test' });
|
|
440
|
+
* await browser.visit((await mailbox('ada@shop.test').last()).link!);
|
|
441
|
+
* expect(await browser.api.get('/profile')).toMatchObject({ email: 'ada@shop.test' });
|
|
442
|
+
* });
|
|
443
|
+
* ```
|
|
444
|
+
*/
|
|
445
|
+
/** Every test in flight in this process, by id. */
|
|
446
|
+
const contexts = /* @__PURE__ */ new Map();
|
|
447
|
+
/** Databases already resolving to test transactions — patched once each. */
|
|
448
|
+
const bound = /* @__PURE__ */ new WeakSet();
|
|
449
|
+
function featureTest(options) {
|
|
450
|
+
const env = options.env ?? process.env;
|
|
451
|
+
const envParser = new _geekmidas_envkit.EnvironmentParser({ ...env });
|
|
452
|
+
const found = discover(options.modules);
|
|
453
|
+
const BrowserClass = options.browser ?? _geekmidas_testkit_browser.Browser;
|
|
454
|
+
for (const database of found.databases) bindToTests(database);
|
|
455
|
+
const network = (0, msw_node.setupServer)(...surfaceHandlers(found.endpoints, env), ...found.auths.map((auth) => authHandler(auth, env, envParser)));
|
|
456
|
+
const inbox = found.emails.map((email) => env[(0, _geekmidas_manifest.provideKey)(email.id, "inboxUrl")]).find(Boolean);
|
|
457
|
+
const readMail = inbox ? (0, _geekmidas_testkit_mailbox.createMailbox)({ inbox }) : void 0;
|
|
458
|
+
let restoreFetch = () => {};
|
|
459
|
+
(0, vitest.beforeAll)(() => {
|
|
460
|
+
network.listen({ onUnhandledRequest(request, print) {
|
|
461
|
+
if (isLocal(new URL(request.url))) return;
|
|
462
|
+
print.error();
|
|
463
|
+
} });
|
|
464
|
+
restoreFetch = (0, _geekmidas_testkit_context.installContextFetch)();
|
|
465
|
+
});
|
|
466
|
+
(0, vitest.afterAll)(() => {
|
|
467
|
+
restoreFetch();
|
|
468
|
+
network.close();
|
|
469
|
+
});
|
|
470
|
+
const run = (fn) => async () => {
|
|
471
|
+
const id = (0, node_crypto.randomUUID)();
|
|
472
|
+
const state = {
|
|
473
|
+
transactions: new _geekmidas_testkit_transactions.TransactionRegistry(),
|
|
474
|
+
discovery: new _geekmidas_services.ServiceDiscovery(envParser),
|
|
475
|
+
surfaces: /* @__PURE__ */ new Map(),
|
|
476
|
+
auth: /* @__PURE__ */ new Map(),
|
|
477
|
+
addresses: /* @__PURE__ */ new Set()
|
|
478
|
+
};
|
|
479
|
+
contexts.set(id, state);
|
|
480
|
+
try {
|
|
481
|
+
await (0, _geekmidas_testkit_context.runInTestContext)(id, async () => {
|
|
482
|
+
const browser = new BrowserClass();
|
|
483
|
+
const restore = browser.install();
|
|
484
|
+
try {
|
|
485
|
+
await fn({
|
|
486
|
+
browser,
|
|
487
|
+
db: options.database ? await state.transactions.get(options.database.id, urlOf(options.database, envParser)) : void 0,
|
|
488
|
+
mailbox: (address) => {
|
|
489
|
+
if (!readMail) throw new NoInbox();
|
|
490
|
+
state.addresses.add(address);
|
|
491
|
+
return readMail(address);
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
} finally {
|
|
495
|
+
restore();
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
} finally {
|
|
499
|
+
contexts.delete(id);
|
|
500
|
+
await Promise.all([state.transactions.rollbackAll(), ...[...state.addresses].map((address) => readMail?.(address).clear())]);
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
const it = ((name, fn, timeout) => (0, vitest.test)(name, run(fn), timeout));
|
|
504
|
+
it.only = (name, fn, timeout) => vitest.test.only(name, run(fn), timeout);
|
|
505
|
+
it.skip = (name, fn, timeout) => vitest.test.skip(name, run(fn), timeout);
|
|
506
|
+
return it;
|
|
507
|
+
}
|
|
508
|
+
/** What an app's modules export, sorted by what a test does with it. */
|
|
509
|
+
function discover(modules) {
|
|
510
|
+
const values = (Array.isArray(modules) ? modules : Object.values(modules)).flatMap((module) => module && typeof module === "object" ? Object.values(module) : []);
|
|
511
|
+
return {
|
|
512
|
+
endpoints: values.filter((value) => require_Endpoint.Endpoint.isEndpoint(value)),
|
|
513
|
+
databases: values.filter((value) => value instanceof require_database_kysely.KyselyDatabase),
|
|
514
|
+
auths: values.filter((value) => value instanceof require_auth.BetterAuth),
|
|
515
|
+
emails: values.filter((value) => value instanceof require_email.Email)
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Make a database resolve, inside a test, to that test's transaction.
|
|
520
|
+
*
|
|
521
|
+
* Everything reaches a database through its service — an endpoint through
|
|
522
|
+
* service discovery, the auth server through its tenant directly — so this is
|
|
523
|
+
* the one place a test's connection can be handed over. Outside a test it is
|
|
524
|
+
* the database it always was.
|
|
525
|
+
*/
|
|
526
|
+
function bindToTests(database) {
|
|
527
|
+
if (bound.has(database)) return;
|
|
528
|
+
bound.add(database);
|
|
529
|
+
const service = database.service;
|
|
530
|
+
const register = service.register;
|
|
531
|
+
service.register = (options) => {
|
|
532
|
+
const context = (0, _geekmidas_testkit_context.currentTestContext)();
|
|
533
|
+
const state = context && contexts.get(context.id);
|
|
534
|
+
if (!state) return register(options);
|
|
535
|
+
return state.transactions.get(database.id, urlOf(database, options.envParser));
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
function urlOf(database, envParser) {
|
|
539
|
+
return envParser.create((get) => ({ url: get((0, _geekmidas_manifest.provideKey)(database.id, "url")).string() })).parse().url;
|
|
540
|
+
}
|
|
541
|
+
/** Each surface's endpoints, served at its URL for the test that asked. */
|
|
542
|
+
function surfaceHandlers(endpoints, env) {
|
|
543
|
+
const bySurface = /* @__PURE__ */ new Map();
|
|
544
|
+
for (const endpoint of endpoints) {
|
|
545
|
+
const surface = endpoint.surface?.id;
|
|
546
|
+
if (!surface) continue;
|
|
547
|
+
bySurface.set(surface, [...bySurface.get(surface) ?? [], endpoint]);
|
|
548
|
+
}
|
|
549
|
+
return [...bySurface].flatMap(([surface, served]) => {
|
|
550
|
+
const base = env[(0, _geekmidas_manifest.provideKey)(surface, "url")];
|
|
551
|
+
if (!base) return [];
|
|
552
|
+
return msw.http.all(`${trim(base)}/*`, ({ request }) => serve(request, async (state) => {
|
|
553
|
+
let app = state.surfaces.get(surface);
|
|
554
|
+
if (!app) {
|
|
555
|
+
app = Promise.resolve().then(() => {
|
|
556
|
+
const hono$1 = new hono.Hono();
|
|
557
|
+
require_HonoEndpointAdaptor.HonoEndpoint.addRoutes(served, state.discovery, hono$1);
|
|
558
|
+
return hono$1;
|
|
559
|
+
});
|
|
560
|
+
state.surfaces.set(surface, app);
|
|
561
|
+
}
|
|
562
|
+
return (await app).fetch(request);
|
|
563
|
+
}));
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
/** An auth server, served at its URL, on the transaction of the test that asked. */
|
|
567
|
+
function authHandler(auth, env, envParser) {
|
|
568
|
+
const base = trim(env[(0, _geekmidas_manifest.provideKey)(auth.id, "url")] ?? "");
|
|
569
|
+
return msw.http.all(`${base}${auth.basePath}/*`, ({ request }) => serve(request, async (state) => {
|
|
570
|
+
let app = state.auth.get(auth);
|
|
571
|
+
if (!app) {
|
|
572
|
+
app = auth.server({
|
|
573
|
+
envParser,
|
|
574
|
+
context: _geekmidas_services.serviceContext
|
|
575
|
+
}).then(({ app }) => app);
|
|
576
|
+
state.auth.set(auth, app);
|
|
577
|
+
}
|
|
578
|
+
return (await app).fetch(request);
|
|
579
|
+
}));
|
|
580
|
+
}
|
|
581
|
+
/** Handle a request as the server side of the test it was made for. */
|
|
582
|
+
async function serve(request, handle) {
|
|
583
|
+
const id = (0, _geekmidas_testkit_context.testContextOf)(request);
|
|
584
|
+
const state = id ? contexts.get(id) : void 0;
|
|
585
|
+
if (!id || !state) throw new UnknownTestContext(request.url, id);
|
|
586
|
+
return (0, _geekmidas_testkit_context.runAsServer)(id, () => handle(state));
|
|
587
|
+
}
|
|
588
|
+
function trim(url) {
|
|
589
|
+
return url.replace(/\/$/, "");
|
|
590
|
+
}
|
|
591
|
+
function isLocal(url) {
|
|
592
|
+
return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname.endsWith(".localhost");
|
|
593
|
+
}
|
|
594
|
+
/** A request reached an in-process server without a test to belong to. */
|
|
595
|
+
var UnknownTestContext = class extends Error {
|
|
596
|
+
url;
|
|
597
|
+
id;
|
|
598
|
+
constructor(url, id) {
|
|
599
|
+
super(id ? `${url} was requested for test ${id}, which is not running. A request that outlives its test — an un-awaited call — lands here.` : `${url} was requested outside any test. Make the request inside a featureTest, so it reaches that test's transactions.`);
|
|
600
|
+
this.url = url;
|
|
601
|
+
this.id = id;
|
|
602
|
+
this.name = "UnknownTestContext";
|
|
603
|
+
}
|
|
604
|
+
};
|
|
605
|
+
/** `mailbox` was used in an app that declares no Email construct. */
|
|
606
|
+
var NoInbox = class extends Error {
|
|
607
|
+
constructor() {
|
|
608
|
+
super("mailbox() reads the inbox of the app's Email construct, and none was found in featureTest's modules — or `gkm test` did not inject its <ID>_INBOX_URL.");
|
|
609
|
+
this.name = "NoInbox";
|
|
610
|
+
}
|
|
611
|
+
};
|
|
612
|
+
//#endregion
|
|
613
|
+
exports.NoInbox = NoInbox;
|
|
614
|
+
exports.TEST_CONTEXT_HEADER = _geekmidas_testkit_context.TEST_CONTEXT_HEADER;
|
|
429
615
|
exports.TestEndpointAdaptor = TestEndpointAdaptor;
|
|
430
616
|
exports.TestFunctionAdaptor = TestFunctionAdaptor;
|
|
431
617
|
exports.TestQueueAdaptor = TestQueueAdaptor;
|
|
432
618
|
exports.TestSubscriberAdaptor = TestSubscriberAdaptor;
|
|
619
|
+
exports.UnknownTestContext = UnknownTestContext;
|
|
433
620
|
exports.createMswHandlers = createMswHandlers;
|
|
621
|
+
exports.featureTest = featureTest;
|
|
622
|
+
|
|
434
623
|
//# sourceMappingURL=testing.cjs.map
|