@mionjs/router 0.8.10 → 0.13.2
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/.dist/cjs/.mion/types/A0Qb_EtDWACB.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_EtDWACB.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_FSFQzFT.cjs +17 -0
- package/.dist/cjs/.mion/types/A0Qb_FSFQzFT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_IJpcjGV.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_IJpcjGV.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_IugtMk3.cjs +14 -0
- package/.dist/cjs/.mion/types/A0Qb_IugtMk3.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_JmyrGf9.cjs +13 -0
- package/.dist/cjs/.mion/types/A0Qb_JmyrGf9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_KW2BeGf.cjs +13 -0
- package/.dist/cjs/.mion/types/A0Qb_KW2BeGf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_N4upY9e.cjs +14 -0
- package/.dist/cjs/.mion/types/A0Qb_N4upY9e.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_NpYuWjf.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_NpYuWjf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_PGJvDQM.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_PGJvDQM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_SJBMH8X.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_SJBMH8X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_SW6Ke6X.cjs +26 -0
- package/.dist/cjs/.mion/types/A0Qb_SW6Ke6X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_UM4R4B0.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_UM4R4B0.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_VU2j3Ds.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_VU2j3Ds.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_WIhjWe9.cjs +13 -0
- package/.dist/cjs/.mion/types/A0Qb_WIhjWe9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_ZRJiRyT.cjs +13 -0
- package/.dist/cjs/.mion/types/A0Qb_ZRJiRyT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_Zdevfid.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_Zdevfid.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_cCmjzQr.cjs +36 -0
- package/.dist/cjs/.mion/types/A0Qb_cCmjzQr.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_dbzlcVY.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_dbzlcVY.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_fzrXFOz.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_fzrXFOz.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_il6MWfT.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_il6MWfT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_kuE24Ar.cjs +13 -0
- package/.dist/cjs/.mion/types/A0Qb_kuE24Ar.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_od0j6kO.cjs +16 -0
- package/.dist/cjs/.mion/types/A0Qb_od0j6kO.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_uz6TmiD.cjs +17 -0
- package/.dist/cjs/.mion/types/A0Qb_uz6TmiD.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_vDX1rqR.cjs +13 -0
- package/.dist/cjs/.mion/types/A0Qb_vDX1rqR.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_vei3XnC.cjs +17 -0
- package/.dist/cjs/.mion/types/A0Qb_vei3XnC.cjs.map +1 -0
- package/.dist/cjs/.mion/types/A0Qb_vtuQRKM.cjs +14 -0
- package/.dist/cjs/.mion/types/A0Qb_vtuQRKM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_EtDWACB.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_EtDWACB.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_IJpcjGV.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_IJpcjGV.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_JmyrGf9.cjs +13 -0
- package/.dist/cjs/.mion/types/Eq2V_JmyrGf9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_KW2BeGf.cjs +13 -0
- package/.dist/cjs/.mion/types/Eq2V_KW2BeGf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_NpYuWjf.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_NpYuWjf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_SJBMH8X.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_SJBMH8X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_SW6Ke6X.cjs +26 -0
- package/.dist/cjs/.mion/types/Eq2V_SW6Ke6X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_VU2j3Ds.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_VU2j3Ds.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_WIhjWe9.cjs +13 -0
- package/.dist/cjs/.mion/types/Eq2V_WIhjWe9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_ZRJiRyT.cjs +13 -0
- package/.dist/cjs/.mion/types/Eq2V_ZRJiRyT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_Zdevfid.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_Zdevfid.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_dbzlcVY.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_dbzlcVY.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_fzrXFOz.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_fzrXFOz.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_il6MWfT.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_il6MWfT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_kuE24Ar.cjs +13 -0
- package/.dist/cjs/.mion/types/Eq2V_kuE24Ar.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_od0j6kO.cjs +16 -0
- package/.dist/cjs/.mion/types/Eq2V_od0j6kO.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_uz6TmiD.cjs +17 -0
- package/.dist/cjs/.mion/types/Eq2V_uz6TmiD.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_vDX1rqR.cjs +13 -0
- package/.dist/cjs/.mion/types/Eq2V_vDX1rqR.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Eq2V_vei3XnC.cjs +17 -0
- package/.dist/cjs/.mion/types/Eq2V_vei3XnC.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_EtDWACB.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_EtDWACB.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_FSFQzFT.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_FSFQzFT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_IJpcjGV.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_IJpcjGV.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_IugtMk3.cjs +14 -0
- package/.dist/cjs/.mion/types/Ky89_IugtMk3.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_JmyrGf9.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_JmyrGf9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_KW2BeGf.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_KW2BeGf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_N4upY9e.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_N4upY9e.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_NpYuWjf.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_NpYuWjf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_PGJvDQM.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_PGJvDQM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_SJBMH8X.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_SJBMH8X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_SW6Ke6X.cjs +26 -0
- package/.dist/cjs/.mion/types/Ky89_SW6Ke6X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_UM4R4B0.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_UM4R4B0.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_VU2j3Ds.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_VU2j3Ds.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_Zdevfid.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_Zdevfid.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_cCmjzQr.cjs +32 -0
- package/.dist/cjs/.mion/types/Ky89_cCmjzQr.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_dbzlcVY.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_dbzlcVY.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_fzrXFOz.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_fzrXFOz.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_il6MWfT.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_il6MWfT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_kuE24Ar.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_kuE24Ar.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_od0j6kO.cjs +16 -0
- package/.dist/cjs/.mion/types/Ky89_od0j6kO.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_uz6TmiD.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_uz6TmiD.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_vDX1rqR.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_vDX1rqR.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_vei3XnC.cjs +17 -0
- package/.dist/cjs/.mion/types/Ky89_vei3XnC.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Ky89_vtuQRKM.cjs +13 -0
- package/.dist/cjs/.mion/types/Ky89_vtuQRKM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_FSFQzFT.cjs +18 -0
- package/.dist/cjs/.mion/types/OBOg_FSFQzFT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_IugtMk3.cjs +17 -0
- package/.dist/cjs/.mion/types/OBOg_IugtMk3.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_N4upY9e.cjs +17 -0
- package/.dist/cjs/.mion/types/OBOg_N4upY9e.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_PGJvDQM.cjs +18 -0
- package/.dist/cjs/.mion/types/OBOg_PGJvDQM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_TEA76po.cjs +18 -0
- package/.dist/cjs/.mion/types/OBOg_TEA76po.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_UM4R4B0.cjs +23 -0
- package/.dist/cjs/.mion/types/OBOg_UM4R4B0.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_cCmjzQr.cjs +18 -0
- package/.dist/cjs/.mion/types/OBOg_cCmjzQr.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_vDX1rqR.cjs +17 -0
- package/.dist/cjs/.mion/types/OBOg_vDX1rqR.cjs.map +1 -0
- package/.dist/cjs/.mion/types/OBOg_vtuQRKM.cjs +18 -0
- package/.dist/cjs/.mion/types/OBOg_vtuQRKM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_EtDWACB.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_EtDWACB.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_FSFQzFT.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_FSFQzFT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_IJpcjGV.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_IJpcjGV.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_IugtMk3.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_IugtMk3.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_JmyrGf9.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_JmyrGf9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_KW2BeGf.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_KW2BeGf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_N4upY9e.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_N4upY9e.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_NpYuWjf.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_NpYuWjf.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_PGJvDQM.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_PGJvDQM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_SJBMH8X.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_SJBMH8X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_SW6Ke6X.cjs +26 -0
- package/.dist/cjs/.mion/types/Xhuv_SW6Ke6X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_TEA76po.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_TEA76po.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_UM4R4B0.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_UM4R4B0.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_VU2j3Ds.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_VU2j3Ds.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_WIhjWe9.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_WIhjWe9.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_ZRJiRyT.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_ZRJiRyT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_Zdevfid.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_Zdevfid.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_cCmjzQr.cjs +29 -0
- package/.dist/cjs/.mion/types/Xhuv_cCmjzQr.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_dbzlcVY.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_dbzlcVY.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_fzrXFOz.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_fzrXFOz.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_il6MWfT.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_il6MWfT.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_kuE24Ar.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_kuE24Ar.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_m13oqC7.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_m13oqC7.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_od0j6kO.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_od0j6kO.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_uz6TmiD.cjs +17 -0
- package/.dist/cjs/.mion/types/Xhuv_uz6TmiD.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_vDX1rqR.cjs +13 -0
- package/.dist/cjs/.mion/types/Xhuv_vDX1rqR.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_vei3XnC.cjs +17 -0
- package/.dist/cjs/.mion/types/Xhuv_vei3XnC.cjs.map +1 -0
- package/.dist/cjs/.mion/types/Xhuv_vtuQRKM.cjs +16 -0
- package/.dist/cjs/.mion/types/Xhuv_vtuQRKM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/mzca_IugtMk3.cjs +14 -0
- package/.dist/cjs/.mion/types/mzca_IugtMk3.cjs.map +1 -0
- package/.dist/cjs/.mion/types/mzca_N4upY9e.cjs +14 -0
- package/.dist/cjs/.mion/types/mzca_N4upY9e.cjs.map +1 -0
- package/.dist/cjs/.mion/types/mzca_vtuQRKM.cjs +14 -0
- package/.dist/cjs/.mion/types/mzca_vtuQRKM.cjs.map +1 -0
- package/.dist/cjs/.mion/types/pf/@mionjs/run-types/rXVwGkGDX08BsQ.cjs +14 -0
- package/.dist/cjs/.mion/types/pf/@mionjs/run-types/rXVwGkGDX08BsQ.cjs.map +1 -0
- package/.dist/cjs/.mion/types/pf/@mionjs/run-types/tfRjnFZVF8lqI_.cjs +14 -0
- package/.dist/cjs/.mion/types/pf/@mionjs/run-types/tfRjnFZVF8lqI_.cjs.map +1 -0
- package/.dist/cjs/.mion/types/rt/C7ezVBCtGn.cjs +498 -0
- package/.dist/cjs/.mion/types/rt/C7ezVBCtGn.cjs.map +1 -0
- package/.dist/cjs/.mion/types/rt/VIdAjpHu1X.cjs +526 -0
- package/.dist/cjs/.mion/types/rt/VIdAjpHu1X.cjs.map +1 -0
- package/.dist/cjs/.mion/types/rt/eF4wQzU6Fd.cjs +875 -0
- package/.dist/cjs/.mion/types/rt/eF4wQzU6Fd.cjs.map +1 -0
- package/.dist/cjs/.mion/types/rt/shared/X6LLuPu8LB.cjs +467 -0
- package/.dist/cjs/.mion/types/rt/shared/X6LLuPu8LB.cjs.map +1 -0
- package/.dist/cjs/.mion/types/rt/shared/b3OCOIQ3Az.cjs +1475 -0
- package/.dist/cjs/.mion/types/rt/shared/b3OCOIQ3Az.cjs.map +1 -0
- package/.dist/cjs/index.cjs +115 -153
- package/.dist/cjs/index.d.ts +5 -4
- package/.dist/cjs/middlewares.cjs +5 -0
- package/.dist/cjs/middlewares.d.ts +3 -0
- package/.dist/cjs/src/batches.cjs +332 -0
- package/.dist/cjs/src/batches.cjs.map +1 -0
- package/.dist/cjs/src/batches.d.ts +22 -0
- package/.dist/cjs/src/callContext.cjs +72 -116
- package/.dist/cjs/src/callContext.cjs.map +1 -1
- package/.dist/cjs/src/callContext.d.ts +5 -8
- package/.dist/cjs/src/constants.cjs +22 -41
- package/.dist/cjs/src/constants.cjs.map +1 -1
- package/.dist/cjs/src/constants.d.ts +1 -7
- package/.dist/cjs/src/dispatch.cjs +227 -129
- package/.dist/cjs/src/dispatch.cjs.map +1 -1
- package/.dist/cjs/src/dispatch.d.ts +8 -2
- package/.dist/cjs/src/lib/bodyLimit.cjs +37 -0
- package/.dist/cjs/src/lib/bodyLimit.cjs.map +1 -0
- package/.dist/cjs/src/lib/bodyLimit.d.ts +5 -0
- package/.dist/cjs/src/lib/bodyReader.cjs +79 -0
- package/.dist/cjs/src/lib/bodyReader.cjs.map +1 -0
- package/.dist/cjs/src/lib/bodyReader.d.ts +10 -0
- package/.dist/cjs/src/lib/dispatchError.cjs +77 -34
- package/.dist/cjs/src/lib/dispatchError.cjs.map +1 -1
- package/.dist/cjs/src/lib/dispatchError.d.ts +6 -2
- package/.dist/cjs/src/lib/handlers.cjs +91 -44
- package/.dist/cjs/src/lib/handlers.cjs.map +1 -1
- package/.dist/cjs/src/lib/handlers.d.ts +14 -9
- package/.dist/cjs/src/lib/headers.cjs +172 -55
- package/.dist/cjs/src/lib/headers.cjs.map +1 -1
- package/.dist/cjs/src/lib/headers.d.ts +40 -1
- package/.dist/cjs/src/lib/queryBody.cjs +25 -29
- package/.dist/cjs/src/lib/queryBody.cjs.map +1 -1
- package/.dist/cjs/src/lib/queryBody.d.ts +0 -1
- package/.dist/cjs/src/lib/reflection.cjs +78 -371
- package/.dist/cjs/src/lib/reflection.cjs.map +1 -1
- package/.dist/cjs/src/lib/reflection.d.ts +12 -9
- package/.dist/cjs/src/lib/remoteMethods.cjs +104 -104
- package/.dist/cjs/src/lib/remoteMethods.cjs.map +1 -1
- package/.dist/cjs/src/lib/remoteMethods.d.ts +4 -4
- package/.dist/cjs/src/lib/urlQuery.cjs +24 -0
- package/.dist/cjs/src/lib/urlQuery.cjs.map +1 -0
- package/.dist/cjs/src/lib/urlQuery.d.ts +2 -0
- package/.dist/cjs/src/middlewares/fetchMetadata.cjs +99 -0
- package/.dist/cjs/src/middlewares/fetchMetadata.cjs.map +1 -0
- package/.dist/cjs/src/middlewares/fetchMetadata.d.ts +15 -0
- package/.dist/cjs/src/middlewares/syncRoutes.cjs +67 -0
- package/.dist/cjs/src/middlewares/syncRoutes.cjs.map +1 -0
- package/.dist/cjs/src/middlewares/syncRoutes.d.ts +12 -0
- package/.dist/cjs/src/router.cjs +506 -432
- package/.dist/cjs/src/router.cjs.map +1 -1
- package/.dist/cjs/src/router.d.ts +27 -19
- package/.dist/cjs/src/routes/errors.routes.cjs +81 -46
- package/.dist/cjs/src/routes/errors.routes.cjs.map +1 -1
- package/.dist/cjs/src/routes/errors.routes.d.ts +14 -3
- package/.dist/cjs/src/routes/serializer.routes.cjs +107 -176
- package/.dist/cjs/src/routes/serializer.routes.cjs.map +1 -1
- package/.dist/cjs/src/routes/serializer.routes.d.ts +3 -3
- package/.dist/cjs/src/types/context.cjs +0 -31
- package/.dist/cjs/src/types/context.d.ts +13 -21
- package/.dist/cjs/src/types/definitions.cjs +0 -15
- package/.dist/cjs/src/types/definitions.d.ts +32 -20
- package/.dist/cjs/src/types/general.cjs +0 -14
- package/.dist/cjs/src/types/general.d.ts +15 -15
- package/.dist/cjs/src/types/guards.cjs +31 -38
- package/.dist/cjs/src/types/guards.cjs.map +1 -1
- package/.dist/cjs/src/types/guards.d.ts +7 -7
- package/.dist/cjs/src/types/handlers.cjs +0 -13
- package/.dist/cjs/src/types/handlers.d.ts +8 -5
- package/.dist/cjs/src/types/mionRouter.cjs +0 -0
- package/.dist/cjs/src/types/mionRouter.d.ts +44 -0
- package/.dist/cjs/src/types/parser.cjs +0 -0
- package/.dist/cjs/src/types/parser.d.ts +43 -0
- package/.dist/cjs/src/types/publicMethods.cjs +0 -24
- package/.dist/cjs/src/types/publicMethods.d.ts +65 -25
- package/.dist/cjs/src/types/remoteMethods.cjs +0 -25
- package/.dist/cjs/src/types/remoteMethods.d.ts +49 -29
- package/.dist/cjs/src/types/resolvedOptions.cjs +0 -0
- package/.dist/cjs/src/types/resolvedOptions.d.ts +28 -0
- package/.dist/esm/.mion/types/A0Qb_EtDWACB.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_EtDWACB.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_FSFQzFT.js +17 -0
- package/.dist/esm/.mion/types/A0Qb_FSFQzFT.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_IJpcjGV.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_IJpcjGV.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_IugtMk3.js +14 -0
- package/.dist/esm/.mion/types/A0Qb_IugtMk3.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_JmyrGf9.js +13 -0
- package/.dist/esm/.mion/types/A0Qb_JmyrGf9.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_KW2BeGf.js +13 -0
- package/.dist/esm/.mion/types/A0Qb_KW2BeGf.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_N4upY9e.js +14 -0
- package/.dist/esm/.mion/types/A0Qb_N4upY9e.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_NpYuWjf.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_NpYuWjf.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_PGJvDQM.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_PGJvDQM.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_SJBMH8X.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_SJBMH8X.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_SW6Ke6X.js +26 -0
- package/.dist/esm/.mion/types/A0Qb_SW6Ke6X.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_UM4R4B0.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_UM4R4B0.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_VU2j3Ds.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_VU2j3Ds.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_WIhjWe9.js +13 -0
- package/.dist/esm/.mion/types/A0Qb_WIhjWe9.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_ZRJiRyT.js +13 -0
- package/.dist/esm/.mion/types/A0Qb_ZRJiRyT.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_Zdevfid.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_Zdevfid.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_cCmjzQr.js +36 -0
- package/.dist/esm/.mion/types/A0Qb_cCmjzQr.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_dbzlcVY.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_dbzlcVY.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_fzrXFOz.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_fzrXFOz.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_il6MWfT.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_il6MWfT.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_kuE24Ar.js +13 -0
- package/.dist/esm/.mion/types/A0Qb_kuE24Ar.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_od0j6kO.js +16 -0
- package/.dist/esm/.mion/types/A0Qb_od0j6kO.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_uz6TmiD.js +17 -0
- package/.dist/esm/.mion/types/A0Qb_uz6TmiD.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_vDX1rqR.js +13 -0
- package/.dist/esm/.mion/types/A0Qb_vDX1rqR.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_vei3XnC.js +17 -0
- package/.dist/esm/.mion/types/A0Qb_vei3XnC.js.map +1 -0
- package/.dist/esm/.mion/types/A0Qb_vtuQRKM.js +14 -0
- package/.dist/esm/.mion/types/A0Qb_vtuQRKM.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_EtDWACB.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_EtDWACB.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_IJpcjGV.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_IJpcjGV.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_JmyrGf9.js +13 -0
- package/.dist/esm/.mion/types/Eq2V_JmyrGf9.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_KW2BeGf.js +13 -0
- package/.dist/esm/.mion/types/Eq2V_KW2BeGf.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_NpYuWjf.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_NpYuWjf.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_SJBMH8X.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_SJBMH8X.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_SW6Ke6X.js +26 -0
- package/.dist/esm/.mion/types/Eq2V_SW6Ke6X.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_VU2j3Ds.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_VU2j3Ds.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_WIhjWe9.js +13 -0
- package/.dist/esm/.mion/types/Eq2V_WIhjWe9.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_ZRJiRyT.js +13 -0
- package/.dist/esm/.mion/types/Eq2V_ZRJiRyT.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_Zdevfid.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_Zdevfid.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_dbzlcVY.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_dbzlcVY.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_fzrXFOz.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_fzrXFOz.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_il6MWfT.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_il6MWfT.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_kuE24Ar.js +13 -0
- package/.dist/esm/.mion/types/Eq2V_kuE24Ar.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_od0j6kO.js +16 -0
- package/.dist/esm/.mion/types/Eq2V_od0j6kO.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_uz6TmiD.js +17 -0
- package/.dist/esm/.mion/types/Eq2V_uz6TmiD.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_vDX1rqR.js +13 -0
- package/.dist/esm/.mion/types/Eq2V_vDX1rqR.js.map +1 -0
- package/.dist/esm/.mion/types/Eq2V_vei3XnC.js +17 -0
- package/.dist/esm/.mion/types/Eq2V_vei3XnC.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_EtDWACB.js +16 -0
- package/.dist/esm/.mion/types/Ky89_EtDWACB.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_FSFQzFT.js +16 -0
- package/.dist/esm/.mion/types/Ky89_FSFQzFT.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_IJpcjGV.js +16 -0
- package/.dist/esm/.mion/types/Ky89_IJpcjGV.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_IugtMk3.js +14 -0
- package/.dist/esm/.mion/types/Ky89_IugtMk3.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_JmyrGf9.js +13 -0
- package/.dist/esm/.mion/types/Ky89_JmyrGf9.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_KW2BeGf.js +13 -0
- package/.dist/esm/.mion/types/Ky89_KW2BeGf.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_N4upY9e.js +13 -0
- package/.dist/esm/.mion/types/Ky89_N4upY9e.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_NpYuWjf.js +16 -0
- package/.dist/esm/.mion/types/Ky89_NpYuWjf.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_PGJvDQM.js +16 -0
- package/.dist/esm/.mion/types/Ky89_PGJvDQM.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_SJBMH8X.js +16 -0
- package/.dist/esm/.mion/types/Ky89_SJBMH8X.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_SW6Ke6X.js +26 -0
- package/.dist/esm/.mion/types/Ky89_SW6Ke6X.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_UM4R4B0.js +16 -0
- package/.dist/esm/.mion/types/Ky89_UM4R4B0.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_VU2j3Ds.js +16 -0
- package/.dist/esm/.mion/types/Ky89_VU2j3Ds.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_Zdevfid.js +16 -0
- package/.dist/esm/.mion/types/Ky89_Zdevfid.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_cCmjzQr.js +32 -0
- package/.dist/esm/.mion/types/Ky89_cCmjzQr.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_dbzlcVY.js +16 -0
- package/.dist/esm/.mion/types/Ky89_dbzlcVY.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_fzrXFOz.js +16 -0
- package/.dist/esm/.mion/types/Ky89_fzrXFOz.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_il6MWfT.js +16 -0
- package/.dist/esm/.mion/types/Ky89_il6MWfT.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_kuE24Ar.js +13 -0
- package/.dist/esm/.mion/types/Ky89_kuE24Ar.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_od0j6kO.js +16 -0
- package/.dist/esm/.mion/types/Ky89_od0j6kO.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_uz6TmiD.js +13 -0
- package/.dist/esm/.mion/types/Ky89_uz6TmiD.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_vDX1rqR.js +13 -0
- package/.dist/esm/.mion/types/Ky89_vDX1rqR.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_vei3XnC.js +17 -0
- package/.dist/esm/.mion/types/Ky89_vei3XnC.js.map +1 -0
- package/.dist/esm/.mion/types/Ky89_vtuQRKM.js +13 -0
- package/.dist/esm/.mion/types/Ky89_vtuQRKM.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_FSFQzFT.js +18 -0
- package/.dist/esm/.mion/types/OBOg_FSFQzFT.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_IugtMk3.js +17 -0
- package/.dist/esm/.mion/types/OBOg_IugtMk3.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_N4upY9e.js +17 -0
- package/.dist/esm/.mion/types/OBOg_N4upY9e.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_PGJvDQM.js +18 -0
- package/.dist/esm/.mion/types/OBOg_PGJvDQM.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_TEA76po.js +18 -0
- package/.dist/esm/.mion/types/OBOg_TEA76po.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_UM4R4B0.js +23 -0
- package/.dist/esm/.mion/types/OBOg_UM4R4B0.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_cCmjzQr.js +18 -0
- package/.dist/esm/.mion/types/OBOg_cCmjzQr.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_vDX1rqR.js +17 -0
- package/.dist/esm/.mion/types/OBOg_vDX1rqR.js.map +1 -0
- package/.dist/esm/.mion/types/OBOg_vtuQRKM.js +18 -0
- package/.dist/esm/.mion/types/OBOg_vtuQRKM.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_EtDWACB.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_EtDWACB.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_FSFQzFT.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_FSFQzFT.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_IJpcjGV.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_IJpcjGV.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_IugtMk3.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_IugtMk3.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_JmyrGf9.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_JmyrGf9.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_KW2BeGf.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_KW2BeGf.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_N4upY9e.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_N4upY9e.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_NpYuWjf.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_NpYuWjf.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_PGJvDQM.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_PGJvDQM.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_SJBMH8X.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_SJBMH8X.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_SW6Ke6X.js +26 -0
- package/.dist/esm/.mion/types/Xhuv_SW6Ke6X.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_TEA76po.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_TEA76po.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_UM4R4B0.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_UM4R4B0.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_VU2j3Ds.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_VU2j3Ds.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_WIhjWe9.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_WIhjWe9.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_ZRJiRyT.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_ZRJiRyT.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_Zdevfid.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_Zdevfid.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_cCmjzQr.js +29 -0
- package/.dist/esm/.mion/types/Xhuv_cCmjzQr.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_dbzlcVY.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_dbzlcVY.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_fzrXFOz.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_fzrXFOz.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_il6MWfT.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_il6MWfT.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_kuE24Ar.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_kuE24Ar.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_m13oqC7.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_m13oqC7.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_od0j6kO.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_od0j6kO.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_uz6TmiD.js +17 -0
- package/.dist/esm/.mion/types/Xhuv_uz6TmiD.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_vDX1rqR.js +13 -0
- package/.dist/esm/.mion/types/Xhuv_vDX1rqR.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_vei3XnC.js +17 -0
- package/.dist/esm/.mion/types/Xhuv_vei3XnC.js.map +1 -0
- package/.dist/esm/.mion/types/Xhuv_vtuQRKM.js +16 -0
- package/.dist/esm/.mion/types/Xhuv_vtuQRKM.js.map +1 -0
- package/.dist/esm/.mion/types/mzca_IugtMk3.js +14 -0
- package/.dist/esm/.mion/types/mzca_IugtMk3.js.map +1 -0
- package/.dist/esm/.mion/types/mzca_N4upY9e.js +14 -0
- package/.dist/esm/.mion/types/mzca_N4upY9e.js.map +1 -0
- package/.dist/esm/.mion/types/mzca_vtuQRKM.js +14 -0
- package/.dist/esm/.mion/types/mzca_vtuQRKM.js.map +1 -0
- package/.dist/esm/.mion/types/pf/@mionjs/run-types/rXVwGkGDX08BsQ.js +14 -0
- package/.dist/esm/.mion/types/pf/@mionjs/run-types/rXVwGkGDX08BsQ.js.map +1 -0
- package/.dist/esm/.mion/types/pf/@mionjs/run-types/tfRjnFZVF8lqI_.js +14 -0
- package/.dist/esm/.mion/types/pf/@mionjs/run-types/tfRjnFZVF8lqI_.js.map +1 -0
- package/.dist/esm/.mion/types/rt/C7ezVBCtGn.js +495 -0
- package/.dist/esm/.mion/types/rt/C7ezVBCtGn.js.map +1 -0
- package/.dist/esm/.mion/types/rt/VIdAjpHu1X.js +521 -0
- package/.dist/esm/.mion/types/rt/VIdAjpHu1X.js.map +1 -0
- package/.dist/esm/.mion/types/rt/eF4wQzU6Fd.js +872 -0
- package/.dist/esm/.mion/types/rt/eF4wQzU6Fd.js.map +1 -0
- package/.dist/esm/.mion/types/rt/shared/X6LLuPu8LB.js +467 -0
- package/.dist/esm/.mion/types/rt/shared/X6LLuPu8LB.js.map +1 -0
- package/.dist/esm/.mion/types/rt/shared/b3OCOIQ3Az.js +1475 -0
- package/.dist/esm/.mion/types/rt/shared/b3OCOIQ3Az.js.map +1 -0
- package/.dist/esm/index.d.ts +5 -4
- package/.dist/esm/index.js +11 -145
- package/.dist/esm/middlewares.d.ts +3 -0
- package/.dist/esm/middlewares.js +3 -0
- package/.dist/esm/src/batches.d.ts +22 -0
- package/.dist/esm/src/batches.js +321 -0
- package/.dist/esm/src/batches.js.map +1 -0
- package/.dist/esm/src/callContext.d.ts +5 -8
- package/.dist/esm/src/callContext.js +70 -118
- package/.dist/esm/src/callContext.js.map +1 -1
- package/.dist/esm/src/constants.d.ts +1 -7
- package/.dist/esm/src/constants.js +22 -44
- package/.dist/esm/src/constants.js.map +1 -1
- package/.dist/esm/src/dispatch.d.ts +8 -2
- package/.dist/esm/src/dispatch.js +223 -131
- package/.dist/esm/src/dispatch.js.map +1 -1
- package/.dist/esm/src/lib/bodyLimit.d.ts +5 -0
- package/.dist/esm/src/lib/bodyLimit.js +35 -0
- package/.dist/esm/src/lib/bodyLimit.js.map +1 -0
- package/.dist/esm/src/lib/bodyReader.d.ts +10 -0
- package/.dist/esm/src/lib/bodyReader.js +76 -0
- package/.dist/esm/src/lib/bodyReader.js.map +1 -0
- package/.dist/esm/src/lib/dispatchError.d.ts +6 -2
- package/.dist/esm/src/lib/dispatchError.js +72 -36
- package/.dist/esm/src/lib/dispatchError.js.map +1 -1
- package/.dist/esm/src/lib/handlers.d.ts +14 -9
- package/.dist/esm/src/lib/handlers.js +85 -48
- package/.dist/esm/src/lib/handlers.js.map +1 -1
- package/.dist/esm/src/lib/headers.d.ts +40 -1
- package/.dist/esm/src/lib/headers.js +167 -57
- package/.dist/esm/src/lib/headers.js.map +1 -1
- package/.dist/esm/src/lib/queryBody.d.ts +0 -1
- package/.dist/esm/src/lib/queryBody.js +26 -31
- package/.dist/esm/src/lib/queryBody.js.map +1 -1
- package/.dist/esm/src/lib/reflection.d.ts +12 -9
- package/.dist/esm/src/lib/reflection.js +75 -351
- package/.dist/esm/src/lib/reflection.js.map +1 -1
- package/.dist/esm/src/lib/remoteMethods.d.ts +4 -4
- package/.dist/esm/src/lib/remoteMethods.js +105 -111
- package/.dist/esm/src/lib/remoteMethods.js.map +1 -1
- package/.dist/esm/src/lib/urlQuery.d.ts +2 -0
- package/.dist/esm/src/lib/urlQuery.js +23 -0
- package/.dist/esm/src/lib/urlQuery.js.map +1 -0
- package/.dist/esm/src/middlewares/fetchMetadata.d.ts +15 -0
- package/.dist/esm/src/middlewares/fetchMetadata.js +97 -0
- package/.dist/esm/src/middlewares/fetchMetadata.js.map +1 -0
- package/.dist/esm/src/middlewares/syncRoutes.d.ts +12 -0
- package/.dist/esm/src/middlewares/syncRoutes.js +66 -0
- package/.dist/esm/src/middlewares/syncRoutes.js.map +1 -0
- package/.dist/esm/src/router.d.ts +27 -19
- package/.dist/esm/src/router.js +477 -449
- package/.dist/esm/src/router.js.map +1 -1
- package/.dist/esm/src/routes/errors.routes.d.ts +14 -3
- package/.dist/esm/src/routes/errors.routes.js +80 -48
- package/.dist/esm/src/routes/errors.routes.js.map +1 -1
- package/.dist/esm/src/routes/serializer.routes.d.ts +3 -3
- package/.dist/esm/src/routes/serializer.routes.js +107 -179
- package/.dist/esm/src/routes/serializer.routes.js.map +1 -1
- package/.dist/esm/src/types/context.d.ts +13 -21
- package/.dist/esm/src/types/context.js +0 -31
- package/.dist/esm/src/types/definitions.d.ts +32 -20
- package/.dist/esm/src/types/definitions.js +0 -15
- package/.dist/esm/src/types/general.d.ts +15 -15
- package/.dist/esm/src/types/general.js +0 -14
- package/.dist/esm/src/types/guards.d.ts +7 -7
- package/.dist/esm/src/types/guards.js +27 -46
- package/.dist/esm/src/types/guards.js.map +1 -1
- package/.dist/esm/src/types/handlers.d.ts +8 -5
- package/.dist/esm/src/types/handlers.js +0 -13
- package/.dist/esm/src/types/mionRouter.d.ts +44 -0
- package/.dist/esm/src/types/mionRouter.js +0 -0
- package/.dist/esm/src/types/parser.d.ts +43 -0
- package/.dist/esm/src/types/parser.js +0 -0
- package/.dist/esm/src/types/publicMethods.d.ts +65 -25
- package/.dist/esm/src/types/publicMethods.js +0 -24
- package/.dist/esm/src/types/remoteMethods.d.ts +49 -29
- package/.dist/esm/src/types/remoteMethods.js +0 -25
- package/.dist/esm/src/types/resolvedOptions.d.ts +28 -0
- package/.dist/esm/src/types/resolvedOptions.js +0 -0
- package/LICENSE +1 -1
- package/README.md +6 -6
- package/package.json +21 -24
- package/.dist/cjs/index.cjs.map +0 -1
- package/.dist/cjs/index.d.ts.map +0 -1
- package/.dist/cjs/src/aot/aotCacheLoader.cjs +0 -11
- package/.dist/cjs/src/aot/aotCacheLoader.cjs.map +0 -1
- package/.dist/cjs/src/aot/aotCacheLoader.d.ts +0 -2
- package/.dist/cjs/src/aot/aotCacheLoader.d.ts.map +0 -1
- package/.dist/cjs/src/callContext.d.ts.map +0 -1
- package/.dist/cjs/src/constants.d.ts.map +0 -1
- package/.dist/cjs/src/defaultRoutes.cjs +0 -16
- package/.dist/cjs/src/defaultRoutes.cjs.map +0 -1
- package/.dist/cjs/src/defaultRoutes.d.ts +0 -4
- package/.dist/cjs/src/defaultRoutes.d.ts.map +0 -1
- package/.dist/cjs/src/dispatch.d.ts.map +0 -1
- package/.dist/cjs/src/lib/aotEmitter.cjs +0 -74
- package/.dist/cjs/src/lib/aotEmitter.cjs.map +0 -1
- package/.dist/cjs/src/lib/aotEmitter.d.ts +0 -24
- package/.dist/cjs/src/lib/aotEmitter.d.ts.map +0 -1
- package/.dist/cjs/src/lib/dispatchError.d.ts.map +0 -1
- package/.dist/cjs/src/lib/handlers.d.ts.map +0 -1
- package/.dist/cjs/src/lib/headers.d.ts.map +0 -1
- package/.dist/cjs/src/lib/methodsCache.cjs +0 -55
- package/.dist/cjs/src/lib/methodsCache.cjs.map +0 -1
- package/.dist/cjs/src/lib/methodsCache.d.ts +0 -12
- package/.dist/cjs/src/lib/methodsCache.d.ts.map +0 -1
- package/.dist/cjs/src/lib/queryBody.d.ts.map +0 -1
- package/.dist/cjs/src/lib/reflection.d.ts.map +0 -1
- package/.dist/cjs/src/lib/remoteMethods.d.ts.map +0 -1
- package/.dist/cjs/src/lib/test/aotEmitter-test-router.cjs +0 -24
- package/.dist/cjs/src/lib/test/aotEmitter-test-router.cjs.map +0 -1
- package/.dist/cjs/src/lib/test/aotEmitter-test-router.d.ts +0 -5
- package/.dist/cjs/src/lib/test/aotEmitter-test-router.d.ts.map +0 -1
- package/.dist/cjs/src/router.d.ts.map +0 -1
- package/.dist/cjs/src/routes/client.routes.cjs +0 -76
- package/.dist/cjs/src/routes/client.routes.cjs.map +0 -1
- package/.dist/cjs/src/routes/client.routes.d.ts +0 -20
- package/.dist/cjs/src/routes/client.routes.d.ts.map +0 -1
- package/.dist/cjs/src/routes/errors.routes.d.ts.map +0 -1
- package/.dist/cjs/src/routes/mion.routes.cjs +0 -13
- package/.dist/cjs/src/routes/mion.routes.cjs.map +0 -1
- package/.dist/cjs/src/routes/mion.routes.d.ts +0 -10
- package/.dist/cjs/src/routes/mion.routes.d.ts.map +0 -1
- package/.dist/cjs/src/routes/serializer.routes.d.ts.map +0 -1
- package/.dist/cjs/src/routesFlow.cjs +0 -227
- package/.dist/cjs/src/routesFlow.cjs.map +0 -1
- package/.dist/cjs/src/routesFlow.d.ts +0 -8
- package/.dist/cjs/src/routesFlow.d.ts.map +0 -1
- package/.dist/cjs/src/types/context.cjs.map +0 -1
- package/.dist/cjs/src/types/context.d.ts.map +0 -1
- package/.dist/cjs/src/types/definitions.cjs.map +0 -1
- package/.dist/cjs/src/types/definitions.d.ts.map +0 -1
- package/.dist/cjs/src/types/general.cjs.map +0 -1
- package/.dist/cjs/src/types/general.d.ts.map +0 -1
- package/.dist/cjs/src/types/guards.d.ts.map +0 -1
- package/.dist/cjs/src/types/handlers.cjs.map +0 -1
- package/.dist/cjs/src/types/handlers.d.ts.map +0 -1
- package/.dist/cjs/src/types/publicMethods.cjs.map +0 -1
- package/.dist/cjs/src/types/publicMethods.d.ts.map +0 -1
- package/.dist/cjs/src/types/remoteMethods.cjs.map +0 -1
- package/.dist/cjs/src/types/remoteMethods.d.ts.map +0 -1
- package/.dist/esm/index.d.ts.map +0 -1
- package/.dist/esm/index.js.map +0 -1
- package/.dist/esm/src/aot/aotCacheLoader.d.ts +0 -2
- package/.dist/esm/src/aot/aotCacheLoader.d.ts.map +0 -1
- package/.dist/esm/src/aot/aotCacheLoader.js +0 -11
- package/.dist/esm/src/aot/aotCacheLoader.js.map +0 -1
- package/.dist/esm/src/callContext.d.ts.map +0 -1
- package/.dist/esm/src/constants.d.ts.map +0 -1
- package/.dist/esm/src/defaultRoutes.d.ts +0 -4
- package/.dist/esm/src/defaultRoutes.d.ts.map +0 -1
- package/.dist/esm/src/defaultRoutes.js +0 -16
- package/.dist/esm/src/defaultRoutes.js.map +0 -1
- package/.dist/esm/src/dispatch.d.ts.map +0 -1
- package/.dist/esm/src/lib/aotEmitter.d.ts +0 -24
- package/.dist/esm/src/lib/aotEmitter.d.ts.map +0 -1
- package/.dist/esm/src/lib/aotEmitter.js +0 -74
- package/.dist/esm/src/lib/aotEmitter.js.map +0 -1
- package/.dist/esm/src/lib/dispatchError.d.ts.map +0 -1
- package/.dist/esm/src/lib/handlers.d.ts.map +0 -1
- package/.dist/esm/src/lib/headers.d.ts.map +0 -1
- package/.dist/esm/src/lib/methodsCache.d.ts +0 -12
- package/.dist/esm/src/lib/methodsCache.d.ts.map +0 -1
- package/.dist/esm/src/lib/methodsCache.js +0 -56
- package/.dist/esm/src/lib/methodsCache.js.map +0 -1
- package/.dist/esm/src/lib/queryBody.d.ts.map +0 -1
- package/.dist/esm/src/lib/reflection.d.ts.map +0 -1
- package/.dist/esm/src/lib/remoteMethods.d.ts.map +0 -1
- package/.dist/esm/src/lib/test/aotEmitter-test-router.d.ts +0 -5
- package/.dist/esm/src/lib/test/aotEmitter-test-router.d.ts.map +0 -1
- package/.dist/esm/src/lib/test/aotEmitter-test-router.js +0 -24
- package/.dist/esm/src/lib/test/aotEmitter-test-router.js.map +0 -1
- package/.dist/esm/src/router.d.ts.map +0 -1
- package/.dist/esm/src/routes/client.routes.d.ts +0 -20
- package/.dist/esm/src/routes/client.routes.d.ts.map +0 -1
- package/.dist/esm/src/routes/client.routes.js +0 -76
- package/.dist/esm/src/routes/client.routes.js.map +0 -1
- package/.dist/esm/src/routes/errors.routes.d.ts.map +0 -1
- package/.dist/esm/src/routes/mion.routes.d.ts +0 -10
- package/.dist/esm/src/routes/mion.routes.d.ts.map +0 -1
- package/.dist/esm/src/routes/mion.routes.js +0 -13
- package/.dist/esm/src/routes/mion.routes.js.map +0 -1
- package/.dist/esm/src/routes/serializer.routes.d.ts.map +0 -1
- package/.dist/esm/src/routesFlow.d.ts +0 -8
- package/.dist/esm/src/routesFlow.d.ts.map +0 -1
- package/.dist/esm/src/routesFlow.js +0 -227
- package/.dist/esm/src/routesFlow.js.map +0 -1
- package/.dist/esm/src/types/context.d.ts.map +0 -1
- package/.dist/esm/src/types/context.js.map +0 -1
- package/.dist/esm/src/types/definitions.d.ts.map +0 -1
- package/.dist/esm/src/types/definitions.js.map +0 -1
- package/.dist/esm/src/types/general.d.ts.map +0 -1
- package/.dist/esm/src/types/general.js.map +0 -1
- package/.dist/esm/src/types/guards.d.ts.map +0 -1
- package/.dist/esm/src/types/handlers.d.ts.map +0 -1
- package/.dist/esm/src/types/handlers.js.map +0 -1
- package/.dist/esm/src/types/publicMethods.d.ts.map +0 -1
- package/.dist/esm/src/types/publicMethods.js.map +0 -1
- package/.dist/esm/src/types/remoteMethods.d.ts.map +0 -1
- package/.dist/esm/src/types/remoteMethods.js.map +0 -1
- package/index.ts +0 -29
- package/src/aot/aotCacheLoader.ts +0 -15
- package/src/callContext.ts +0 -193
- package/src/constants.ts +0 -45
- package/src/defaultRoutes.ts +0 -37
- package/src/dispatch.ts +0 -204
- package/src/lib/aotEmitter.ts +0 -140
- package/src/lib/dispatchError.ts +0 -60
- package/src/lib/handlers.ts +0 -75
- package/src/lib/headers.ts +0 -102
- package/src/lib/methodsCache.ts +0 -72
- package/src/lib/queryBody.ts +0 -40
- package/src/lib/reflection.ts +0 -517
- package/src/lib/remoteMethods.ts +0 -180
- package/src/lib/test/aotEmitter-test-router.ts +0 -40
- package/src/router.ts +0 -656
- package/src/routes/client.routes.ts +0 -108
- package/src/routes/errors.routes.ts +0 -51
- package/src/routes/mion.routes.ts +0 -11
- package/src/routes/serializer.routes.ts +0 -225
- package/src/routesFlow.ts +0 -320
- package/src/types/context.ts +0 -119
- package/src/types/definitions.ts +0 -53
- package/src/types/general.ts +0 -84
- package/src/types/guards.ts +0 -71
- package/src/types/handlers.ts +0 -49
- package/src/types/publicMethods.ts +0 -83
- package/src/types/remoteMethods.ts +0 -54
|
@@ -1,141 +1,233 @@
|
|
|
1
|
+
import { markResponseFailed, recordUndeclaredError } from "./lib/dispatchError.js";
|
|
2
|
+
import { createCallContext, createContextFromChain, getRequestBodyType } from "./callContext.js";
|
|
1
3
|
import { getRouterOptions } from "./router.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
4
|
+
import { FatalError, HandlerType, HeadersSubset, MION_ROUTES, StatusCodes, isNativeError, trustedHeadersSubset } from "@mionjs/core";
|
|
5
|
+
import { UNSAFE_PROPERTY_NAME_MESSAGE } from "@mionjs/run-types";
|
|
6
|
+
//#region src/dispatch.ts
|
|
7
|
+
/** The one-call form for a caller that already has the body (tests, a host that parsed it). */
|
|
5
8
|
async function dispatchRoute(path, reqRawBody, reqHeaders, respHeaders, rawRequest, rawResponse, reqBodyType, urlQuery) {
|
|
6
|
-
|
|
7
|
-
const usePooling = opts.maxContextPoolSize > 0;
|
|
8
|
-
const context = acquireCallContext(
|
|
9
|
-
usePooling,
|
|
10
|
-
path,
|
|
11
|
-
opts,
|
|
12
|
-
reqRawBody,
|
|
13
|
-
rawRequest,
|
|
14
|
-
reqHeaders,
|
|
15
|
-
respHeaders,
|
|
16
|
-
reqBodyType,
|
|
17
|
-
urlQuery
|
|
18
|
-
);
|
|
19
|
-
try {
|
|
20
|
-
await runExecutionChain(context, rawRequest, rawResponse, opts);
|
|
21
|
-
return context.response;
|
|
22
|
-
} catch (err) {
|
|
23
|
-
return Promise.reject(err);
|
|
24
|
-
} finally {
|
|
25
|
-
if (usePooling) {
|
|
26
|
-
releaseCallContext(context, opts.maxContextPoolSize);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function runExecutionChain(context, rawRequest, rawResponse, opts) {
|
|
31
|
-
const { response, request } = context;
|
|
32
|
-
const executionList = context.executionChain.methods;
|
|
33
|
-
response.serializer = context.executionChain.serializer;
|
|
34
|
-
for (let i = 0; i < executionList.length; i++) {
|
|
35
|
-
const executable = executionList[i];
|
|
36
|
-
if (response.hasErrors && !executable.options.runOnError) continue;
|
|
37
|
-
try {
|
|
38
|
-
const methodCaller = executable.methodCaller || getMethodCaller(executable);
|
|
39
|
-
const result = await methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);
|
|
40
|
-
if (result === void 0 || !executable.hasReturnData) continue;
|
|
41
|
-
if (executable.headersReturn && result instanceof HeadersSubset) {
|
|
42
|
-
const headersMap = result.headers;
|
|
43
|
-
for (const name in headersMap) {
|
|
44
|
-
const value = headersMap[name];
|
|
45
|
-
if (value !== void 0 && value !== null) {
|
|
46
|
-
response.headers.set(name, value);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
response.body[executable.id] = result;
|
|
52
|
-
} catch (err) {
|
|
53
|
-
onExecutableError(context, executable, err);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return context.response;
|
|
57
|
-
}
|
|
58
|
-
async function runRawMiddleFn(context, executable, req, resp, opts, rawRequest, rawResponse) {
|
|
59
|
-
const result = await executable.handler(context, rawRequest, rawResponse, opts);
|
|
60
|
-
return result;
|
|
61
|
-
}
|
|
62
|
-
async function runHeadersMiddleFn(context, executable, request) {
|
|
63
|
-
const headerNames = executable.headersParam.headerNames;
|
|
64
|
-
const params = deserializeBodyParamsOrThrow(request, executable);
|
|
65
|
-
const headersMap = {};
|
|
66
|
-
headerNames.forEach((name) => {
|
|
67
|
-
const value = request.headers.get(name);
|
|
68
|
-
if (value) headersMap[name] = value;
|
|
69
|
-
});
|
|
70
|
-
const headersSubset = new HeadersSubset(headersMap);
|
|
71
|
-
validateHeaderParamsOrThrow(headersSubset, executable);
|
|
72
|
-
if (executable.options.validateParams) validateParametersOrThrow(params, executable);
|
|
73
|
-
const result = await executable.handler(context, headersSubset, ...params);
|
|
74
|
-
return result;
|
|
75
|
-
}
|
|
76
|
-
async function runRouteOrMiddleFn(context, executable, request) {
|
|
77
|
-
const params = deserializeBodyParamsOrThrow(request, executable);
|
|
78
|
-
if (executable.options.validateParams) validateParametersOrThrow(params, executable);
|
|
79
|
-
const result = await executable.handler(context, ...params);
|
|
80
|
-
return result;
|
|
9
|
+
return dispatchWithContext(createCallContext(path, urlQuery, rawRequest, reqHeaders, respHeaders, reqRawBody, reqBodyType), rawRequest, rawResponse);
|
|
81
10
|
}
|
|
11
|
+
/** A streaming adapter builds the context before reading the body, to check `context.maxBodySize`, then passes it. */
|
|
12
|
+
async function dispatchWithContext(context, rawRequest, rawResponse, reqRawBody, reqBodyType) {
|
|
13
|
+
if (reqRawBody !== void 0) {
|
|
14
|
+
const request = context.request;
|
|
15
|
+
request.rawBody = reqRawBody;
|
|
16
|
+
request.bodyType = reqBodyType ?? getRequestBodyType(reqRawBody);
|
|
17
|
+
}
|
|
18
|
+
return dispatchMaybeSync(context, rawRequest, rawResponse);
|
|
19
|
+
}
|
|
20
|
+
/** `dispatchWithContext` for a context built with its body, minus the promise when no step needs one. */
|
|
21
|
+
function dispatchMaybeSync(context, rawRequest, rawResponse) {
|
|
22
|
+
const opts = getRouterOptions();
|
|
23
|
+
if (opts.alwaysAwait) return runExecutionChain(context, rawRequest, rawResponse, opts, 0);
|
|
24
|
+
return runSyncExecutionChain(context, rawRequest, rawResponse, opts);
|
|
25
|
+
}
|
|
26
|
+
/** Dispatches a request the platform adapter refused after its route resolved: a body past the limit.
|
|
27
|
+
* The error is recorded exactly as a thrown one is, so the chain runs only the members that declare
|
|
28
|
+
* `alwaysRun` (a rate limiter, an access log) and answers with the same envelope. The adapter stopped
|
|
29
|
+
* the read, so the context is built without a body.
|
|
30
|
+
* `path` and `urlQuery` travel with the chain rather than on it: mion's not-found chains and a merged
|
|
31
|
+
* batch chain each answer for many paths, so they carry none of their own, and a refusal does reach one
|
|
32
|
+
* of those (an adapter checks a declared content-length before asking whether the chain reads a body). */
|
|
33
|
+
function dispatchPlatformError(chain, path, urlQuery, platformError, reqHeaders, respHeaders, rawRequest, rawResponse) {
|
|
34
|
+
const context = createContextFromChain(chain, path, urlQuery, reqHeaders, respHeaders);
|
|
35
|
+
recordUndeclaredError(context, MION_ROUTES.platformError, platformError);
|
|
36
|
+
return dispatchWithContext(context, rawRequest, rawResponse);
|
|
37
|
+
}
|
|
38
|
+
async function runExecutionChain(context, rawRequest, rawResponse, opts, startIndex) {
|
|
39
|
+
const { response, request, executionChain } = context;
|
|
40
|
+
const alwaysAwait = opts.alwaysAwait;
|
|
41
|
+
const executionList = executionChain.methods;
|
|
42
|
+
const executionCount = executionList.length;
|
|
43
|
+
for (let i = startIndex; i < executionCount; i++) {
|
|
44
|
+
const executable = executionList[i];
|
|
45
|
+
if (response.hasErrors && !executable.alwaysRun) continue;
|
|
46
|
+
try {
|
|
47
|
+
let result;
|
|
48
|
+
if (alwaysAwait || executable.isAsync) result = await executable.methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);
|
|
49
|
+
else {
|
|
50
|
+
result = executable.methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);
|
|
51
|
+
if (isUncheckedPromise(executable, result)) result = await result;
|
|
52
|
+
}
|
|
53
|
+
applyResult(context, executable, result);
|
|
54
|
+
} catch (err) {
|
|
55
|
+
recordUndeclaredError(context, executable.id, err);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return context.response;
|
|
59
|
+
}
|
|
60
|
+
/** `runExecutionChain` without awaits: from the first async step on it hands over, so both give the same result. */
|
|
61
|
+
function runSyncExecutionChain(context, rawRequest, rawResponse, opts) {
|
|
62
|
+
const { response, request, executionChain } = context;
|
|
63
|
+
const executionList = executionChain.methods;
|
|
64
|
+
const executionCount = executionList.length;
|
|
65
|
+
for (let i = 0; i < executionCount; i++) {
|
|
66
|
+
const executable = executionList[i];
|
|
67
|
+
if (response.hasErrors && !executable.alwaysRun) continue;
|
|
68
|
+
if (executable.isAsync) return runExecutionChain(context, rawRequest, rawResponse, opts, i);
|
|
69
|
+
try {
|
|
70
|
+
const result = executable.methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);
|
|
71
|
+
if (isUncheckedPromise(executable, result)) return Promise.resolve(result).then((resolved) => applyResult(context, executable, resolved)).catch((err) => recordUndeclaredError(context, executable.id, err)).then(() => runExecutionChain(context, rawRequest, rawResponse, opts, i + 1));
|
|
72
|
+
applyResult(context, executable, result);
|
|
73
|
+
} catch (err) {
|
|
74
|
+
recordUndeclaredError(context, executable.id, err);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return response;
|
|
78
|
+
}
|
|
79
|
+
/** Backstop for a wrong or missing declared type, else the promise is serialized as the answer. */
|
|
80
|
+
function isUncheckedPromise(executable, result) {
|
|
81
|
+
if (executable.asyncChecked === true) return false;
|
|
82
|
+
executable.asyncChecked = true;
|
|
83
|
+
if (result === null || typeof result !== "object" || typeof result.then !== "function") return false;
|
|
84
|
+
executable.isAsync = true;
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/** A throw here is the caller's to record, like the step's own. */
|
|
88
|
+
function applyResult(context, executable, result) {
|
|
89
|
+
if (result === void 0) return;
|
|
90
|
+
const response = context.response;
|
|
91
|
+
const isMionError = result !== null && result["mion@isΣrrθr"] === true;
|
|
92
|
+
if (!executable.hasReturnData) {
|
|
93
|
+
if (isMionError || isNativeError(result)) recordUndeclaredError(context, executable.id, result);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (isMionError) {
|
|
97
|
+
if (result.isFatal === true) markResponseFailed(context, result, StatusCodes.APPLICATION_ERROR);
|
|
98
|
+
} else if (isNativeError(result)) {
|
|
99
|
+
recordUndeclaredError(context, executable.id, result);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (executable.headersReturn && result instanceof HeadersSubset) {
|
|
103
|
+
const headersMap = result.headers;
|
|
104
|
+
for (const name of Object.keys(headersMap)) {
|
|
105
|
+
const value = headersMap[name];
|
|
106
|
+
if (value !== void 0 && value !== null) response.headers.set(name, value);
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
response.body[executable.id] = result;
|
|
111
|
+
}
|
|
112
|
+
function runRawMiddleware(context, executable, req, resp, opts, rawRequest, rawResponse) {
|
|
113
|
+
return executable.handler(context, rawRequest, rawResponse, opts);
|
|
114
|
+
}
|
|
115
|
+
function runHeadersMiddleware(context, executable, request) {
|
|
116
|
+
const headerNames = executable.headersParam.headerNames;
|
|
117
|
+
const params = sanitizeParams(deserializeBodyParamsOrThrow(request, executable), request, executable);
|
|
118
|
+
const headersMap = {};
|
|
119
|
+
headerNames.forEach((name) => {
|
|
120
|
+
const value = request.headers.get(name);
|
|
121
|
+
if (value) headersMap[name] = value;
|
|
122
|
+
});
|
|
123
|
+
const headersSubset = trustedHeadersSubset(headersMap);
|
|
124
|
+
validateHeaderParamsOrThrow(headersSubset, executable);
|
|
125
|
+
validateParametersOrThrow(params, executable);
|
|
126
|
+
return executable.handler(context, headersSubset, ...params);
|
|
127
|
+
}
|
|
128
|
+
function runRouteOrMiddleware(context, executable, request) {
|
|
129
|
+
const params = sanitizeParams(deserializeBodyParamsOrThrow(request, executable), request, executable);
|
|
130
|
+
validateParametersOrThrow(params, executable);
|
|
131
|
+
return executable.handler(context, ...params);
|
|
132
|
+
}
|
|
133
|
+
/** Applies the rewrites the params types declare under a format's `transform` key (trim / case /
|
|
134
|
+
* replace / stripSeparators) in place, after decode and BEFORE validation. Params only: headers and
|
|
135
|
+
* return values are never sanitized. A transform over wrong-shaped input can throw (`.trim()` on a
|
|
136
|
+
* number): the raw params fall through so validation reports the real error instead of a 500. */
|
|
137
|
+
function sanitizeParams(params, request, executable) {
|
|
138
|
+
if (!executable.options.sanitizeParams) return params;
|
|
139
|
+
const formatTransform = executable.paramsJitFns.formatTransform;
|
|
140
|
+
if (!formatTransform || formatTransform.isNoop) return params;
|
|
141
|
+
try {
|
|
142
|
+
const sanitized = formatTransform.fn(params);
|
|
143
|
+
request.body[executable.id] = sanitized;
|
|
144
|
+
return sanitized;
|
|
145
|
+
} catch {
|
|
146
|
+
return params;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** The caller for a method kind. Read ONCE, when the method is registered, so the dispatch loop
|
|
150
|
+
* reads a field instead of branching on the method type on every request. */
|
|
151
|
+
function callerForType(type) {
|
|
152
|
+
if (type === HandlerType.rawMiddleware) return runRawMiddleware;
|
|
153
|
+
if (type === HandlerType.headersMiddleware) return runHeadersMiddleware;
|
|
154
|
+
return runRouteOrMiddleware;
|
|
155
|
+
}
|
|
156
|
+
/** The caller already stored on a registered method. */
|
|
82
157
|
function getMethodCaller(executable) {
|
|
83
|
-
|
|
84
|
-
executable.methodCaller = runRawMiddleFn;
|
|
85
|
-
} else if (executable.type === HandlerType.headersMiddleFn) {
|
|
86
|
-
executable.methodCaller = runHeadersMiddleFn;
|
|
87
|
-
} else {
|
|
88
|
-
executable.methodCaller = runRouteOrMiddleFn;
|
|
89
|
-
}
|
|
90
|
-
return executable.methodCaller;
|
|
158
|
+
return executable.methodCaller;
|
|
91
159
|
}
|
|
160
|
+
/** Shared, for the members whose id is absent from the body: a fresh empty array per member per request
|
|
161
|
+
* bought nothing. Frozen, so a handler that tried to mutate its params fails loudly instead of corrupting
|
|
162
|
+
* the next request; nothing can reach it anyway, an empty tuple is spread into the call. */
|
|
163
|
+
var EMPTY_PARAMS = [];
|
|
164
|
+
Object.freeze(EMPTY_PARAMS);
|
|
92
165
|
function deserializeBodyParamsOrThrow(request, executable) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
166
|
+
const body = request.body;
|
|
167
|
+
const params = Object.hasOwn(body, executable.id) ? body[executable.id] : void 0;
|
|
168
|
+
if (!params) return EMPTY_PARAMS;
|
|
169
|
+
if (!Array.isArray(params)) throw new FatalError({
|
|
170
|
+
statusCode: StatusCodes.UNEXPECTED_ERROR,
|
|
171
|
+
type: "serialization-error",
|
|
172
|
+
publicMessage: `Invalid params '${executable.id}', params must be an array.`,
|
|
173
|
+
errorData: { deserializeError: "params must be an array" }
|
|
174
|
+
});
|
|
175
|
+
const { decode } = executable.paramsJitFns.json;
|
|
176
|
+
if (decode.isNoop) return params;
|
|
177
|
+
try {
|
|
178
|
+
const decoded = decode.fn(params);
|
|
179
|
+
body[executable.id] = decoded;
|
|
180
|
+
return decoded;
|
|
181
|
+
} catch (e) {
|
|
182
|
+
if (isStackOverflow(e)) throw nestingTooDeep(executable, e);
|
|
183
|
+
const detail = typeof e?.message === "string" && e.message.startsWith(UNSAFE_PROPERTY_NAME_MESSAGE) ? e.message : "Parameters might be of the wrong type.";
|
|
184
|
+
throw new FatalError({
|
|
185
|
+
statusCode: StatusCodes.UNEXPECTED_ERROR,
|
|
186
|
+
type: "serialization-error",
|
|
187
|
+
publicMessage: `Invalid params '${executable.id}', can not deserialize. ${detail}`,
|
|
188
|
+
originalError: e,
|
|
189
|
+
errorData: { deserializeError: detail }
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** A RangeError out of a compiled function is the engine's stack limit: the request nested deeper
|
|
194
|
+
* than a recursive type can be walked. Reported as its own typed 4xx, never as an unknown error. */
|
|
195
|
+
function isStackOverflow(err) {
|
|
196
|
+
return err instanceof RangeError;
|
|
197
|
+
}
|
|
198
|
+
function nestingTooDeep(executable, originalError) {
|
|
199
|
+
return new FatalError({
|
|
200
|
+
statusCode: StatusCodes.UNEXPECTED_ERROR,
|
|
201
|
+
type: "request-nesting-too-deep",
|
|
202
|
+
publicMessage: `Invalid params in '${executable.id}', the request is nested too deep.`,
|
|
203
|
+
originalError
|
|
204
|
+
});
|
|
110
205
|
}
|
|
111
206
|
function validateParametersOrThrow(params, executable) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
207
|
+
if (executable.paramsJitFns.isType.isNoop) return;
|
|
208
|
+
let isValid;
|
|
209
|
+
try {
|
|
210
|
+
isValid = executable.paramsJitFns.isType.fn(params);
|
|
211
|
+
} catch (e) {
|
|
212
|
+
if (isStackOverflow(e)) throw nestingTooDeep(executable, e);
|
|
213
|
+
throw e;
|
|
214
|
+
}
|
|
215
|
+
if (!isValid) throw new FatalError({
|
|
216
|
+
statusCode: StatusCodes.UNEXPECTED_ERROR,
|
|
217
|
+
type: "validation-error",
|
|
218
|
+
publicMessage: `Invalid params in '${executable.id}', validation failed.`,
|
|
219
|
+
errorData: { typeErrors: executable.paramsJitFns.typeErrors.fn(params) }
|
|
220
|
+
});
|
|
124
221
|
}
|
|
125
222
|
function validateHeaderParamsOrThrow(headers, executable) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
export {
|
|
139
|
-
dispatchRoute
|
|
140
|
-
};
|
|
141
|
-
//# sourceMappingURL=dispatch.js.map
|
|
223
|
+
if (!executable.headersParam.jitFns.isType.fn(headers)) throw new FatalError({
|
|
224
|
+
statusCode: StatusCodes.UNEXPECTED_ERROR,
|
|
225
|
+
type: "validation-error",
|
|
226
|
+
publicMessage: `Invalid params in '${executable.id}', validation failed.`,
|
|
227
|
+
errorData: { typeErrors: executable.headersParam.jitFns.typeErrors.fn(headers) }
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
//#endregion
|
|
231
|
+
export { callerForType, dispatchMaybeSync, dispatchPlatformError, dispatchRoute, dispatchWithContext, getMethodCaller };
|
|
232
|
+
|
|
233
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sources":["../../../src/dispatch.ts"],"sourcesContent":["/* ########\n * 2022 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport type {CallContext, MionResponse, MionRequest, MionHeaders, RawRequestBody} from './types/context.ts';\nimport {type RouterOptions} from './types/general.ts';\nimport {HeadersMethod, RemoteMethod, RawMethod} from './types/remoteMethods.ts';\nimport {getRouterOptions} from './router.ts';\nimport {Mutable, AnyObject, StatusCodes, HeadersSubset, SerializerModes, SerializerCode} from '@mionjs/core';\nimport {RpcError, HandlerType, ValidationError} from '@mionjs/core';\nimport {onExecutableError} from './lib/dispatchError.ts';\nimport {acquireCallContext, releaseCallContext} from './callContext.ts';\n\n/*\n * PERFORMANCE PROFILING NOTE:\n * different options has been tested to improve performance but were discarded due to worst or no noticeable improvements\n * - using promisify(setImmediate): worst or no improvement\n * - using queueMicrotask instead of setImmediate: definitely worst\n * - using callback instead promises: seems to be more slow but use less memory in some scenarios.\n */\n\n// ############# PUBLIC METHODS #############\n\nexport async function dispatchRoute<Req, Resp>(\n path: string,\n reqRawBody: RawRequestBody,\n reqHeaders: MionHeaders,\n respHeaders: MionHeaders,\n rawRequest: Req,\n rawResponse?: Resp,\n reqBodyType?: SerializerCode,\n urlQuery?: string\n): Promise<MionResponse> {\n const opts = getRouterOptions();\n const usePooling = opts.maxContextPoolSize > 0;\n const context = acquireCallContext(\n usePooling,\n path,\n opts,\n reqRawBody,\n rawRequest,\n reqHeaders,\n respHeaders,\n reqBodyType,\n urlQuery\n );\n\n try {\n await runExecutionChain(context, rawRequest, rawResponse, opts);\n return context.response;\n } catch (err: any | RpcError<string> | Error) {\n // this should never happen, exceptions should be handled inside runExecutionChain\n return Promise.reject(err);\n } finally {\n // Release context back to pool if pooling is enabled\n if (usePooling) {\n releaseCallContext(context, opts.maxContextPoolSize);\n }\n }\n}\n\n// ############# PRIVATE METHODS #############\n\n// runs the ExecutionChain of a route\nasync function runExecutionChain(\n context: CallContext,\n rawRequest: unknown,\n rawResponse: unknown,\n opts: RouterOptions\n): Promise<MionResponse> {\n const {response, request} = context;\n const executionList = context.executionChain.methods;\n (response as Mutable<MionResponse>).serializer = context.executionChain.serializer;\n for (let i = 0; i < executionList.length; i++) {\n const executable = executionList[i];\n if (response.hasErrors && !executable.options.runOnError) continue;\n\n try {\n const methodCaller = executable.methodCaller || getMethodCaller(executable);\n // runRawMiddleFn , runHeadersMiddleFn & runRouteOrMiddleFn must always accept the same parameters in the same order\n const result = await methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);\n\n if (result === undefined || !executable.hasReturnData) continue;\n if (executable.headersReturn && result instanceof HeadersSubset) {\n const headersMap = result.headers;\n for (const name in headersMap) {\n const value = headersMap[name];\n if (value !== undefined && value !== null) {\n response.headers.set(name, value);\n }\n }\n continue;\n }\n (response.body as Mutable<AnyObject>)[executable.id] = result;\n } catch (err: any | RpcError<string> | Error) {\n // All thrown errors are unexpected\n onExecutableError(context, executable, err);\n }\n }\n return context.response;\n}\n\nasync function runRawMiddleFn(\n context: CallContext,\n executable: RawMethod,\n req,\n resp,\n opts: RouterOptions,\n rawRequest: unknown,\n rawResponse: unknown\n) {\n const result = await executable.handler(context, rawRequest, rawResponse, opts);\n return result;\n}\n\nasync function runHeadersMiddleFn(context: CallContext, executable: HeadersMethod, request: MionRequest) {\n const headerNames = executable.headersParam.headerNames;\n const params = deserializeBodyParamsOrThrow(request, executable as RemoteMethod);\n const headersMap: Record<string, string> = {};\n headerNames.forEach((name) => {\n const value = request.headers.get(name);\n if (value) headersMap[name] = value;\n });\n const headersSubset = new HeadersSubset(headersMap);\n validateHeaderParamsOrThrow(headersSubset, executable as HeadersMethod);\n if (executable.options.validateParams) validateParametersOrThrow(params, executable as HeadersMethod);\n\n const result = await executable.handler(context, headersSubset, ...params);\n return result;\n}\n\nasync function runRouteOrMiddleFn(context: CallContext, executable: HeadersMethod, request: MionRequest) {\n const params = deserializeBodyParamsOrThrow(request, executable as RemoteMethod);\n if (executable.options.validateParams) validateParametersOrThrow(params, executable as RemoteMethod);\n const result = await executable.handler(context, ...params);\n return result;\n}\n\nfunction getMethodCaller(executable: RemoteMethod) {\n if (executable.type === HandlerType.rawMiddleFn) {\n executable.methodCaller = runRawMiddleFn;\n } else if (executable.type === HandlerType.headersMiddleFn) {\n executable.methodCaller = runHeadersMiddleFn;\n } else {\n executable.methodCaller = runRouteOrMiddleFn;\n }\n return executable.methodCaller;\n}\n\nfunction deserializeBodyParamsOrThrow(request: MionRequest, executable: RemoteMethod): any[] {\n const params: any[] = (request.body[executable.id] as any[]) || [];\n // For binary requests, params are already deserialized in the serializer middleFn\n // (deserializeBinaryRequestBody in serializer.routes.ts)\n if (request.bodyType === SerializerModes.binary) return params;\n\n // For JSON requests, use restoreFromJson to deserialize\n if (executable.paramsJitFns.restoreFromJson.isNoop) return params;\n try {\n (request.body as Mutable<MionRequest['body']>)[executable.id] = executable.paramsJitFns.restoreFromJson.fn(params);\n return request.body[executable.id] as any[];\n } catch (e: any) {\n throw new RpcError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'serialization-error',\n publicMessage: `Invalid params '${executable.id}', can not deserialize. Parameters might be of the wrong type.`,\n originalError: e,\n errorData: {\n deserializeError: e?.message || 'Unknown error',\n },\n });\n }\n}\n\nfunction validateParametersOrThrow(params: any[], executable: RemoteMethod): void {\n if (executable.paramsJitFns.isType.isNoop) return;\n if (!executable.paramsJitFns.isType.fn(params)) {\n const validationError: ValidationError = new RpcError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'validation-error',\n publicMessage: `Invalid params in '${executable.id}', validation failed.`,\n errorData: {\n typeErrors: executable.paramsJitFns.typeErrors.fn(params),\n },\n });\n throw validationError;\n }\n}\n\nfunction validateHeaderParamsOrThrow(headers: HeadersSubset<string, string>, executable: HeadersMethod): void {\n if (!executable.headersParam.jitFns.isType.fn(headers)) {\n const validationError: ValidationError = new RpcError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'validation-error',\n publicMessage: `Invalid params in '${executable.id}', validation failed.`,\n errorData: {\n typeErrors: executable.headersParam.jitFns.typeErrors.fn(headers),\n },\n });\n throw validationError;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dispatch.js","names":[],"sources":["../../../src/dispatch.ts"],"sourcesContent":["/* ########\n * 2022 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport type {CallContext, MionResponse, MionRequest, MionHeaders, RawRequestBody} from './types/context.ts';\nimport {type RouterOptions} from './types/general.ts';\nimport {HeadersMethod, RemoteMethod, RawMethod} from './types/remoteMethods.ts';\nimport type {MethodsExecutionChain} from './types/remoteMethods.ts';\nimport {getRouterOptions} from './router.ts';\nimport {Mutable, AnyObject, StatusCodes, HeadersSubset, SerializerCode, MION_ROUTES, trustedHeadersSubset} from '@mionjs/core';\nimport {RpcError, FatalError, HandlerType, ValidationError, isNativeError} from '@mionjs/core';\nimport {UNSAFE_PROPERTY_NAME_MESSAGE} from '@mionjs/run-types';\nimport {markResponseFailed, recordUndeclaredError} from './lib/dispatchError.ts';\nimport {createCallContext, createContextFromChain, getRequestBodyType} from './callContext.ts';\n\n// Profiled and discarded: promisify(setImmediate) (worse or no gain), queueMicrotask instead of\n// setImmediate (definitely worse), callbacks instead of promises (slower, less memory in some scenarios).\n\n// ############# PUBLIC METHODS #############\n\n/** The one-call form for a caller that already has the body (tests, a host that parsed it). */\nexport async function dispatchRoute<Req, Resp>(\n path: string,\n reqRawBody: RawRequestBody,\n reqHeaders: MionHeaders,\n respHeaders: MionHeaders,\n rawRequest: Req,\n rawResponse?: Resp,\n reqBodyType?: SerializerCode,\n urlQuery?: string\n): Promise<MionResponse> {\n const context = createCallContext(path, urlQuery, rawRequest, reqHeaders, respHeaders, reqRawBody, reqBodyType);\n return dispatchWithContext(context, rawRequest, rawResponse);\n}\n\n/** A streaming adapter builds the context before reading the body, to check `context.maxBodySize`, then passes it. */\nexport async function dispatchWithContext<Req, Resp>(\n context: CallContext,\n rawRequest: Req,\n rawResponse?: Resp,\n reqRawBody?: RawRequestBody,\n reqBodyType?: SerializerCode\n): Promise<MionResponse> {\n if (reqRawBody !== undefined) {\n const request = context.request as Mutable<MionRequest>;\n request.rawBody = reqRawBody;\n request.bodyType = reqBodyType ?? getRequestBodyType(reqRawBody);\n }\n // No catch: the chain runners handle every exception themselves, so one that only re-rejects changes nothing.\n return dispatchMaybeSync(context, rawRequest, rawResponse);\n}\n\n/** `dispatchWithContext` for a context built with its body, minus the promise when no step needs one. */\nexport function dispatchMaybeSync<Req, Resp>(\n context: CallContext,\n rawRequest: Req,\n rawResponse?: Resp\n): MionResponse | Promise<MionResponse> {\n const opts = getRouterOptions();\n if (opts.alwaysAwait) return runExecutionChain(context, rawRequest, rawResponse, opts, 0);\n return runSyncExecutionChain(context, rawRequest, rawResponse, opts);\n}\n\n/** Dispatches a request the platform adapter refused after its route resolved: a body past the limit.\n * The error is recorded exactly as a thrown one is, so the chain runs only the members that declare\n * `alwaysRun` (a rate limiter, an access log) and answers with the same envelope. The adapter stopped\n * the read, so the context is built without a body.\n * `path` and `urlQuery` travel with the chain rather than on it: mion's not-found chains and a merged\n * batch chain each answer for many paths, so they carry none of their own, and a refusal does reach one\n * of those (an adapter checks a declared content-length before asking whether the chain reads a body). */\nexport function dispatchPlatformError<Req, Resp>(\n chain: MethodsExecutionChain,\n path: string,\n urlQuery: string | undefined,\n platformError: RpcError<string>,\n reqHeaders: MionHeaders,\n respHeaders: MionHeaders,\n rawRequest: Req,\n rawResponse?: Resp\n): Promise<MionResponse> {\n const context = createContextFromChain(chain, path, urlQuery, reqHeaders, respHeaders);\n recordUndeclaredError(context, MION_ROUTES.platformError, platformError);\n return dispatchWithContext(context, rawRequest, rawResponse);\n}\n\n// ############# PRIVATE METHODS #############\n\nasync function runExecutionChain(\n context: CallContext,\n rawRequest: unknown,\n rawResponse: unknown,\n opts: RouterOptions,\n startIndex: number\n): Promise<MionResponse> {\n const {response, request, executionChain} = context;\n // `alwaysAwait: false` skips the await on sync steps: awaiting one only costs a promise frame\n const alwaysAwait = opts.alwaysAwait;\n const executionList = executionChain.methods;\n const executionCount = executionList.length;\n for (let i = startIndex; i < executionCount; i++) {\n const executable = executionList[i];\n if (response.hasErrors && !executable.alwaysRun) continue;\n\n try {\n // runRawMiddleware, runHeadersMiddleware & runRouteOrMiddleware must take the same params in the same order\n // methodCaller is resolved at registration, so the loop never picks one\n // `isAsync` comes from the type checker, so a plain function returning a promise still awaits\n let result;\n if (alwaysAwait || executable.isAsync) {\n result = await executable.methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);\n } else {\n result = executable.methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);\n if (isUncheckedPromise(executable, result)) result = await result;\n }\n applyResult(context, executable, result);\n } catch (err: any) {\n // All thrown errors are undeclared and fatal\n recordUndeclaredError(context, executable.id, err);\n }\n }\n return context.response;\n}\n\n/** `runExecutionChain` without awaits: from the first async step on it hands over, so both give the same result. */\nfunction runSyncExecutionChain(\n context: CallContext,\n rawRequest: unknown,\n rawResponse: unknown,\n opts: RouterOptions\n): MionResponse | Promise<MionResponse> {\n const {response, request, executionChain} = context;\n const executionList = executionChain.methods;\n const executionCount = executionList.length;\n for (let i = 0; i < executionCount; i++) {\n const executable = executionList[i];\n if (response.hasErrors && !executable.alwaysRun) continue;\n if (executable.isAsync) return runExecutionChain(context, rawRequest, rawResponse, opts, i);\n\n try {\n const result = executable.methodCaller(context, executable, request, response, opts, rawRequest, rawResponse);\n if (isUncheckedPromise(executable, result)) {\n return Promise.resolve(result)\n .then((resolved) => applyResult(context, executable, resolved))\n .catch((err) => recordUndeclaredError(context, executable.id, err))\n .then(() => runExecutionChain(context, rawRequest, rawResponse, opts, i + 1));\n }\n applyResult(context, executable, result);\n } catch (err: any) {\n // All thrown errors are undeclared and fatal\n recordUndeclaredError(context, executable.id, err);\n }\n }\n return response;\n}\n\n/** Backstop for a wrong or missing declared type, else the promise is serialized as the answer. */\nfunction isUncheckedPromise(executable: RemoteMethod, result: any): result is PromiseLike<unknown> {\n if (executable.asyncChecked === true) return false;\n executable.asyncChecked = true;\n if (result === null || typeof result !== 'object' || typeof result.then !== 'function') return false;\n (executable as Mutable<RemoteMethod>).isAsync = true;\n return true;\n}\n\n/** A throw here is the caller's to record, like the step's own. */\nfunction applyResult(context: CallContext, executable: RemoteMethod, result: any): void {\n if (result === undefined) return;\n const response = context.response;\n // One brand read serves every branch below: it is an own property on every mion error, wire copies too\n // `null` is a valid answer and reading a property off it throws, so it is excluded first\n const isMionError = result !== null && result['mion@isΣrrθr'] === true;\n if (!executable.hasReturnData) {\n // a raw middleware declares no return, so a returned error is undeclared and halts like a thrown one\n if (isMionError || isNativeError(result)) recordUndeclaredError(context, executable.id, result);\n return;\n }\n if (isMionError) {\n // a returned FatalError is declared: it ends the chain but keeps its slot; a plain RpcError lets the chain run on\n if (result.isFatal === true) markResponseFailed(context, result, StatusCodes.APPLICATION_ERROR);\n }\n // A brandless Error is a bug with no typed slot; in the body it would be served as a SUCCESSFUL answer\n else if (isNativeError(result)) {\n recordUndeclaredError(context, executable.id, result);\n return; // like a thrown one: it belongs in @thrownErrors, never in the body\n }\n if (executable.headersReturn && result instanceof HeadersSubset) {\n // own keys only: a HeadersSubset built over a parsed body must not turn inherited keys into headers\n const headersMap = result.headers;\n for (const name of Object.keys(headersMap)) {\n const value = headersMap[name];\n if (value !== undefined && value !== null) {\n response.headers.set(name, value);\n }\n }\n return;\n }\n (response.body as Mutable<AnyObject>)[executable.id] = result;\n}\n\n// The three callers below are NOT async: awaiting the handler only to return its value adds a promise\n// frame per chain member, and the loop's own await and try/catch cover the value and the promise alike.\nfunction runRawMiddleware(\n context: CallContext,\n executable: RawMethod,\n req,\n resp,\n opts: RouterOptions,\n rawRequest: unknown,\n rawResponse: unknown\n) {\n return executable.handler(context, rawRequest, rawResponse, opts);\n}\n\nfunction runHeadersMiddleware(context: CallContext, executable: HeadersMethod, request: MionRequest) {\n const headerNames = executable.headersParam.headerNames;\n const params = sanitizeParams(\n deserializeBodyParamsOrThrow(request, executable as RemoteMethod),\n request,\n executable as RemoteMethod\n );\n const headersMap: Record<string, string> = {};\n headerNames.forEach((name) => {\n const value = request.headers.get(name);\n if (value) headersMap[name] = value;\n });\n const headersSubset = trustedHeadersSubset(headersMap);\n validateHeaderParamsOrThrow(headersSubset, executable as HeadersMethod);\n validateParametersOrThrow(params, executable as HeadersMethod);\n\n return executable.handler(context, headersSubset, ...params);\n}\n\nfunction runRouteOrMiddleware(context: CallContext, executable: HeadersMethod, request: MionRequest) {\n const params = sanitizeParams(\n deserializeBodyParamsOrThrow(request, executable as RemoteMethod),\n request,\n executable as RemoteMethod\n );\n validateParametersOrThrow(params, executable as RemoteMethod);\n return executable.handler(context, ...params);\n}\n\n/** Applies the rewrites the params types declare under a format's `transform` key (trim / case /\n * replace / stripSeparators) in place, after decode and BEFORE validation. Params only: headers and\n * return values are never sanitized. A transform over wrong-shaped input can throw (`.trim()` on a\n * number): the raw params fall through so validation reports the real error instead of a 500. */\nfunction sanitizeParams(params: any[], request: MionRequest, executable: RemoteMethod): any[] {\n if (!executable.options.sanitizeParams) return params;\n const formatTransform = executable.paramsJitFns.formatTransform;\n if (!formatTransform || formatTransform.isNoop) return params;\n try {\n const sanitized = formatTransform.fn(params) as any[];\n (request.body as Mutable<MionRequest['body']>)[executable.id] = sanitized;\n return sanitized;\n } catch {\n return params;\n }\n}\n\n/** The caller for a method kind. Read ONCE, when the method is registered, so the dispatch loop\n * reads a field instead of branching on the method type on every request. */\nexport function callerForType(type: RemoteMethod['type']): (...args: any[]) => any {\n if (type === HandlerType.rawMiddleware) return runRawMiddleware;\n if (type === HandlerType.headersMiddleware) return runHeadersMiddleware;\n return runRouteOrMiddleware;\n}\n\n/** The caller already stored on a registered method. */\nexport function getMethodCaller(executable: RemoteMethod) {\n return executable.methodCaller;\n}\n\n/** Shared, for the members whose id is absent from the body: a fresh empty array per member per request\n * bought nothing. Frozen, so a handler that tried to mutate its params fails loudly instead of corrupting\n * the next request; nothing can reach it anyway, an empty tuple is spread into the call. */\nconst EMPTY_PARAMS: any[] = [];\nObject.freeze(EMPTY_PARAMS);\n\nfunction deserializeBodyParamsOrThrow(request: MionRequest, executable: RemoteMethod): any[] {\n // own key only: an id like `toString` would otherwise read Object.prototype off the parsed body\n const body = request.body;\n const params = (Object.hasOwn(body, executable.id) ? body[executable.id] : undefined) as any[] | undefined;\n // EMPTY_PARAMS is frozen and the decoders mutate what they are handed, so decoding the sentinel would\n // report a raw serialization error where validation should refuse the missing body.\n if (!params) return EMPTY_PARAMS;\n // a route without params has no validator, so a spread string would reach the handler as its characters\n if (!Array.isArray(params))\n throw new FatalError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'serialization-error',\n publicMessage: `Invalid params '${executable.id}', params must be an array.`,\n errorData: {deserializeError: 'params must be an array'},\n });\n\n const {decode} = executable.paramsJitFns.json;\n if (decode.isNoop) return params;\n try {\n const decoded = decode.fn(params);\n (body as Mutable<MionRequest['body']>)[executable.id] = decoded;\n return decoded;\n } catch (e: any) {\n if (isStackOverflow(e)) throw nestingTooDeep(executable, e);\n // Fixed wire text: the decoder's message quotes internal detail; the original stays on `originalError`.\n // A refused-key message is safe to pass on: mion's own constant, naming a key the caller sent.\n const refusedKey = typeof e?.message === 'string' && e.message.startsWith(UNSAFE_PROPERTY_NAME_MESSAGE);\n const detail = refusedKey ? (e.message as string) : 'Parameters might be of the wrong type.';\n throw new FatalError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'serialization-error',\n publicMessage: `Invalid params '${executable.id}', can not deserialize. ${detail}`,\n originalError: e,\n errorData: {\n deserializeError: detail,\n },\n });\n }\n}\n\n/** A RangeError out of a compiled function is the engine's stack limit: the request nested deeper\n * than a recursive type can be walked. Reported as its own typed 4xx, never as an unknown error. */\nfunction isStackOverflow(err: unknown): boolean {\n return err instanceof RangeError;\n}\n\nfunction nestingTooDeep(executable: RemoteMethod, originalError: Error): RpcError<'request-nesting-too-deep'> {\n return new FatalError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'request-nesting-too-deep',\n publicMessage: `Invalid params in '${executable.id}', the request is nested too deep.`,\n originalError,\n });\n}\n\nfunction validateParametersOrThrow(params: any[], executable: RemoteMethod): void {\n if (executable.paramsJitFns.isType.isNoop) return;\n let isValid: boolean;\n try {\n isValid = executable.paramsJitFns.isType.fn(params);\n } catch (e: any) {\n if (isStackOverflow(e)) throw nestingTooDeep(executable, e);\n throw e;\n }\n if (!isValid) {\n const validationError: ValidationError = new FatalError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'validation-error',\n publicMessage: `Invalid params in '${executable.id}', validation failed.`,\n errorData: {\n typeErrors: executable.paramsJitFns.typeErrors.fn(params),\n },\n });\n throw validationError;\n }\n}\n\nfunction validateHeaderParamsOrThrow(headers: HeadersSubset<string, string>, executable: HeadersMethod): void {\n if (!executable.headersParam.jitFns.isType.fn(headers)) {\n const validationError: ValidationError = new FatalError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n type: 'validation-error',\n publicMessage: `Invalid params in '${executable.id}', validation failed.`,\n errorData: {\n typeErrors: executable.headersParam.jitFns.typeErrors.fn(headers),\n },\n });\n throw validationError;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { RemoteMethod, RouteMethod } from '../types/remoteMethods.ts';
|
|
2
|
+
import { RouterOptions } from '../types/general.ts';
|
|
3
|
+
export declare const MIN_CHAIN_BODY_SIZE = 64;
|
|
4
|
+
export declare function resolveChainMaxBodySize(methods: RemoteMethod[], route: RouteMethod, opts: RouterOptions): number | undefined;
|
|
5
|
+
//# sourceMappingURL=bodyLimit.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { HandlerType } from "@mionjs/core";
|
|
2
|
+
//#region src/lib/bodyLimit.ts
|
|
3
|
+
/** Floor of a derived chain limit: a body of `{}` / `[]`, whitespace, or a no-params slot is never refused. */
|
|
4
|
+
var MIN_CHAIN_BODY_SIZE = 64;
|
|
5
|
+
/** A member's contribution: its own `maxBodySize` option, else the compact-JSON maximum of its params
|
|
6
|
+
* tuple the build computed, else unknown. One with no params and no option costs no slot at all. */
|
|
7
|
+
function memberBodyBytes(method) {
|
|
8
|
+
if (method.type === HandlerType.rawMiddleware) return null;
|
|
9
|
+
const declared = method.options.maxBodySize;
|
|
10
|
+
if (declared !== void 0) return declared;
|
|
11
|
+
if (!method.paramsCount) return null;
|
|
12
|
+
return method.paramsJsonMaxBytes;
|
|
13
|
+
}
|
|
14
|
+
/** The request limit of one chain, settled once at registration: the route's own `maxBodySize` option,
|
|
15
|
+
* else, when every member with params has a number, the largest keyed body `{"<id>":<params>,…}` times
|
|
16
|
+
* `maxBodySizeFactor`, else undefined, meaning the types cannot say and the request takes the adapter's
|
|
17
|
+
* `maxBodySize` at resolve time. Reads `options.maxBodySize` BEFORE it is overwritten with the result. */
|
|
18
|
+
function resolveChainMaxBodySize(methods, route, opts) {
|
|
19
|
+
if (route.options.maxBodySize !== void 0) return route.options.maxBodySize;
|
|
20
|
+
let total = 2;
|
|
21
|
+
let slots = 0;
|
|
22
|
+
for (const method of methods) {
|
|
23
|
+
const bytes = memberBodyBytes(method);
|
|
24
|
+
if (bytes === null) continue;
|
|
25
|
+
if (bytes === void 0) return void 0;
|
|
26
|
+
total += method.quotedId.length + 1 + bytes;
|
|
27
|
+
slots++;
|
|
28
|
+
}
|
|
29
|
+
if (slots > 1) total += slots - 1;
|
|
30
|
+
return Math.max(Math.ceil(total * opts.maxBodySizeFactor), 64);
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { MIN_CHAIN_BODY_SIZE, resolveChainMaxBodySize };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=bodyLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodyLimit.js","names":[],"sources":["../../../../src/lib/bodyLimit.ts"],"sourcesContent":["/* ########\n * 2026 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {HandlerType} from '@mionjs/core';\nimport type {RemoteMethod, RouteMethod} from '../types/remoteMethods.ts';\nimport type {RouterOptions} from '../types/general.ts';\n\n/** Floor of a derived chain limit: a body of `{}` / `[]`, whitespace, or a no-params slot is never refused. */\nexport const MIN_CHAIN_BODY_SIZE = 64;\n\n/** A member's contribution: its own `maxBodySize` option, else the compact-JSON maximum of its params\n * tuple the build computed, else unknown. One with no params and no option costs no slot at all. */\nfunction memberBodyBytes(method: RemoteMethod): number | undefined | null {\n if (method.type === HandlerType.rawMiddleware) return null;\n const declared = method.options.maxBodySize;\n if (declared !== undefined) return declared;\n if (!method.paramsCount) return null;\n return method.paramsJsonMaxBytes;\n}\n\n/** The request limit of one chain, settled once at registration: the route's own `maxBodySize` option,\n * else, when every member with params has a number, the largest keyed body `{\"<id>\":<params>,…}` times\n * `maxBodySizeFactor`, else undefined, meaning the types cannot say and the request takes the adapter's\n * `maxBodySize` at resolve time. Reads `options.maxBodySize` BEFORE it is overwritten with the result. */\nexport function resolveChainMaxBodySize(methods: RemoteMethod[], route: RouteMethod, opts: RouterOptions): number | undefined {\n if (route.options.maxBodySize !== undefined) return route.options.maxBodySize;\n let total = 2; // the braces\n let slots = 0;\n for (const method of methods) {\n const bytes = memberBodyBytes(method);\n if (bytes === null) continue;\n if (bytes === undefined) return undefined;\n total += method.quotedId.length + 1 + bytes; // `\"id\":` + params\n slots++;\n }\n if (slots > 1) total += slots - 1; // the commas\n return Math.max(Math.ceil(total * opts.maxBodySizeFactor), MIN_CHAIN_BODY_SIZE);\n}\n"],"mappings":";;;AAYA,IAAa,sBAAsB;;;AAInC,SAAS,gBAAgB,QAAiD;CACxE,IAAI,OAAO,SAAS,YAAY,eAAe,OAAO;CACtD,MAAM,WAAW,OAAO,QAAQ;CAChC,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,IAAI,CAAC,OAAO,aAAa,OAAO;CAChC,OAAO,OAAO;AAChB;;;;;AAMA,SAAgB,wBAAwB,SAAyB,OAAoB,MAAyC;CAC5H,IAAI,MAAM,QAAQ,gBAAgB,KAAA,GAAW,OAAO,MAAM,QAAQ;CAClE,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,QAAQ,gBAAgB,MAAM;EACpC,IAAI,UAAU,MAAM;EACpB,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,SAAS,OAAO,SAAS,SAAS,IAAI;EACtC;CACF;CACA,IAAI,QAAQ,GAAG,SAAS,QAAQ;CAChC,OAAO,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK,iBAAiB,GAAA,EAAsB;AAChF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RpcError } from '@mionjs/core';
|
|
2
|
+
export declare function requestPayloadTooLarge(): RpcError<'request-payload-too-large'>;
|
|
3
|
+
export declare const BodyReadStrategy: {
|
|
4
|
+
readonly stream: 1;
|
|
5
|
+
readonly text: 2;
|
|
6
|
+
readonly buffered: 3;
|
|
7
|
+
};
|
|
8
|
+
export type BodyReadStrategy = (typeof BodyReadStrategy)[keyof typeof BodyReadStrategy];
|
|
9
|
+
export declare function readRequestBody(req: Request, maxBodySize: number, strategy: BodyReadStrategy): Promise<string | undefined>;
|
|
10
|
+
//# sourceMappingURL=bodyReader.d.ts.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { FatalError, StatusCodes } from "@mionjs/core";
|
|
2
|
+
//#region src/lib/bodyReader.ts
|
|
3
|
+
/** The 413 a platform adapter answers when a body passes the route's limit while it arrives. */
|
|
4
|
+
function requestPayloadTooLarge() {
|
|
5
|
+
return new FatalError({
|
|
6
|
+
statusCode: StatusCodes.PAYLOAD_TOO_LARGE,
|
|
7
|
+
publicMessage: "Payload Too Large",
|
|
8
|
+
type: "request-payload-too-large"
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/** How a fetch-style runtime reads a body fastest, a numeric code so the per-request check is one integer
|
|
12
|
+
* compare. Measured on each runtime with a real server:
|
|
13
|
+
* `stream` pulls the body stream and decodes once: node's Request (undici, the vercel node runtime), where
|
|
14
|
+
* `text()` is slower than its own stream at every size.
|
|
15
|
+
* `text` is `text()` when a content-length is declared, the stream otherwise: workerd, where both are
|
|
16
|
+
* native and only the stream can stop an upload mid-flight.
|
|
17
|
+
* `buffered` is `text()` or `arrayBuffer()`, never the stream reader: bun buffers the body natively and its
|
|
18
|
+
* stream reader is over ten times slower, so its server-wide native limit is the one mid-flight guard. */
|
|
19
|
+
var BodyReadStrategy = {
|
|
20
|
+
stream: 1,
|
|
21
|
+
text: 2,
|
|
22
|
+
buffered: 3
|
|
23
|
+
};
|
|
24
|
+
var utf8 = new TextDecoder();
|
|
25
|
+
/** Reads a fetch-style request body as text against the route's limit, the way the runtime reads fastest
|
|
26
|
+
* (`strategy`). A declared `content-length` past the limit is refused before a byte is read. Sizes are
|
|
27
|
+
* counted in bytes, never less than the character count the router checks again before parsing, so the
|
|
28
|
+
* byte-exact refusal here always fires first. Undefined for a request with no body, else the router's 413. */
|
|
29
|
+
async function readRequestBody(req, maxBodySize, strategy) {
|
|
30
|
+
if (!req.body) return void 0;
|
|
31
|
+
const declared = req.headers.get("content-length");
|
|
32
|
+
if (declared !== null) {
|
|
33
|
+
if (Number(declared) > maxBodySize) throw requestPayloadTooLarge();
|
|
34
|
+
if (strategy !== BodyReadStrategy.stream) return req.text();
|
|
35
|
+
return readStream(req, maxBodySize);
|
|
36
|
+
}
|
|
37
|
+
if (strategy !== BodyReadStrategy.buffered) return readStream(req, maxBodySize);
|
|
38
|
+
const bytes = await req.arrayBuffer();
|
|
39
|
+
if (bytes.byteLength > maxBodySize) throw requestPayloadTooLarge();
|
|
40
|
+
return utf8.decode(bytes);
|
|
41
|
+
}
|
|
42
|
+
/** Pulls the body chunk by chunk with the running size counted, cancels the stream the moment it
|
|
43
|
+
* passes the limit so the rest is never pulled, and decodes ONCE at the end. */
|
|
44
|
+
async function readStream(req, maxBodySize) {
|
|
45
|
+
const reader = req.body.getReader();
|
|
46
|
+
const chunks = [];
|
|
47
|
+
let size = 0;
|
|
48
|
+
for (;;) {
|
|
49
|
+
const { done, value } = await reader.read();
|
|
50
|
+
if (done) break;
|
|
51
|
+
size += value.byteLength;
|
|
52
|
+
if (size > maxBodySize) {
|
|
53
|
+
await reader.cancel();
|
|
54
|
+
throw requestPayloadTooLarge();
|
|
55
|
+
}
|
|
56
|
+
chunks.push(value);
|
|
57
|
+
}
|
|
58
|
+
return decodeOnce(chunks, size);
|
|
59
|
+
}
|
|
60
|
+
/** One UTF-8 decode over the whole body: a single chunk decodes in place, several are joined into
|
|
61
|
+
* one buffer first so a character split across chunks is never decoded in halves. */
|
|
62
|
+
function decodeOnce(chunks, size) {
|
|
63
|
+
if (chunks.length === 0) return "";
|
|
64
|
+
if (chunks.length === 1) return utf8.decode(chunks[0]);
|
|
65
|
+
const joined = new Uint8Array(size);
|
|
66
|
+
let offset = 0;
|
|
67
|
+
for (const chunk of chunks) {
|
|
68
|
+
joined.set(chunk, offset);
|
|
69
|
+
offset += chunk.byteLength;
|
|
70
|
+
}
|
|
71
|
+
return utf8.decode(joined);
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { BodyReadStrategy, readRequestBody, requestPayloadTooLarge };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=bodyReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodyReader.js","names":[],"sources":["../../../../src/lib/bodyReader.ts"],"sourcesContent":["/* ########\n * 2026 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {FatalError, RpcError, StatusCodes} from '@mionjs/core';\n\n/** The 413 a platform adapter answers when a body passes the route's limit while it arrives. */\nexport function requestPayloadTooLarge(): RpcError<'request-payload-too-large'> {\n return new FatalError({\n statusCode: StatusCodes.PAYLOAD_TOO_LARGE,\n publicMessage: 'Payload Too Large',\n type: 'request-payload-too-large',\n });\n}\n\n/** How a fetch-style runtime reads a body fastest, a numeric code so the per-request check is one integer\n * compare. Measured on each runtime with a real server:\n * `stream` pulls the body stream and decodes once: node's Request (undici, the vercel node runtime), where\n * `text()` is slower than its own stream at every size.\n * `text` is `text()` when a content-length is declared, the stream otherwise: workerd, where both are\n * native and only the stream can stop an upload mid-flight.\n * `buffered` is `text()` or `arrayBuffer()`, never the stream reader: bun buffers the body natively and its\n * stream reader is over ten times slower, so its server-wide native limit is the one mid-flight guard. */\nexport const BodyReadStrategy = {stream: 1, text: 2, buffered: 3} as const;\nexport type BodyReadStrategy = (typeof BodyReadStrategy)[keyof typeof BodyReadStrategy];\n\n// One decoder for every request: a non-streaming `decode` keeps no state between calls, so sharing it is\n// safe. A streaming decode (`{stream: true}`) would not be, which is why the stream path decodes ONCE.\nconst utf8 = new TextDecoder();\n\n/** Reads a fetch-style request body as text against the route's limit, the way the runtime reads fastest\n * (`strategy`). A declared `content-length` past the limit is refused before a byte is read. Sizes are\n * counted in bytes, never less than the character count the router checks again before parsing, so the\n * byte-exact refusal here always fires first. Undefined for a request with no body, else the router's 413. */\nexport async function readRequestBody(\n req: Request,\n maxBodySize: number,\n strategy: BodyReadStrategy\n): Promise<string | undefined> {\n if (!req.body) return undefined;\n const declared = req.headers.get('content-length');\n if (declared !== null) {\n if (Number(declared) > maxBodySize) throw requestPayloadTooLarge();\n // the runtime delivers exactly content-length bytes: one native decode\n if (strategy !== BodyReadStrategy.stream) return req.text();\n return readStream(req, maxBodySize);\n }\n if (strategy !== BodyReadStrategy.buffered) return readStream(req, maxBodySize);\n // no content-length on a runtime whose stream reader is the slow path: take the bytes whole\n // (the native server limit already bounded them) and refuse past the limit before decoding\n const bytes = await req.arrayBuffer();\n if (bytes.byteLength > maxBodySize) throw requestPayloadTooLarge();\n return utf8.decode(bytes);\n}\n\n/** Pulls the body chunk by chunk with the running size counted, cancels the stream the moment it\n * passes the limit so the rest is never pulled, and decodes ONCE at the end. */\nasync function readStream(req: Request, maxBodySize: number): Promise<string> {\n const reader = req.body!.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for (;;) {\n const {done, value} = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (size > maxBodySize) {\n await reader.cancel();\n throw requestPayloadTooLarge();\n }\n chunks.push(value);\n }\n return decodeOnce(chunks, size);\n}\n\n/** One UTF-8 decode over the whole body: a single chunk decodes in place, several are joined into\n * one buffer first so a character split across chunks is never decoded in halves. */\nfunction decodeOnce(chunks: Uint8Array[], size: number): string {\n if (chunks.length === 0) return '';\n if (chunks.length === 1) return utf8.decode(chunks[0]);\n const joined = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n joined.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return utf8.decode(joined);\n}\n"],"mappings":";;;AAUA,SAAgB,yBAAgE;CAC9E,OAAO,IAAI,WAAW;EACpB,YAAY,YAAY;EACxB,eAAe;EACf,MAAM;CACR,CAAC;AACH;;;;;;;;;AAUA,IAAa,mBAAmB;CAAC,QAAQ;CAAG,MAAM;CAAG,UAAU;AAAC;AAKhE,IAAM,OAAO,IAAI,YAAY;;;;;AAM7B,eAAsB,gBACpB,KACA,aACA,UAC6B;CAC7B,IAAI,CAAC,IAAI,MAAM,OAAO,KAAA;CACtB,MAAM,WAAW,IAAI,QAAQ,IAAI,gBAAgB;CACjD,IAAI,aAAa,MAAM;EACrB,IAAI,OAAO,QAAQ,IAAI,aAAa,MAAM,uBAAuB;EAEjE,IAAI,aAAa,iBAAiB,QAAQ,OAAO,IAAI,KAAK;EAC1D,OAAO,WAAW,KAAK,WAAW;CACpC;CACA,IAAI,aAAa,iBAAiB,UAAU,OAAO,WAAW,KAAK,WAAW;CAG9E,MAAM,QAAQ,MAAM,IAAI,YAAY;CACpC,IAAI,MAAM,aAAa,aAAa,MAAM,uBAAuB;CACjE,OAAO,KAAK,OAAO,KAAK;AAC1B;;;AAIA,eAAe,WAAW,KAAc,aAAsC;CAC5E,MAAM,SAAS,IAAI,KAAM,UAAU;CACnC,MAAM,SAAuB,CAAC;CAC9B,IAAI,OAAO;CACX,SAAS;EACP,MAAM,EAAC,MAAM,UAAS,MAAM,OAAO,KAAK;EACxC,IAAI,MAAM;EACV,QAAQ,MAAM;EACd,IAAI,OAAO,aAAa;GACtB,MAAM,OAAO,OAAO;GACpB,MAAM,uBAAuB;EAC/B;EACA,OAAO,KAAK,KAAK;CACnB;CACA,OAAO,WAAW,QAAQ,IAAI;AAChC;;;AAIA,SAAS,WAAW,QAAsB,MAAsB;CAC9D,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,IAAI,OAAO,WAAW,GAAG,OAAO,KAAK,OAAO,OAAO,EAAE;CACrD,MAAM,SAAS,IAAI,WAAW,IAAI;CAClC,IAAI,SAAS;CACb,KAAK,MAAM,SAAS,QAAQ;EAC1B,OAAO,IAAI,OAAO,MAAM;EACxB,UAAU,MAAM;CAClB;CACA,OAAO,KAAK,OAAO,MAAM;AAC3B"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { RpcError } from '@mionjs/core';
|
|
2
2
|
import { CallContext, MionHeaders, MionResponse } from '../types/context.ts';
|
|
3
|
-
import { RemoteMethod } from '../types/remoteMethods.ts';
|
|
4
3
|
export declare function getRouterFatalErrorResponse(returnErr: RpcError<string>, respHeaders: MionHeaders): MionResponse;
|
|
5
|
-
export declare function
|
|
4
|
+
export declare function errorHeaderValue(type: string): string;
|
|
5
|
+
export declare function markResponseFailed(context: CallContext, rpcError: RpcError<string>, fallbackStatus: number): void;
|
|
6
|
+
export declare function toRpcError(err: unknown): RpcError<string>;
|
|
7
|
+
export declare function recordUndeclaredError(context: CallContext, key: string, err: any): void;
|
|
8
|
+
export declare function addThrownError(context: CallContext, key: string, rpcError: RpcError<string>): void;
|
|
9
|
+
export declare function hasThrownError(context: CallContext, key: string): boolean;
|
|
6
10
|
//# sourceMappingURL=dispatchError.d.ts.map
|