@sanurb/ringi 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/cli.mjs +505 -114
- package/dist/cli.mjs.map +1 -1
- package/dist/mcp.mjs +35 -39
- package/dist/mcp.mjs.map +1 -1
- package/dist/runtime.mjs +569 -428
- package/dist/runtime.mjs.map +1 -1
- package/package.json +13 -13
- package/server/nitro.json +17 -0
- package/server/public/assets/ClientOnly-QdfAxyFs.js +1 -0
- package/server/public/assets/_reviewId-CmXHvWLn.js +1 -0
- package/server/public/assets/_reviewId-DdOpDx4U.js +1 -0
- package/server/public/assets/abap-B1dkBSPn.js +1 -0
- package/server/public/assets/action-bar-DLRNvLjj.js +45 -0
- package/server/public/assets/actionscript-3-BT4ibYlP.js +1 -0
- package/server/public/assets/ada-CD92zeps.js +1 -0
- package/server/public/assets/andromeeda-DqSmgxi0.js +1 -0
- package/server/public/assets/angular-html-BDC0PfKr.js +1 -0
- package/server/public/assets/angular-ts-B9yoQMtj.js +1 -0
- package/server/public/assets/apache-D5suuoa_.js +1 -0
- package/server/public/assets/apex-BL-m4VHy.js +1 -0
- package/server/public/assets/apl-CldhY0Pn.js +1 -0
- package/server/public/assets/applescript-CLiBqvKT.js +1 -0
- package/server/public/assets/ara-LdDF8cmv.js +1 -0
- package/server/public/assets/asciidoc-2DZ9hC2N.js +1 -0
- package/server/public/assets/asm-0ZPGRSUy.js +1 -0
- package/server/public/assets/astro-DR6labZJ.js +1 -0
- package/server/public/assets/aurora-x-Da7Zfvbg.js +1 -0
- package/server/public/assets/awk-Bn0gn_B_.js +1 -0
- package/server/public/assets/ayu-dark-bqYKoqpM.js +1 -0
- package/server/public/assets/ayu-light-C45jTIzZ.js +1 -0
- package/server/public/assets/ayu-mirage-BV_FCTQi.js +1 -0
- package/server/public/assets/ballerina-D2nw_w8Q.js +1 -0
- package/server/public/assets/bat-ByUBN5gS.js +1 -0
- package/server/public/assets/beancount-BTb2W6Mp.js +1 -0
- package/server/public/assets/berry-5SO2uITG.js +1 -0
- package/server/public/assets/bibtex-CDBTNfUI.js +1 -0
- package/server/public/assets/bicep-fgxG_4rP.js +1 -0
- package/server/public/assets/bird2-BCwzDhwX.js +1 -0
- package/server/public/assets/blade-BBTRu2-g.js +1 -0
- package/server/public/assets/bsl-CG-fq4sc.js +1 -0
- package/server/public/assets/c-CEvNj7xl.js +1 -0
- package/server/public/assets/c3-Dlaci63_.js +1 -0
- package/server/public/assets/cadence-DHbRuEmm.js +1 -0
- package/server/public/assets/cairo-Ds0kTeYT.js +1 -0
- package/server/public/assets/catppuccin-frappe-DrL1fUuH.js +1 -0
- package/server/public/assets/catppuccin-latte-C0REgVjl.js +1 -0
- package/server/public/assets/catppuccin-macchiato-ChQpylWO.js +1 -0
- package/server/public/assets/catppuccin-mocha-Dd0JU1T0.js +1 -0
- package/server/public/assets/clarity-DMoTOm4G.js +1 -0
- package/server/public/assets/clojure-DBhE3PpS.js +1 -0
- package/server/public/assets/cmake-DwMc40Or.js +1 -0
- package/server/public/assets/cobol-BdNJSMRt.js +1 -0
- package/server/public/assets/codeowners-1lVr8wqV.js +1 -0
- package/server/public/assets/codeql-DWflolvo.js +1 -0
- package/server/public/assets/coffee-RA4xA24H.js +1 -0
- package/server/public/assets/common-lisp-CrVQ5xT-.js +1 -0
- package/server/public/assets/compiler-runtime-DZXZ41-q.js +1 -0
- package/server/public/assets/coq-CjfoyYSh.js +1 -0
- package/server/public/assets/cpp-BoW7e2Ow.js +1 -0
- package/server/public/assets/createServerFn-DTk395iP.js +9 -0
- package/server/public/assets/crystal-CYKRo3F9.js +1 -0
- package/server/public/assets/csharp-C7bIWP5y.js +1 -0
- package/server/public/assets/css-Ck2tii2d.js +1 -0
- package/server/public/assets/csv-DsAkDVtA.js +1 -0
- package/server/public/assets/cue-BWmQgbOB.js +1 -0
- package/server/public/assets/cypher-D-jVC50Q.js +1 -0
- package/server/public/assets/d-CaviyOrm.js +1 -0
- package/server/public/assets/dark-plus-DIrnwZt9.js +1 -0
- package/server/public/assets/dart-CZEi7JgC.js +1 -0
- package/server/public/assets/dax-BK-8zffy.js +1 -0
- package/server/public/assets/desktop-D3cjbL4D.js +1 -0
- package/server/public/assets/diff-sHAzLvlp.js +1 -0
- package/server/public/assets/docker--xs2Ng3w.js +1 -0
- package/server/public/assets/dotenv-Cm4nwcJ7.js +1 -0
- package/server/public/assets/dracula-CAUSusef.js +1 -0
- package/server/public/assets/dracula-soft-cjNkMFza.js +1 -0
- package/server/public/assets/dream-maker-fjmWTFCO.js +1 -0
- package/server/public/assets/edge-DxycC9wl.js +1 -0
- package/server/public/assets/elixir-B-50Er3p.js +1 -0
- package/server/public/assets/elm-B4-ygIVo.js +1 -0
- package/server/public/assets/emacs-lisp-CJzqStIa.js +1 -0
- package/server/public/assets/erb-DJvYE1L1.js +1 -0
- package/server/public/assets/erlang-C-m_88FN.js +1 -0
- package/server/public/assets/everforest-dark-DBpaSMx1.js +1 -0
- package/server/public/assets/everforest-light-CiGrXwia.js +1 -0
- package/server/public/assets/fennel-DRaXF7k8.js +1 -0
- package/server/public/assets/file-tree-CI3Xwwid.js +1907 -0
- package/server/public/assets/fish-Bn-Yh3Jj.js +1 -0
- package/server/public/assets/fluent-DF5F8Ks_.js +1 -0
- package/server/public/assets/fortran-fixed-form-Cx1lv7HN.js +1 -0
- package/server/public/assets/fortran-free-form-hCQHRqew.js +1 -0
- package/server/public/assets/fsharp-DC5k9sy2.js +1 -0
- package/server/public/assets/gdresource-D0EsKdgH.js +1 -0
- package/server/public/assets/gdscript-_C9_Hi_w.js +1 -0
- package/server/public/assets/gdshader-BW7b1X1Y.js +1 -0
- package/server/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/server/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/server/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/server/public/assets/genie-Ch_6TCHd.js +1 -0
- package/server/public/assets/gherkin-CaNUsmTq.js +1 -0
- package/server/public/assets/git-commit-BcFsuO5E.js +1 -0
- package/server/public/assets/git-rebase-ChGA-z50.js +1 -0
- package/server/public/assets/github-dark-B9ygjgg6.js +1 -0
- package/server/public/assets/github-dark-default-Br2bgYSx.js +1 -0
- package/server/public/assets/github-dark-dimmed-CmtqpPJ-.js +1 -0
- package/server/public/assets/github-dark-high-contrast-fSfmrZcC.js +1 -0
- package/server/public/assets/github-light-BZjUqfZl.js +1 -0
- package/server/public/assets/github-light-default-lIytXXhR.js +1 -0
- package/server/public/assets/github-light-high-contrast-BRrjFb7n.js +1 -0
- package/server/public/assets/gleam-DALMDpNs.js +1 -0
- package/server/public/assets/glimmer-js-maLb6ysA.js +1 -0
- package/server/public/assets/glimmer-ts-DGNr-OBA.js +1 -0
- package/server/public/assets/glsl-CmplqyQ1.js +1 -0
- package/server/public/assets/gn-DGjqrYN9.js +1 -0
- package/server/public/assets/gnuplot-BYckvgQI.js +1 -0
- package/server/public/assets/go-JycvP538.js +1 -0
- package/server/public/assets/graphql-VhP7n4--.js +1 -0
- package/server/public/assets/groovy-D5qMRONT.js +1 -0
- package/server/public/assets/gruvbox-dark-hard-M1dj1e6V.js +1 -0
- package/server/public/assets/gruvbox-dark-medium-cqq_ncQu.js +1 -0
- package/server/public/assets/gruvbox-dark-soft-B4QwL2a9.js +1 -0
- package/server/public/assets/gruvbox-light-hard-DLayMKOQ.js +1 -0
- package/server/public/assets/gruvbox-light-medium-D52XgPKf.js +1 -0
- package/server/public/assets/gruvbox-light-soft-Dola3KdD.js +1 -0
- package/server/public/assets/hack-BVSQ2bxM.js +1 -0
- package/server/public/assets/haml-CwTtRHoj.js +1 -0
- package/server/public/assets/handlebars-CcO01SVo.js +1 -0
- package/server/public/assets/haskell-ys7wPPEd.js +1 -0
- package/server/public/assets/haxe-94kiChn7.js +1 -0
- package/server/public/assets/hcl-DmHt_-wq.js +1 -0
- package/server/public/assets/hjson-xMmoJ0Gx.js +1 -0
- package/server/public/assets/hlsl-b-Pskdze.js +1 -0
- package/server/public/assets/horizon-BKMqttiR.js +1 -0
- package/server/public/assets/horizon-bright-HNkBlnm5.js +1 -0
- package/server/public/assets/houston-BkBSBSOQ.js +1 -0
- package/server/public/assets/html-derivative-Cz-cKMi2.js +1 -0
- package/server/public/assets/html-zQbUS8Is.js +1 -0
- package/server/public/assets/http-CaGQ9BgA.js +1 -0
- package/server/public/assets/hurl-BBoki9bg.js +1 -0
- package/server/public/assets/hxml-iQTOTWpM.js +1 -0
- package/server/public/assets/hy-DKl1XhBq.js +1 -0
- package/server/public/assets/imba-DPxkOTAg.js +1 -0
- package/server/public/assets/ini-lkLGq_1x.js +1 -0
- package/server/public/assets/java-LAx6oszV.js +1 -0
- package/server/public/assets/javascript-COqx-gKX.js +1 -0
- package/server/public/assets/jinja-x-G_qSCP.js +1 -0
- package/server/public/assets/jison-7oSeVkKJ.js +1 -0
- package/server/public/assets/json-sTLOVXhc.js +1 -0
- package/server/public/assets/json5-Cy6ypJuJ.js +1 -0
- package/server/public/assets/jsonc-Cw2ugYAK.js +1 -0
- package/server/public/assets/jsonl-Dp5_qBVH.js +1 -0
- package/server/public/assets/jsonnet-BTbmg_-u.js +1 -0
- package/server/public/assets/jssm-CnT7nPea.js +1 -0
- package/server/public/assets/jsx-zXeIBQLI.js +1 -0
- package/server/public/assets/julia-E-6Xm9nd.js +1 -0
- package/server/public/assets/just-D9n74gZy.js +1 -0
- package/server/public/assets/kanagawa-dragon-CxsBnuhV.js +1 -0
- package/server/public/assets/kanagawa-lotus-vHdxDDOS.js +1 -0
- package/server/public/assets/kanagawa-wave-CIkfTKWk.js +1 -0
- package/server/public/assets/kdl-BwK60g80.js +1 -0
- package/server/public/assets/kotlin-Dbd9Vi-v.js +1 -0
- package/server/public/assets/kusto-BuTk9usc.js +1 -0
- package/server/public/assets/laserwave-C0wf_d3o.js +1 -0
- package/server/public/assets/latex-D0t4RtEU.js +1 -0
- package/server/public/assets/lean-CYAW8bRN.js +1 -0
- package/server/public/assets/less-D4uen21c.js +1 -0
- package/server/public/assets/light-plus-oqYyWKEE.js +1 -0
- package/server/public/assets/liquid-BzXN12F6.js +1 -0
- package/server/public/assets/llvm-Z1xJzteV.js +1 -0
- package/server/public/assets/log-BGUxlsk3.js +1 -0
- package/server/public/assets/logo-wVUhvQ1b.js +1 -0
- package/server/public/assets/lua-B0Cg8RP4.js +1 -0
- package/server/public/assets/luau-rPFZzCmq.js +1 -0
- package/server/public/assets/main-FvxVz-kD.js +15 -0
- package/server/public/assets/make-BmPf6m0P.js +1 -0
- package/server/public/assets/markdown-AseU6zcW.js +1 -0
- package/server/public/assets/marko-BlRPXWOe.js +1 -0
- package/server/public/assets/material-theme-6_W6rQhR.js +1 -0
- package/server/public/assets/material-theme-darker-VPEo3Sem.js +1 -0
- package/server/public/assets/material-theme-lighter-CUhzCcZ9.js +1 -0
- package/server/public/assets/material-theme-ocean-B2JdsaGb.js +1 -0
- package/server/public/assets/material-theme-palenight-DhY-sklA.js +1 -0
- package/server/public/assets/matlab-BOj_BDQv.js +1 -0
- package/server/public/assets/mdc-FiVDZSZ4.js +1 -0
- package/server/public/assets/mdx-Cm6cDkDI.js +1 -0
- package/server/public/assets/mermaid-DLO-R4hv.js +1 -0
- package/server/public/assets/min-dark-D34a_pX7.js +1 -0
- package/server/public/assets/min-light-Cdd4KORE.js +1 -0
- package/server/public/assets/mipsasm-DYpHF-GA.js +1 -0
- package/server/public/assets/mojo-DqYVFv_G.js +1 -0
- package/server/public/assets/monokai-CDR4sQ2n.js +1 -0
- package/server/public/assets/moonbit-DRKee9wk.js +1 -0
- package/server/public/assets/move-DbRk6Vn9.js +1 -0
- package/server/public/assets/narrat-IOfmaXfb.js +1 -0
- package/server/public/assets/new-DOyplRwM.js +1 -0
- package/server/public/assets/nextflow-D-Ec_bsY.js +1 -0
- package/server/public/assets/nextflow-groovy-EYl0c2BQ.js +1 -0
- package/server/public/assets/nginx-3JLAqmJa.js +1 -0
- package/server/public/assets/night-owl-light-Bedht9b4.js +1 -0
- package/server/public/assets/night-owl-yQJ3-I0I.js +1 -0
- package/server/public/assets/nim-DyjFVMzT.js +1 -0
- package/server/public/assets/nix-C2IovEl2.js +1 -0
- package/server/public/assets/nord-BjZ63GNL.js +1 -0
- package/server/public/assets/nushell-BflTrRB5.js +1 -0
- package/server/public/assets/objective-c-GRClK1S7.js +1 -0
- package/server/public/assets/objective-cpp-l3qYw-v5.js +1 -0
- package/server/public/assets/ocaml-BBDyhyMH.js +1 -0
- package/server/public/assets/odin-jCJ7Js99.js +1 -0
- package/server/public/assets/one-dark-pro-PIx2Diul.js +1 -0
- package/server/public/assets/one-light-BFMEz49S.js +1 -0
- package/server/public/assets/openscad-Drf0LgCX.js +1 -0
- package/server/public/assets/pascal-BT2XAUTl.js +1 -0
- package/server/public/assets/perl-Dr47G_2Q.js +1 -0
- package/server/public/assets/php-BhBDWTJe.js +1 -0
- package/server/public/assets/pierre-dark-CTXzTLfO.js +1 -0
- package/server/public/assets/pierre-light-C_5rlJRo.js +1 -0
- package/server/public/assets/pkl-ML-dWShO.js +1 -0
- package/server/public/assets/plastic-BFI-Z5Z2.js +1 -0
- package/server/public/assets/plsql-0vd5cLro.js +1 -0
- package/server/public/assets/po-CbZ_uqQA.js +1 -0
- package/server/public/assets/poimandres-Cayhd01L.js +1 -0
- package/server/public/assets/polar-C4hfV8Nc.js +1 -0
- package/server/public/assets/postcss-osFUbTLw.js +1 -0
- package/server/public/assets/powerquery-CTlGUQPj.js +1 -0
- package/server/public/assets/powershell-DyZsOmuq.js +1 -0
- package/server/public/assets/preload-helper-D7oT-Xwl.js +20 -0
- package/server/public/assets/prisma-SS92PO_I.js +1 -0
- package/server/public/assets/prolog-B1O1NNVC.js +1 -0
- package/server/public/assets/proto-BWu3eZTs.js +1 -0
- package/server/public/assets/pug-Dij_IK5w.js +1 -0
- package/server/public/assets/puppet-tvtRVdr6.js +1 -0
- package/server/public/assets/purescript-Dtbpb7D-.js +1 -0
- package/server/public/assets/python-Dlk0Acio.js +1 -0
- package/server/public/assets/qml-qUwk3nhh.js +1 -0
- package/server/public/assets/qmldir-B-iEOngH.js +1 -0
- package/server/public/assets/qss-Ba0p-aHw.js +1 -0
- package/server/public/assets/r-WmtNicKM.js +1 -0
- package/server/public/assets/racket-BXDsxf2U.js +1 -0
- package/server/public/assets/raku-Dw1WWFXK.js +1 -0
- package/server/public/assets/razor-DaqiVx3Q.js +1 -0
- package/server/public/assets/red-BC3Ds49b.js +1 -0
- package/server/public/assets/reg-DXFHGaM4.js +1 -0
- package/server/public/assets/regexp-CiSWN5Ne.js +1 -0
- package/server/public/assets/rel-Dc5_Ytx2.js +1 -0
- package/server/public/assets/reviews-CJvVXRLH.js +1 -0
- package/server/public/assets/reviews-CfbuF6ib.js +1 -0
- package/server/public/assets/riscv-ZgswiWij.js +1 -0
- package/server/public/assets/ron-YghabWAH.js +1 -0
- package/server/public/assets/rose-pine-ByWLnVr3.js +1 -0
- package/server/public/assets/rose-pine-dawn-DBmeySrz.js +1 -0
- package/server/public/assets/rose-pine-moon-B9J-N3nK.js +1 -0
- package/server/public/assets/rosmsg-DTKmAsVH.js +1 -0
- package/server/public/assets/routes-DNxq1Fba.js +1 -0
- package/server/public/assets/routes-Dp0ODZ55.js +2 -0
- package/server/public/assets/rst-CP6xOYlY.js +1 -0
- package/server/public/assets/ruby-BXYLc1CM.js +1 -0
- package/server/public/assets/rust-nfXwuE6F.js +1 -0
- package/server/public/assets/sas-CFdtZutF.js +1 -0
- package/server/public/assets/sass-CbRjkld3.js +1 -0
- package/server/public/assets/scala-BzD3eypx.js +1 -0
- package/server/public/assets/scheme-D4d1PV1y.js +1 -0
- package/server/public/assets/scss-D8KhdObH.js +1 -0
- package/server/public/assets/sdbl-Cf-Ydnvx.js +1 -0
- package/server/public/assets/shaderlab-DGohHMiF.js +1 -0
- package/server/public/assets/shellscript-BHdEbumI.js +1 -0
- package/server/public/assets/shellsession-Dh-bxrap.js +1 -0
- package/server/public/assets/slack-dark-MszIyPZ2.js +1 -0
- package/server/public/assets/slack-ochin-tQ3Q0gE9.js +1 -0
- package/server/public/assets/smalltalk-_uWoArwn.js +1 -0
- package/server/public/assets/snazzy-light-9sniMEk5.js +1 -0
- package/server/public/assets/solarized-dark-CdD0Hxzv.js +1 -0
- package/server/public/assets/solarized-light-C-nsEdqF.js +1 -0
- package/server/public/assets/solidity-D6uC-xwP.js +1 -0
- package/server/public/assets/soy-cDuODfbT.js +1 -0
- package/server/public/assets/sparql-BgU2QITA.js +1 -0
- package/server/public/assets/splunk-LQYHRu14.js +1 -0
- package/server/public/assets/sql-CKZpK620.js +1 -0
- package/server/public/assets/ssh-config-B7BUl8Rd.js +1 -0
- package/server/public/assets/stata-BLJTbKOO.js +1 -0
- package/server/public/assets/styles-UDowwF7S.css +2 -0
- package/server/public/assets/stylus-Byjxdx_q.js +1 -0
- package/server/public/assets/surrealql-C96KvYaj.js +1 -0
- package/server/public/assets/svelte-Qnbj2GWx.js +1 -0
- package/server/public/assets/swift-BexLlMrU.js +1 -0
- package/server/public/assets/synthwave-84-BxMBwQMS.js +1 -0
- package/server/public/assets/system-verilog-DVGwm0mw.js +1 -0
- package/server/public/assets/systemd-H2IT3-p5.js +1 -0
- package/server/public/assets/talonscript-mKZIGM8n.js +1 -0
- package/server/public/assets/tasl-B7he_Ugr.js +1 -0
- package/server/public/assets/tcl-5mT3RxHH.js +1 -0
- package/server/public/assets/templ-CQPDll3D.js +1 -0
- package/server/public/assets/terraform-BZP0GLsT.js +1 -0
- package/server/public/assets/test-D7JRfog1.js +1 -0
- package/server/public/assets/tex-97QNLoBJ.js +1 -0
- package/server/public/assets/tokyo-night-CTPVdZt9.js +1 -0
- package/server/public/assets/toml-CTFA98he.js +1 -0
- package/server/public/assets/ts-tags-B8zlXe2n.js +1 -0
- package/server/public/assets/tsv-BayJtYdY.js +1 -0
- package/server/public/assets/tsx-VqRU8NCz.js +1 -0
- package/server/public/assets/turtle-TVCBh_kY.js +1 -0
- package/server/public/assets/twig-FTTF8rVk.js +1 -0
- package/server/public/assets/typescript-CuX0hIVY.js +1 -0
- package/server/public/assets/typespec-BUvaJDLF.js +1 -0
- package/server/public/assets/typst-8NBaY7Ec.js +1 -0
- package/server/public/assets/useStore-M3H8PB1v.js +1 -0
- package/server/public/assets/utils-DElCu2hq.js +1 -0
- package/server/public/assets/v-VihyTigi.js +1 -0
- package/server/public/assets/vala-DyFAPyX6.js +1 -0
- package/server/public/assets/vb-Dg1Iqi4J.js +1 -0
- package/server/public/assets/verilog-D2Xc-vhD.js +1 -0
- package/server/public/assets/vesper-DJbtqYNr.js +1 -0
- package/server/public/assets/vhdl-CU3BVeE7.js +1 -0
- package/server/public/assets/viml-hG2shuOW.js +1 -0
- package/server/public/assets/vitesse-black-DbG2gsc0.js +1 -0
- package/server/public/assets/vitesse-dark-B6WV4xXH.js +1 -0
- package/server/public/assets/vitesse-light-DC1pdD02.js +1 -0
- package/server/public/assets/vue-DXwaEU0U.js +1 -0
- package/server/public/assets/vue-html-QD7AJ6JJ.js +1 -0
- package/server/public/assets/vue-vine-Bh2m1D2Z.js +1 -0
- package/server/public/assets/vyper-C1wojIuk.js +1 -0
- package/server/public/assets/wasm-C6Y0s02M.js +1 -0
- package/server/public/assets/wasm-qTvCOSHz.js +1 -0
- package/server/public/assets/wenyan-BG5vPQF0.js +1 -0
- package/server/public/assets/wgsl-DrVb-Cub.js +1 -0
- package/server/public/assets/wikitext-PRC4s8sH.js +1 -0
- package/server/public/assets/wit-ChW5qvg_.js +1 -0
- package/server/public/assets/wolfram-B8mKuZSQ.js +1 -0
- package/server/public/assets/xml-BK-rcb5a.js +1 -0
- package/server/public/assets/xsl-dt-d2R7p.js +1 -0
- package/server/public/assets/yaml-UiXU3hGj.js +1 -0
- package/server/public/assets/zenscript-C-jEPC9j.js +1 -0
- package/server/public/assets/zig-EbnRGjcz.js +1 -0
- package/server/public/favicon.ico +0 -0
- package/server/public/logo192.png +0 -0
- package/server/public/logo512.png +0 -0
- package/server/public/manifest.json +25 -0
- package/server/public/robots.txt +3 -0
- package/server/public/tanstack-circle-logo.png +0 -0
- package/server/public/tanstack-word-logo-white.svg +1 -0
- package/server/server/_chunks/ssr-renderer.mjs +15 -0
- package/server/server/_libs/@floating-ui/core+[...].mjs +698 -0
- package/server/server/_libs/@floating-ui/dom+[...].mjs +644 -0
- package/server/server/_libs/@floating-ui/react-dom+[...].mjs +839 -0
- package/server/server/_libs/@pierre/diffs+[...].mjs +18578 -0
- package/server/server/_libs/@radix-ui/react-arrow+[...].mjs +174 -0
- package/server/server/_libs/@radix-ui/react-collection+[...].mjs +162 -0
- package/server/server/_libs/@radix-ui/react-dialog+[...].mjs +1666 -0
- package/server/server/_libs/@radix-ui/react-popper+[...].mjs +289 -0
- package/server/server/_libs/@radix-ui/react-radio-group+[...].mjs +420 -0
- package/server/server/_libs/@radix-ui/react-select+[...].mjs +990 -0
- package/server/server/_libs/@tanstack/react-router+[...].mjs +14113 -0
- package/server/server/_libs/_.mjs +2 -0
- package/server/server/_libs/chokidar+readdirp.mjs +1599 -0
- package/server/server/_libs/class-variance-authority+clsx.mjs +69 -0
- package/server/server/_libs/effect+[...].mjs +34047 -0
- package/server/server/_libs/h3+rou3+srvx.mjs +1195 -0
- package/server/server/_libs/hookable.mjs +41 -0
- package/server/server/_libs/lucide-react.mjs +298 -0
- package/server/server/_libs/pierre__theme.mjs +2668 -0
- package/server/server/_libs/radix-ui__number.mjs +6 -0
- package/server/server/_libs/radix-ui__primitive.mjs +9 -0
- package/server/server/_libs/radix-ui__react-direction.mjs +11 -0
- package/server/server/_libs/shiki.mjs +16 -0
- package/server/server/_libs/shikijs__langs.mjs +1355 -0
- package/server/server/_libs/shikijs__themes.mjs +262 -0
- package/server/server/_libs/tailwind-merge.mjs +1962 -0
- package/server/server/_libs/tanstack__history.mjs +342 -0
- package/server/server/_libs/tanstack__router-core.mjs +6 -0
- package/server/server/_libs/ufo.mjs +64 -0
- package/server/server/_reviewId-AWnOGz5k.mjs +33 -0
- package/server/server/_reviewId-Com4yOlc.mjs +29 -0
- package/server/server/_reviewId-DAhmekJ2.mjs +277 -0
- package/server/server/_reviewId-p9mhYVwa.mjs +18 -0
- package/server/server/_runtime.mjs +35 -0
- package/server/server/_ssr/action-bar-C68xGnWW.mjs +592 -0
- package/server/server/_ssr/api-handler-CstW2n82.mjs +189 -0
- package/server/server/_ssr/client-runtime-BoPuAEoA.mjs +245 -0
- package/server/server/_ssr/createServerRpc--0mcGlWK.mjs +12 -0
- package/server/server/_ssr/createSsrRpc-AwdiLXmF.mjs +16 -0
- package/server/server/_ssr/domain-rpc-3Ds9DPr0.mjs +287 -0
- package/server/server/_ssr/file-tree-CQ5w2GHh.mjs +1951 -0
- package/server/server/_ssr/load-scoped-diff-NL2XAcdz.mjs +45 -0
- package/server/server/_ssr/new-BKl_G2Ks.mjs +37 -0
- package/server/server/_ssr/new-BREdMFAM.mjs +12 -0
- package/server/server/_ssr/new-DCz5eHkb.mjs +137 -0
- package/server/server/_ssr/reviews-BL5Nsgst.mjs +7 -0
- package/server/server/_ssr/reviews-BoaEgGKs.mjs +100 -0
- package/server/server/_ssr/reviews-C7_NIhY8.mjs +19 -0
- package/server/server/_ssr/reviews-Dd69YBDa.mjs +12 -0
- package/server/server/_ssr/router-DLxN8FOm.mjs +415 -0
- package/server/server/_ssr/routes-D25G8OuS.mjs +80 -0
- package/server/server/_ssr/routes-lz0AN75A.mjs +929 -0
- package/server/server/_ssr/runtime-D9IbnMlF.mjs +1401 -0
- package/server/server/_ssr/server-runtime-D99qpmma.mjs +12 -0
- package/server/server/_ssr/ssr.mjs +5318 -0
- package/server/server/_ssr/start-BIQfOZtj.mjs +4 -0
- package/server/server/_ssr/test-CQdMYlqa.mjs +6 -0
- package/server/server/_ssr/todo-m_uUvxca.mjs +88 -0
- package/server/server/_ssr/use-keyboard-shortcuts-D5b1Mxpq.mjs +25 -0
- package/server/server/_ssr/utils-BuOt9_LA.mjs +8 -0
- package/server/server/_tanstack-start-manifest_v-CnL10NRH.mjs +71 -0
- package/server/server/index.mjs +2615 -0
- package/server/server/node_modules/detect-libc/lib/detect-libc.js +313 -0
- package/server/server/node_modules/detect-libc/lib/elf.js +39 -0
- package/server/server/node_modules/detect-libc/lib/filesystem.js +51 -0
- package/server/server/node_modules/detect-libc/lib/process.js +24 -0
- package/server/server/node_modules/detect-libc/package.json +44 -0
- package/server/server/node_modules/msgpackr-extract/index.js +1 -0
- package/server/server/node_modules/msgpackr-extract/package.json +50 -0
- package/server/server/node_modules/node-gyp-build-optional-packages/index.js +6 -0
- package/server/server/node_modules/node-gyp-build-optional-packages/node-gyp-build.js +236 -0
- package/server/server/node_modules/node-gyp-build-optional-packages/package.json +32 -0
- package/server/server/node_modules/tslib/modules/index.js +70 -0
- package/server/server/node_modules/tslib/modules/package.json +3 -0
- package/server/server/node_modules/tslib/package.json +47 -0
- package/server/server/node_modules/tslib/tslib.js +484 -0
- package/server/server/package.json +12 -0
|
@@ -0,0 +1,1195 @@
|
|
|
1
|
+
import nodeHTTP from "node:http";
|
|
2
|
+
import { PassThrough, Readable } from "node:stream";
|
|
3
|
+
import { pipeline } from "node:stream/promises";
|
|
4
|
+
import nodeHTTPS from "node:https";
|
|
5
|
+
import nodeHTTP2 from "node:http2";
|
|
6
|
+
//#region ../../node_modules/.pnpm/srvx@0.11.13/node_modules/srvx/dist/_chunks/_utils.mjs
|
|
7
|
+
var noColor = /* @__PURE__ */ (() => {
|
|
8
|
+
const env = globalThis.process?.env ?? {};
|
|
9
|
+
return env.NO_COLOR === "1" || env.TERM === "dumb";
|
|
10
|
+
})();
|
|
11
|
+
var _c = (c, r = 39) => (t) => noColor ? t : `\u001B[${c}m${t}\u001B[${r}m`;
|
|
12
|
+
var bold = /* @__PURE__ */ _c(1, 22);
|
|
13
|
+
var red = /* @__PURE__ */ _c(31);
|
|
14
|
+
var green = /* @__PURE__ */ _c(32);
|
|
15
|
+
var gray = /* @__PURE__ */ _c(90);
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region ../../node_modules/.pnpm/srvx@0.11.13/node_modules/srvx/dist/_chunks/_url.mjs
|
|
18
|
+
function lazyInherit(target, source, sourceKey) {
|
|
19
|
+
for (const key of [...Object.getOwnPropertyNames(source), ...Object.getOwnPropertySymbols(source)]) {
|
|
20
|
+
if (key === "constructor") continue;
|
|
21
|
+
const targetDesc = Object.getOwnPropertyDescriptor(target, key);
|
|
22
|
+
const desc = Object.getOwnPropertyDescriptor(source, key);
|
|
23
|
+
let modified = false;
|
|
24
|
+
if (desc.get) {
|
|
25
|
+
modified = true;
|
|
26
|
+
desc.get = targetDesc?.get || function() {
|
|
27
|
+
return this[sourceKey][key];
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (desc.set) {
|
|
31
|
+
modified = true;
|
|
32
|
+
desc.set = targetDesc?.set || function(value) {
|
|
33
|
+
this[sourceKey][key] = value;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!targetDesc?.value && typeof desc.value === "function") {
|
|
37
|
+
modified = true;
|
|
38
|
+
desc.value = function(...args) {
|
|
39
|
+
return this[sourceKey][key](...args);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (modified) Object.defineProperty(target, key, desc);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
var _needsNormRE = /(?:(?:^|\/)(?:\.|\.\.|%2e|%2e\.|\.%2e|%2e%2e)(?:\/|$))|[\\^\x80-\uffff]/i;
|
|
46
|
+
/**
|
|
47
|
+
* URL wrapper with fast paths to access to the following props:
|
|
48
|
+
*
|
|
49
|
+
* - `url.pathname`
|
|
50
|
+
* - `url.search`
|
|
51
|
+
* - `url.searchParams`
|
|
52
|
+
* - `url.protocol`
|
|
53
|
+
*
|
|
54
|
+
* **NOTES:**
|
|
55
|
+
*
|
|
56
|
+
* - It is assumed that the input URL is **already encoded** and formatted from an HTTP request and contains no hash.
|
|
57
|
+
* - Triggering the setters or getters on other props will deoptimize to full URL parsing.
|
|
58
|
+
* - Changes to `searchParams` will be discarded as we don't track them.
|
|
59
|
+
*/
|
|
60
|
+
var FastURL = /* @__PURE__ */ (() => {
|
|
61
|
+
const NativeURL = globalThis.URL;
|
|
62
|
+
const FastURL = class URL {
|
|
63
|
+
#url;
|
|
64
|
+
#href;
|
|
65
|
+
#protocol;
|
|
66
|
+
#host;
|
|
67
|
+
#pathname;
|
|
68
|
+
#search;
|
|
69
|
+
#searchParams;
|
|
70
|
+
#pos;
|
|
71
|
+
constructor(url) {
|
|
72
|
+
if (typeof url === "string") if (url[0] === "/") this.#href = url;
|
|
73
|
+
else this.#url = new NativeURL(url);
|
|
74
|
+
else if (_needsNormRE.test(url.pathname)) this.#url = new NativeURL(`${url.protocol || "http:"}//${url.host || "localhost"}${url.pathname}${url.search || ""}`);
|
|
75
|
+
else {
|
|
76
|
+
this.#protocol = url.protocol;
|
|
77
|
+
this.#host = url.host;
|
|
78
|
+
this.#pathname = url.pathname;
|
|
79
|
+
this.#search = url.search;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
static [Symbol.hasInstance](val) {
|
|
83
|
+
return val instanceof NativeURL;
|
|
84
|
+
}
|
|
85
|
+
get _url() {
|
|
86
|
+
if (this.#url) return this.#url;
|
|
87
|
+
this.#url = new NativeURL(this.href);
|
|
88
|
+
this.#href = void 0;
|
|
89
|
+
this.#protocol = void 0;
|
|
90
|
+
this.#host = void 0;
|
|
91
|
+
this.#pathname = void 0;
|
|
92
|
+
this.#search = void 0;
|
|
93
|
+
this.#searchParams = void 0;
|
|
94
|
+
this.#pos = void 0;
|
|
95
|
+
return this.#url;
|
|
96
|
+
}
|
|
97
|
+
get href() {
|
|
98
|
+
if (this.#url) return this.#url.href;
|
|
99
|
+
if (!this.#href) this.#href = `${this.#protocol || "http:"}//${this.#host || "localhost"}${this.#pathname || "/"}${this.#search || ""}`;
|
|
100
|
+
return this.#href;
|
|
101
|
+
}
|
|
102
|
+
#getPos() {
|
|
103
|
+
if (!this.#pos) {
|
|
104
|
+
const url = this.href;
|
|
105
|
+
const protoIndex = url.indexOf("://");
|
|
106
|
+
const pathnameIndex = protoIndex === -1 ? -1 : url.indexOf("/", protoIndex + 4);
|
|
107
|
+
this.#pos = [
|
|
108
|
+
protoIndex,
|
|
109
|
+
pathnameIndex,
|
|
110
|
+
pathnameIndex === -1 ? -1 : url.indexOf("?", pathnameIndex)
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
return this.#pos;
|
|
114
|
+
}
|
|
115
|
+
get pathname() {
|
|
116
|
+
if (this.#url) return this.#url.pathname;
|
|
117
|
+
if (this.#pathname === void 0) {
|
|
118
|
+
const [, pathnameIndex, queryIndex] = this.#getPos();
|
|
119
|
+
if (pathnameIndex === -1) return this._url.pathname;
|
|
120
|
+
this.#pathname = this.href.slice(pathnameIndex, queryIndex === -1 ? void 0 : queryIndex);
|
|
121
|
+
}
|
|
122
|
+
return this.#pathname;
|
|
123
|
+
}
|
|
124
|
+
get search() {
|
|
125
|
+
if (this.#url) return this.#url.search;
|
|
126
|
+
if (this.#search === void 0) {
|
|
127
|
+
const [, pathnameIndex, queryIndex] = this.#getPos();
|
|
128
|
+
if (pathnameIndex === -1) return this._url.search;
|
|
129
|
+
const url = this.href;
|
|
130
|
+
this.#search = queryIndex === -1 || queryIndex === url.length - 1 ? "" : url.slice(queryIndex);
|
|
131
|
+
}
|
|
132
|
+
return this.#search;
|
|
133
|
+
}
|
|
134
|
+
get searchParams() {
|
|
135
|
+
if (this.#url) return this.#url.searchParams;
|
|
136
|
+
if (!this.#searchParams) this.#searchParams = new URLSearchParams(this.search);
|
|
137
|
+
return this.#searchParams;
|
|
138
|
+
}
|
|
139
|
+
get protocol() {
|
|
140
|
+
if (this.#url) return this.#url.protocol;
|
|
141
|
+
if (this.#protocol === void 0) {
|
|
142
|
+
const [protocolIndex] = this.#getPos();
|
|
143
|
+
if (protocolIndex === -1) return this._url.protocol;
|
|
144
|
+
this.#protocol = this.href.slice(0, protocolIndex + 1);
|
|
145
|
+
}
|
|
146
|
+
return this.#protocol;
|
|
147
|
+
}
|
|
148
|
+
toString() {
|
|
149
|
+
return this.href;
|
|
150
|
+
}
|
|
151
|
+
toJSON() {
|
|
152
|
+
return this.href;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
lazyInherit(FastURL.prototype, NativeURL.prototype, "_url");
|
|
156
|
+
Object.setPrototypeOf(FastURL.prototype, NativeURL.prototype);
|
|
157
|
+
Object.setPrototypeOf(FastURL, NativeURL);
|
|
158
|
+
return FastURL;
|
|
159
|
+
})();
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region ../../node_modules/.pnpm/srvx@0.11.13/node_modules/srvx/dist/_chunks/_utils2.mjs
|
|
162
|
+
function resolvePortAndHost(opts) {
|
|
163
|
+
const _port = opts.port ?? globalThis.process?.env.PORT ?? 3e3;
|
|
164
|
+
const port = typeof _port === "number" ? _port : Number.parseInt(_port, 10);
|
|
165
|
+
if (port < 0 || port > 65535) throw new RangeError(`Port must be between 0 and 65535 (got "${port}").`);
|
|
166
|
+
return {
|
|
167
|
+
port,
|
|
168
|
+
hostname: opts.hostname ?? globalThis.process?.env.HOST
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function fmtURL(host, port, secure) {
|
|
172
|
+
if (!host || !port) return;
|
|
173
|
+
if (host.includes(":")) host = `[${host}]`;
|
|
174
|
+
return `http${secure ? "s" : ""}://${host}:${port}/`;
|
|
175
|
+
}
|
|
176
|
+
function printListening(opts, url) {
|
|
177
|
+
if (!url || (opts.silent ?? globalThis.process?.env?.TEST)) return;
|
|
178
|
+
let additionalInfo = "";
|
|
179
|
+
try {
|
|
180
|
+
const _url = new URL(url);
|
|
181
|
+
if (_url.hostname === "[::]" || _url.hostname === "0.0.0.0") {
|
|
182
|
+
_url.hostname = "localhost";
|
|
183
|
+
url = _url.href;
|
|
184
|
+
additionalInfo = " (all interfaces)";
|
|
185
|
+
}
|
|
186
|
+
} catch {}
|
|
187
|
+
let listeningOn = `➜ Listening on:`;
|
|
188
|
+
if (globalThis.process.stdout?.isTTY) {
|
|
189
|
+
listeningOn = `\u001B[32m${listeningOn}\u001B[0m`;
|
|
190
|
+
url = `\u001B[36m${url}\u001B[0m`;
|
|
191
|
+
additionalInfo = `\u001B[2m${additionalInfo}\u001B[0m`;
|
|
192
|
+
}
|
|
193
|
+
console.log(`${listeningOn} ${url}${additionalInfo}`);
|
|
194
|
+
}
|
|
195
|
+
function resolveTLSOptions(opts) {
|
|
196
|
+
if (!opts.tls || opts.protocol === "http") return;
|
|
197
|
+
const cert = resolveCertOrKey(opts.tls.cert);
|
|
198
|
+
const key = resolveCertOrKey(opts.tls.key);
|
|
199
|
+
if (!cert && !key) {
|
|
200
|
+
if (opts.protocol === "https") throw new TypeError("TLS `cert` and `key` must be provided for `https` protocol.");
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (!cert || !key) throw new TypeError("TLS `cert` and `key` must be provided together.");
|
|
204
|
+
return {
|
|
205
|
+
cert,
|
|
206
|
+
key,
|
|
207
|
+
passphrase: opts.tls.passphrase
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function resolveCertOrKey(value) {
|
|
211
|
+
if (!value) return;
|
|
212
|
+
if (typeof value !== "string") throw new TypeError("TLS certificate and key must be strings in PEM format or file paths.");
|
|
213
|
+
if (value.startsWith("-----BEGIN ")) return value;
|
|
214
|
+
const { readFileSync } = process.getBuiltinModule("node:fs");
|
|
215
|
+
return readFileSync(value, "utf8");
|
|
216
|
+
}
|
|
217
|
+
function createWaitUntil() {
|
|
218
|
+
const promises = /* @__PURE__ */ new Set();
|
|
219
|
+
return {
|
|
220
|
+
waitUntil: (promise) => {
|
|
221
|
+
if (typeof promise?.then !== "function") return;
|
|
222
|
+
promises.add(Promise.resolve(promise).catch(console.error).finally(() => {
|
|
223
|
+
promises.delete(promise);
|
|
224
|
+
}));
|
|
225
|
+
},
|
|
226
|
+
wait: () => {
|
|
227
|
+
return Promise.all(promises);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
//#endregion
|
|
232
|
+
//#region ../../node_modules/.pnpm/srvx@0.11.13/node_modules/srvx/dist/_chunks/_plugins.mjs
|
|
233
|
+
function wrapFetch(server) {
|
|
234
|
+
const fetchHandler = server.options.fetch;
|
|
235
|
+
const middleware = server.options.middleware || [];
|
|
236
|
+
return middleware.length === 0 ? fetchHandler : (request) => callMiddleware$1(request, fetchHandler, middleware, 0);
|
|
237
|
+
}
|
|
238
|
+
function callMiddleware$1(request, fetchHandler, middleware, index) {
|
|
239
|
+
if (index === middleware.length) return fetchHandler(request);
|
|
240
|
+
return middleware[index](request, () => callMiddleware$1(request, fetchHandler, middleware, index + 1));
|
|
241
|
+
}
|
|
242
|
+
var errorPlugin = (server) => {
|
|
243
|
+
const errorHandler = server.options.error;
|
|
244
|
+
if (!errorHandler) return;
|
|
245
|
+
server.options.middleware.unshift((_req, next) => {
|
|
246
|
+
try {
|
|
247
|
+
const res = next();
|
|
248
|
+
return res instanceof Promise ? res.catch((error) => errorHandler(error)) : res;
|
|
249
|
+
} catch (error) {
|
|
250
|
+
return errorHandler(error);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
};
|
|
254
|
+
var gracefulShutdownPlugin = (server) => {
|
|
255
|
+
const config = server.options?.gracefulShutdown;
|
|
256
|
+
if (!globalThis.process?.on || config === false || config === void 0 && (process.env.CI || process.env.TEST)) return;
|
|
257
|
+
const gracefulTimeout = config === true || !config?.gracefulTimeout ? Number.parseInt(process.env.SERVER_SHUTDOWN_TIMEOUT || "") || 5 : config.gracefulTimeout;
|
|
258
|
+
let isClosing = false;
|
|
259
|
+
let isClosed = false;
|
|
260
|
+
const w = server.options.silent ? () => {} : process.stderr.write.bind(process.stderr);
|
|
261
|
+
const forceClose = async () => {
|
|
262
|
+
if (isClosed) return;
|
|
263
|
+
w(red("\x1B[2K\rForcibly closing connections...\n"));
|
|
264
|
+
isClosed = true;
|
|
265
|
+
await server.close(true);
|
|
266
|
+
};
|
|
267
|
+
const shutdown = async () => {
|
|
268
|
+
if (isClosing || isClosed) return;
|
|
269
|
+
setTimeout(() => {
|
|
270
|
+
globalThis.process.once("SIGINT", forceClose);
|
|
271
|
+
}, 100);
|
|
272
|
+
isClosing = true;
|
|
273
|
+
const closePromise = server.close();
|
|
274
|
+
for (let remaining = gracefulTimeout; remaining > 0; remaining--) {
|
|
275
|
+
w(gray(`\rStopping server gracefully (${remaining}s)... Press ${bold("Ctrl+C")} again to force close.`));
|
|
276
|
+
if (await Promise.race([closePromise.then(() => true), new Promise((r) => setTimeout(() => r(false), 1e3))])) {
|
|
277
|
+
w("\x1B[2K\r" + green("Server closed successfully.\n"));
|
|
278
|
+
isClosed = true;
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
w("\x1B[2K\rGraceful shutdown timed out.\n");
|
|
283
|
+
await forceClose();
|
|
284
|
+
};
|
|
285
|
+
for (const sig of ["SIGINT", "SIGTERM"]) globalThis.process.on(sig, shutdown);
|
|
286
|
+
};
|
|
287
|
+
//#endregion
|
|
288
|
+
//#region ../../node_modules/.pnpm/srvx@0.11.13/node_modules/srvx/dist/adapters/node.mjs
|
|
289
|
+
async function sendNodeResponse(nodeRes, webRes) {
|
|
290
|
+
if (!webRes) {
|
|
291
|
+
nodeRes.statusCode = 500;
|
|
292
|
+
return endNodeResponse(nodeRes);
|
|
293
|
+
}
|
|
294
|
+
if (webRes._toNodeResponse) {
|
|
295
|
+
const res = webRes._toNodeResponse();
|
|
296
|
+
if (res.body) {
|
|
297
|
+
if (res.body instanceof ReadableStream) {
|
|
298
|
+
writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
299
|
+
return streamBody(res.body, nodeRes);
|
|
300
|
+
} else if (typeof res.body?.pipe === "function") return pipeBody(res.body, nodeRes, res.status, res.statusText, res.headers);
|
|
301
|
+
writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
302
|
+
nodeRes.write(res.body);
|
|
303
|
+
} else writeHead(nodeRes, res.status, res.statusText, res.headers);
|
|
304
|
+
return endNodeResponse(nodeRes);
|
|
305
|
+
}
|
|
306
|
+
const rawHeaders = [...webRes.headers];
|
|
307
|
+
writeHead(nodeRes, webRes.status, webRes.statusText, rawHeaders);
|
|
308
|
+
return webRes.body ? streamBody(webRes.body, nodeRes) : endNodeResponse(nodeRes);
|
|
309
|
+
}
|
|
310
|
+
function writeHead(nodeRes, status, statusText, rawHeaders) {
|
|
311
|
+
const writeHeaders = globalThis.Deno ? rawHeaders : rawHeaders.flat();
|
|
312
|
+
if (!nodeRes.headersSent) if (nodeRes.req?.httpVersion === "2.0") nodeRes.writeHead(status, writeHeaders);
|
|
313
|
+
else nodeRes.writeHead(status, statusText, writeHeaders);
|
|
314
|
+
}
|
|
315
|
+
function endNodeResponse(nodeRes) {
|
|
316
|
+
return new Promise((resolve) => nodeRes.end(resolve));
|
|
317
|
+
}
|
|
318
|
+
function pipeBody(stream, nodeRes, status, statusText, headers) {
|
|
319
|
+
if (nodeRes.destroyed) {
|
|
320
|
+
stream.destroy?.();
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
if (typeof stream.on !== "function" || typeof stream.destroy !== "function") {
|
|
324
|
+
writeHead(nodeRes, status, statusText, headers);
|
|
325
|
+
stream.pipe(nodeRes);
|
|
326
|
+
return new Promise((resolve) => nodeRes.on("close", resolve));
|
|
327
|
+
}
|
|
328
|
+
if (stream.destroyed) {
|
|
329
|
+
writeHead(nodeRes, 500, "Internal Server Error", []);
|
|
330
|
+
return endNodeResponse(nodeRes);
|
|
331
|
+
}
|
|
332
|
+
return new Promise((resolve) => {
|
|
333
|
+
function onEarlyError() {
|
|
334
|
+
stream.off("readable", onReadable);
|
|
335
|
+
stream.destroy();
|
|
336
|
+
writeHead(nodeRes, 500, "Internal Server Error", []);
|
|
337
|
+
endNodeResponse(nodeRes).then(resolve);
|
|
338
|
+
}
|
|
339
|
+
function onReadable() {
|
|
340
|
+
stream.off("error", onEarlyError);
|
|
341
|
+
if (nodeRes.destroyed) {
|
|
342
|
+
stream.destroy();
|
|
343
|
+
return resolve();
|
|
344
|
+
}
|
|
345
|
+
writeHead(nodeRes, status, statusText, headers);
|
|
346
|
+
pipeline(stream, nodeRes).catch(() => {}).then(() => resolve());
|
|
347
|
+
}
|
|
348
|
+
stream.once("error", onEarlyError);
|
|
349
|
+
stream.once("readable", onReadable);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
function streamBody(stream, nodeRes) {
|
|
353
|
+
if (nodeRes.destroyed) {
|
|
354
|
+
stream.cancel();
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const reader = stream.getReader();
|
|
358
|
+
function streamCancel(error) {
|
|
359
|
+
reader.cancel(error).catch(() => {});
|
|
360
|
+
if (error) nodeRes.destroy(error);
|
|
361
|
+
}
|
|
362
|
+
function streamHandle({ done, value }) {
|
|
363
|
+
try {
|
|
364
|
+
if (done) nodeRes.end();
|
|
365
|
+
else if (nodeRes.write(value)) reader.read().then(streamHandle, streamCancel);
|
|
366
|
+
else nodeRes.once("drain", () => reader.read().then(streamHandle, streamCancel));
|
|
367
|
+
} catch (error) {
|
|
368
|
+
streamCancel(error instanceof Error ? error : void 0);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
nodeRes.on("close", streamCancel);
|
|
372
|
+
nodeRes.on("error", streamCancel);
|
|
373
|
+
reader.read().then(streamHandle, streamCancel);
|
|
374
|
+
return reader.closed.catch(streamCancel).finally(() => {
|
|
375
|
+
nodeRes.off("close", streamCancel);
|
|
376
|
+
nodeRes.off("error", streamCancel);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Validates an HTTP Host header value (domain, IPv4, or bracketed IPv6) with optional port.
|
|
381
|
+
* Intended for preliminary filtering invalid values like "localhost:3000/foobar?"
|
|
382
|
+
*/
|
|
383
|
+
var HOST_RE = /^(\[(?:[A-Fa-f0-9:.]+)\]|(?:[A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+|(?:\d{1,3}\.){3}\d{1,3})(:\d{1,5})?$/;
|
|
384
|
+
var NodeRequestURL = class extends FastURL {
|
|
385
|
+
#req;
|
|
386
|
+
constructor({ req }) {
|
|
387
|
+
const path = req.url || "/";
|
|
388
|
+
if (path[0] === "/") {
|
|
389
|
+
const qIndex = path.indexOf("?");
|
|
390
|
+
const pathname = qIndex === -1 ? path : path?.slice(0, qIndex) || "/";
|
|
391
|
+
const search = qIndex === -1 ? "" : path?.slice(qIndex) || "";
|
|
392
|
+
let host = req.headers.host || req.headers[":authority"];
|
|
393
|
+
if (host && !HOST_RE.test(host)) host = "_invalid_";
|
|
394
|
+
else if (!host) if (req.socket) host = `${req.socket.localFamily === "IPv6" ? "[" + req.socket.localAddress + "]" : req.socket.localAddress}:${req.socket?.localPort || "80"}`;
|
|
395
|
+
else host = "localhost";
|
|
396
|
+
const protocol = req.socket?.encrypted || req.headers["x-forwarded-proto"] === "https" || req.headers[":scheme"] === "https" ? "https:" : "http:";
|
|
397
|
+
super({
|
|
398
|
+
protocol,
|
|
399
|
+
host,
|
|
400
|
+
pathname,
|
|
401
|
+
search
|
|
402
|
+
});
|
|
403
|
+
} else super(path);
|
|
404
|
+
this.#req = req;
|
|
405
|
+
}
|
|
406
|
+
get pathname() {
|
|
407
|
+
return super.pathname;
|
|
408
|
+
}
|
|
409
|
+
set pathname(value) {
|
|
410
|
+
this._url.pathname = value;
|
|
411
|
+
this.#req.url = this._url.pathname + this._url.search;
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
var NodeRequestHeaders = /* @__PURE__ */ (() => {
|
|
415
|
+
const NativeHeaders = globalThis.Headers;
|
|
416
|
+
class Headers {
|
|
417
|
+
#req;
|
|
418
|
+
#headers;
|
|
419
|
+
constructor(req) {
|
|
420
|
+
this.#req = req;
|
|
421
|
+
}
|
|
422
|
+
static [Symbol.hasInstance](val) {
|
|
423
|
+
return val instanceof NativeHeaders;
|
|
424
|
+
}
|
|
425
|
+
get _headers() {
|
|
426
|
+
if (!this.#headers) {
|
|
427
|
+
const headers = new NativeHeaders();
|
|
428
|
+
const rawHeaders = this.#req.rawHeaders;
|
|
429
|
+
const len = rawHeaders.length;
|
|
430
|
+
for (let i = 0; i < len; i += 2) {
|
|
431
|
+
const key = rawHeaders[i];
|
|
432
|
+
if (key.charCodeAt(0) === 58) continue;
|
|
433
|
+
const value = rawHeaders[i + 1];
|
|
434
|
+
headers.append(key, value);
|
|
435
|
+
}
|
|
436
|
+
this.#headers = headers;
|
|
437
|
+
}
|
|
438
|
+
return this.#headers;
|
|
439
|
+
}
|
|
440
|
+
get(name) {
|
|
441
|
+
if (this.#headers) return this.#headers.get(name);
|
|
442
|
+
const value = this.#req.headers[name.toLowerCase()];
|
|
443
|
+
return Array.isArray(value) ? value.join(", ") : value || null;
|
|
444
|
+
}
|
|
445
|
+
has(name) {
|
|
446
|
+
if (this.#headers) return this.#headers.has(name);
|
|
447
|
+
return name.toLowerCase() in this.#req.headers;
|
|
448
|
+
}
|
|
449
|
+
getSetCookie() {
|
|
450
|
+
if (this.#headers) return this.#headers.getSetCookie();
|
|
451
|
+
const value = this.#req.headers["set-cookie"];
|
|
452
|
+
return Array.isArray(value) ? value : value ? [value] : [];
|
|
453
|
+
}
|
|
454
|
+
entries() {
|
|
455
|
+
return this._headers.entries();
|
|
456
|
+
}
|
|
457
|
+
[Symbol.iterator]() {
|
|
458
|
+
return this.entries();
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
lazyInherit(Headers.prototype, NativeHeaders.prototype, "_headers");
|
|
462
|
+
Object.setPrototypeOf(Headers, NativeHeaders);
|
|
463
|
+
Object.setPrototypeOf(Headers.prototype, NativeHeaders.prototype);
|
|
464
|
+
return Headers;
|
|
465
|
+
})();
|
|
466
|
+
var NodeRequest = /* @__PURE__ */ (() => {
|
|
467
|
+
const NativeRequest = globalThis.Request;
|
|
468
|
+
class Request {
|
|
469
|
+
runtime;
|
|
470
|
+
#req;
|
|
471
|
+
#url;
|
|
472
|
+
#bodyStream;
|
|
473
|
+
#request;
|
|
474
|
+
#headers;
|
|
475
|
+
#abortController;
|
|
476
|
+
constructor(ctx) {
|
|
477
|
+
this.#req = ctx.req;
|
|
478
|
+
this.runtime = {
|
|
479
|
+
name: "node",
|
|
480
|
+
node: ctx
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
static [Symbol.hasInstance](val) {
|
|
484
|
+
return val instanceof NativeRequest;
|
|
485
|
+
}
|
|
486
|
+
get ip() {
|
|
487
|
+
return this.#req.socket?.remoteAddress;
|
|
488
|
+
}
|
|
489
|
+
get method() {
|
|
490
|
+
if (this.#request) return this.#request.method;
|
|
491
|
+
return this.#req.method || "GET";
|
|
492
|
+
}
|
|
493
|
+
get _url() {
|
|
494
|
+
return this.#url ||= new NodeRequestURL({ req: this.#req });
|
|
495
|
+
}
|
|
496
|
+
set _url(url) {
|
|
497
|
+
this.#url = url;
|
|
498
|
+
}
|
|
499
|
+
get url() {
|
|
500
|
+
if (this.#request) return this.#request.url;
|
|
501
|
+
return this._url.href;
|
|
502
|
+
}
|
|
503
|
+
get headers() {
|
|
504
|
+
if (this.#request) return this.#request.headers;
|
|
505
|
+
return this.#headers ||= new NodeRequestHeaders(this.#req);
|
|
506
|
+
}
|
|
507
|
+
get _abortController() {
|
|
508
|
+
if (!this.#abortController) {
|
|
509
|
+
this.#abortController = new AbortController();
|
|
510
|
+
const { req, res } = this.runtime.node;
|
|
511
|
+
const abortController = this.#abortController;
|
|
512
|
+
const abort = (err) => abortController.abort?.(err);
|
|
513
|
+
if (res) res.once("close", () => {
|
|
514
|
+
const reqError = req.errored;
|
|
515
|
+
if (reqError) abort(reqError);
|
|
516
|
+
else if (!res.writableEnded) abort();
|
|
517
|
+
});
|
|
518
|
+
else req.once("close", () => {
|
|
519
|
+
if (!req.complete) abort();
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
return this.#abortController;
|
|
523
|
+
}
|
|
524
|
+
get signal() {
|
|
525
|
+
return this.#request ? this.#request.signal : this._abortController.signal;
|
|
526
|
+
}
|
|
527
|
+
get body() {
|
|
528
|
+
if (this.#request) return this.#request.body;
|
|
529
|
+
if (this.#bodyStream === void 0) {
|
|
530
|
+
const method = this.method;
|
|
531
|
+
this.#bodyStream = !(method === "GET" || method === "HEAD") ? Readable.toWeb(this.#req) : null;
|
|
532
|
+
}
|
|
533
|
+
return this.#bodyStream;
|
|
534
|
+
}
|
|
535
|
+
text() {
|
|
536
|
+
if (this.#request) return this.#request.text();
|
|
537
|
+
if (this.#bodyStream !== void 0) return this.#bodyStream ? new Response(this.#bodyStream).text() : Promise.resolve("");
|
|
538
|
+
return readBody(this.#req).then((buf) => buf.toString());
|
|
539
|
+
}
|
|
540
|
+
json() {
|
|
541
|
+
if (this.#request) return this.#request.json();
|
|
542
|
+
return this.text().then((text) => JSON.parse(text));
|
|
543
|
+
}
|
|
544
|
+
get _request() {
|
|
545
|
+
if (!this.#request) {
|
|
546
|
+
const body = this.body;
|
|
547
|
+
this.#request = new NativeRequest(this.url, {
|
|
548
|
+
method: this.method,
|
|
549
|
+
headers: this.headers,
|
|
550
|
+
signal: this._abortController.signal,
|
|
551
|
+
body,
|
|
552
|
+
duplex: body ? "half" : void 0
|
|
553
|
+
});
|
|
554
|
+
this.#headers = void 0;
|
|
555
|
+
this.#bodyStream = void 0;
|
|
556
|
+
}
|
|
557
|
+
return this.#request;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
lazyInherit(Request.prototype, NativeRequest.prototype, "_request");
|
|
561
|
+
Object.setPrototypeOf(Request.prototype, NativeRequest.prototype);
|
|
562
|
+
return Request;
|
|
563
|
+
})();
|
|
564
|
+
function readBody(req) {
|
|
565
|
+
if ("rawBody" in req && Buffer.isBuffer(req.rawBody)) return Promise.resolve(req.rawBody);
|
|
566
|
+
return new Promise((resolve, reject) => {
|
|
567
|
+
const chunks = [];
|
|
568
|
+
const onData = (chunk) => {
|
|
569
|
+
chunks.push(chunk);
|
|
570
|
+
};
|
|
571
|
+
const onError = (err) => {
|
|
572
|
+
reject(err);
|
|
573
|
+
};
|
|
574
|
+
const onEnd = () => {
|
|
575
|
+
req.off("error", onError);
|
|
576
|
+
req.off("data", onData);
|
|
577
|
+
resolve(Buffer.concat(chunks));
|
|
578
|
+
};
|
|
579
|
+
req.on("data", onData).once("end", onEnd).once("error", onError);
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Fast Response for Node.js runtime
|
|
584
|
+
*
|
|
585
|
+
* It is faster because in most cases it doesn't create a full Response instance.
|
|
586
|
+
*/
|
|
587
|
+
var NodeResponse = /* @__PURE__ */ (() => {
|
|
588
|
+
const NativeResponse = globalThis.Response;
|
|
589
|
+
const STATUS_CODES = globalThis.process?.getBuiltinModule?.("node:http")?.STATUS_CODES || {};
|
|
590
|
+
class NodeResponse {
|
|
591
|
+
#body;
|
|
592
|
+
#init;
|
|
593
|
+
#headers;
|
|
594
|
+
#response;
|
|
595
|
+
constructor(body, init) {
|
|
596
|
+
this.#body = body;
|
|
597
|
+
this.#init = init;
|
|
598
|
+
}
|
|
599
|
+
static [Symbol.hasInstance](val) {
|
|
600
|
+
return val instanceof NativeResponse;
|
|
601
|
+
}
|
|
602
|
+
get status() {
|
|
603
|
+
return this.#response?.status || this.#init?.status || 200;
|
|
604
|
+
}
|
|
605
|
+
get statusText() {
|
|
606
|
+
return this.#response?.statusText || this.#init?.statusText || STATUS_CODES[this.status] || "";
|
|
607
|
+
}
|
|
608
|
+
get headers() {
|
|
609
|
+
if (this.#response) return this.#response.headers;
|
|
610
|
+
if (this.#headers) return this.#headers;
|
|
611
|
+
const initHeaders = this.#init?.headers;
|
|
612
|
+
return this.#headers = initHeaders instanceof Headers ? initHeaders : new Headers(initHeaders);
|
|
613
|
+
}
|
|
614
|
+
get ok() {
|
|
615
|
+
if (this.#response) return this.#response.ok;
|
|
616
|
+
const status = this.status;
|
|
617
|
+
return status >= 200 && status < 300;
|
|
618
|
+
}
|
|
619
|
+
get _response() {
|
|
620
|
+
if (this.#response) return this.#response;
|
|
621
|
+
let body = this.#body;
|
|
622
|
+
if (body && typeof body.pipe === "function" && !(body instanceof Readable)) {
|
|
623
|
+
const stream = new PassThrough();
|
|
624
|
+
body.pipe(stream);
|
|
625
|
+
const abort = body.abort;
|
|
626
|
+
if (abort) stream.once("close", () => abort());
|
|
627
|
+
body = stream;
|
|
628
|
+
}
|
|
629
|
+
this.#response = new NativeResponse(body, this.#headers ? {
|
|
630
|
+
...this.#init,
|
|
631
|
+
headers: this.#headers
|
|
632
|
+
} : this.#init);
|
|
633
|
+
this.#init = void 0;
|
|
634
|
+
this.#headers = void 0;
|
|
635
|
+
this.#body = void 0;
|
|
636
|
+
return this.#response;
|
|
637
|
+
}
|
|
638
|
+
_toNodeResponse() {
|
|
639
|
+
const status = this.status;
|
|
640
|
+
const statusText = this.statusText;
|
|
641
|
+
let body;
|
|
642
|
+
let contentType;
|
|
643
|
+
let contentLength;
|
|
644
|
+
if (this.#response) body = this.#response.body;
|
|
645
|
+
else if (this.#body) if (this.#body instanceof ReadableStream) body = this.#body;
|
|
646
|
+
else if (typeof this.#body === "string") {
|
|
647
|
+
body = this.#body;
|
|
648
|
+
contentType = "text/plain; charset=UTF-8";
|
|
649
|
+
contentLength = Buffer.byteLength(this.#body);
|
|
650
|
+
} else if (this.#body instanceof ArrayBuffer) {
|
|
651
|
+
body = Buffer.from(this.#body);
|
|
652
|
+
contentLength = this.#body.byteLength;
|
|
653
|
+
} else if (this.#body instanceof Uint8Array) {
|
|
654
|
+
body = this.#body;
|
|
655
|
+
contentLength = this.#body.byteLength;
|
|
656
|
+
} else if (this.#body instanceof DataView) {
|
|
657
|
+
body = Buffer.from(this.#body.buffer);
|
|
658
|
+
contentLength = this.#body.byteLength;
|
|
659
|
+
} else if (this.#body instanceof Blob) {
|
|
660
|
+
body = this.#body.stream();
|
|
661
|
+
contentType = this.#body.type;
|
|
662
|
+
contentLength = this.#body.size;
|
|
663
|
+
} else if (typeof this.#body.pipe === "function") body = this.#body;
|
|
664
|
+
else body = this._response.body;
|
|
665
|
+
const headers = [];
|
|
666
|
+
const initHeaders = this.#init?.headers;
|
|
667
|
+
const headerEntries = this.#response?.headers || this.#headers || (initHeaders ? Array.isArray(initHeaders) ? initHeaders : initHeaders?.entries ? initHeaders.entries() : Object.entries(initHeaders).map(([k, v]) => [k.toLowerCase(), v]) : void 0);
|
|
668
|
+
let hasContentTypeHeader;
|
|
669
|
+
let hasContentLength;
|
|
670
|
+
if (headerEntries) for (const [key, value] of headerEntries) {
|
|
671
|
+
if (Array.isArray(value)) for (const v of value) headers.push([key, v]);
|
|
672
|
+
else headers.push([key, value]);
|
|
673
|
+
if (key === "content-type") hasContentTypeHeader = true;
|
|
674
|
+
else if (key === "content-length") hasContentLength = true;
|
|
675
|
+
}
|
|
676
|
+
if (contentType && !hasContentTypeHeader) headers.push(["content-type", contentType]);
|
|
677
|
+
if (contentLength && !hasContentLength) headers.push(["content-length", String(contentLength)]);
|
|
678
|
+
this.#init = void 0;
|
|
679
|
+
this.#headers = void 0;
|
|
680
|
+
this.#response = void 0;
|
|
681
|
+
this.#body = void 0;
|
|
682
|
+
return {
|
|
683
|
+
status,
|
|
684
|
+
statusText,
|
|
685
|
+
headers,
|
|
686
|
+
body
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
lazyInherit(NodeResponse.prototype, NativeResponse.prototype, "_response");
|
|
691
|
+
Object.setPrototypeOf(NodeResponse, NativeResponse);
|
|
692
|
+
Object.setPrototypeOf(NodeResponse.prototype, NativeResponse.prototype);
|
|
693
|
+
return NodeResponse;
|
|
694
|
+
})();
|
|
695
|
+
function serve(options) {
|
|
696
|
+
return new NodeServer(options);
|
|
697
|
+
}
|
|
698
|
+
var NodeServer = class {
|
|
699
|
+
runtime = "node";
|
|
700
|
+
options;
|
|
701
|
+
node;
|
|
702
|
+
serveOptions;
|
|
703
|
+
fetch;
|
|
704
|
+
waitUntil;
|
|
705
|
+
#isSecure;
|
|
706
|
+
#listeningPromise;
|
|
707
|
+
#wait;
|
|
708
|
+
constructor(options) {
|
|
709
|
+
this.options = {
|
|
710
|
+
...options,
|
|
711
|
+
middleware: [...options.middleware || []]
|
|
712
|
+
};
|
|
713
|
+
for (const plugin of options.plugins || []) plugin(this);
|
|
714
|
+
errorPlugin(this);
|
|
715
|
+
const fetchHandler = this.fetch = wrapFetch(this);
|
|
716
|
+
const handler = (nodeReq, nodeRes) => {
|
|
717
|
+
const request = new NodeRequest({
|
|
718
|
+
req: nodeReq,
|
|
719
|
+
res: nodeRes
|
|
720
|
+
});
|
|
721
|
+
request.waitUntil = this.#wait?.waitUntil;
|
|
722
|
+
const res = fetchHandler(request);
|
|
723
|
+
return res instanceof Promise ? res.then((resolvedRes) => sendNodeResponse(nodeRes, resolvedRes)) : sendNodeResponse(nodeRes, res);
|
|
724
|
+
};
|
|
725
|
+
this.node = {
|
|
726
|
+
handler,
|
|
727
|
+
server: void 0
|
|
728
|
+
};
|
|
729
|
+
const loader = globalThis.__srvxLoader__;
|
|
730
|
+
if (loader) {
|
|
731
|
+
loader({ server: this });
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
gracefulShutdownPlugin(this);
|
|
735
|
+
this.#wait = createWaitUntil();
|
|
736
|
+
this.waitUntil = this.#wait.waitUntil;
|
|
737
|
+
const tls = resolveTLSOptions(this.options);
|
|
738
|
+
const { port, hostname: host } = resolvePortAndHost(this.options);
|
|
739
|
+
this.serveOptions = {
|
|
740
|
+
port,
|
|
741
|
+
host,
|
|
742
|
+
exclusive: !this.options.reusePort,
|
|
743
|
+
...tls ? {
|
|
744
|
+
cert: tls.cert,
|
|
745
|
+
key: tls.key,
|
|
746
|
+
passphrase: tls.passphrase
|
|
747
|
+
} : {},
|
|
748
|
+
...this.options.node
|
|
749
|
+
};
|
|
750
|
+
let server;
|
|
751
|
+
this.#isSecure = !!this.serveOptions.cert && this.options.protocol !== "http";
|
|
752
|
+
if (this.options.node?.http2 ?? this.#isSecure) if (this.#isSecure) server = nodeHTTP2.createSecureServer({
|
|
753
|
+
allowHTTP1: true,
|
|
754
|
+
...this.serveOptions
|
|
755
|
+
}, handler);
|
|
756
|
+
else throw new Error("node.http2 option requires tls certificate!");
|
|
757
|
+
else if (this.#isSecure) server = nodeHTTPS.createServer(this.serveOptions, handler);
|
|
758
|
+
else server = nodeHTTP.createServer(this.serveOptions, handler);
|
|
759
|
+
this.node.server = server;
|
|
760
|
+
if (!options.manual) this.serve();
|
|
761
|
+
}
|
|
762
|
+
serve() {
|
|
763
|
+
if (this.#listeningPromise) return Promise.resolve(this.#listeningPromise).then(() => this);
|
|
764
|
+
this.#listeningPromise = new Promise((resolve) => {
|
|
765
|
+
this.node.server.listen(this.serveOptions, () => {
|
|
766
|
+
printListening(this.options, this.url);
|
|
767
|
+
resolve();
|
|
768
|
+
});
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
get url() {
|
|
772
|
+
const addr = this.node?.server?.address();
|
|
773
|
+
if (!addr) return;
|
|
774
|
+
return typeof addr === "string" ? addr : fmtURL(addr.address, addr.port, this.#isSecure);
|
|
775
|
+
}
|
|
776
|
+
ready() {
|
|
777
|
+
return Promise.resolve(this.#listeningPromise).then(() => this);
|
|
778
|
+
}
|
|
779
|
+
async close(closeAll) {
|
|
780
|
+
await Promise.all([this.#wait?.wait(), new Promise((resolve, reject) => {
|
|
781
|
+
const server = this.node?.server;
|
|
782
|
+
if (server && closeAll && "closeAllConnections" in server) server.closeAllConnections();
|
|
783
|
+
if (!server || !server.listening) return resolve();
|
|
784
|
+
server.close((error) => error ? reject(error) : resolve());
|
|
785
|
+
})]);
|
|
786
|
+
}
|
|
787
|
+
};
|
|
788
|
+
//#endregion
|
|
789
|
+
//#region ../../node_modules/.pnpm/rou3@0.8.1/node_modules/rou3/dist/index.mjs
|
|
790
|
+
var NullProtoObj = /* @__PURE__ */ (() => {
|
|
791
|
+
const e = function() {};
|
|
792
|
+
return e.prototype = Object.create(null), Object.freeze(e.prototype), e;
|
|
793
|
+
})();
|
|
794
|
+
//#endregion
|
|
795
|
+
//#region ../../node_modules/.pnpm/h3@2.0.1-rc.19_crossws@0.4.4_srvx@0.11.13_/node_modules/h3/dist/h3-CxkHuE5d.mjs
|
|
796
|
+
function decodePathname(pathname) {
|
|
797
|
+
return decodeURI(pathname.includes("%25") ? pathname.replace(/%25/g, "%2525") : pathname);
|
|
798
|
+
}
|
|
799
|
+
var kEventNS = "h3.internal.event.";
|
|
800
|
+
var kEventRes = /* @__PURE__ */ Symbol.for(`${kEventNS}res`);
|
|
801
|
+
var kEventResHeaders = /* @__PURE__ */ Symbol.for(`${kEventNS}res.headers`);
|
|
802
|
+
var kEventResErrHeaders = /* @__PURE__ */ Symbol.for(`${kEventNS}res.err.headers`);
|
|
803
|
+
var H3Event = class {
|
|
804
|
+
app;
|
|
805
|
+
req;
|
|
806
|
+
url;
|
|
807
|
+
context;
|
|
808
|
+
static __is_event__ = true;
|
|
809
|
+
constructor(req, context, app) {
|
|
810
|
+
this.context = context || req.context || new NullProtoObj();
|
|
811
|
+
this.req = req;
|
|
812
|
+
this.app = app;
|
|
813
|
+
const _url = req._url;
|
|
814
|
+
const url = _url && _url instanceof URL ? _url : new FastURL(req.url);
|
|
815
|
+
if (url.pathname.includes("%")) url.pathname = decodePathname(url.pathname);
|
|
816
|
+
this.url = url;
|
|
817
|
+
}
|
|
818
|
+
get res() {
|
|
819
|
+
return this[kEventRes] ||= new H3EventResponse();
|
|
820
|
+
}
|
|
821
|
+
get runtime() {
|
|
822
|
+
return this.req.runtime;
|
|
823
|
+
}
|
|
824
|
+
waitUntil(promise) {
|
|
825
|
+
this.req.waitUntil?.(promise);
|
|
826
|
+
}
|
|
827
|
+
toString() {
|
|
828
|
+
return `[${this.req.method}] ${this.req.url}`;
|
|
829
|
+
}
|
|
830
|
+
toJSON() {
|
|
831
|
+
return this.toString();
|
|
832
|
+
}
|
|
833
|
+
get node() {
|
|
834
|
+
return this.req.runtime?.node;
|
|
835
|
+
}
|
|
836
|
+
get headers() {
|
|
837
|
+
return this.req.headers;
|
|
838
|
+
}
|
|
839
|
+
get path() {
|
|
840
|
+
return this.url.pathname + this.url.search;
|
|
841
|
+
}
|
|
842
|
+
get method() {
|
|
843
|
+
return this.req.method;
|
|
844
|
+
}
|
|
845
|
+
};
|
|
846
|
+
var H3EventResponse = class {
|
|
847
|
+
status;
|
|
848
|
+
statusText;
|
|
849
|
+
get headers() {
|
|
850
|
+
return this[kEventResHeaders] ||= new Headers();
|
|
851
|
+
}
|
|
852
|
+
get errHeaders() {
|
|
853
|
+
return this[kEventResErrHeaders] ||= new Headers();
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
var DISALLOWED_STATUS_CHARS = /[^\u0009\u0020-\u007E]/g;
|
|
857
|
+
function sanitizeStatusMessage(statusMessage = "") {
|
|
858
|
+
return statusMessage.replace(DISALLOWED_STATUS_CHARS, "");
|
|
859
|
+
}
|
|
860
|
+
function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
|
|
861
|
+
if (!statusCode) return defaultStatusCode;
|
|
862
|
+
if (typeof statusCode === "string") statusCode = +statusCode;
|
|
863
|
+
if (statusCode < 100 || statusCode > 599) return defaultStatusCode;
|
|
864
|
+
return statusCode;
|
|
865
|
+
}
|
|
866
|
+
var HTTPError = class HTTPError extends Error {
|
|
867
|
+
get name() {
|
|
868
|
+
return "HTTPError";
|
|
869
|
+
}
|
|
870
|
+
status;
|
|
871
|
+
statusText;
|
|
872
|
+
headers;
|
|
873
|
+
cause;
|
|
874
|
+
data;
|
|
875
|
+
body;
|
|
876
|
+
unhandled;
|
|
877
|
+
static isError(input) {
|
|
878
|
+
return input instanceof Error && input?.name === "HTTPError";
|
|
879
|
+
}
|
|
880
|
+
static status(status, statusText, details) {
|
|
881
|
+
return new HTTPError({
|
|
882
|
+
...details,
|
|
883
|
+
statusText,
|
|
884
|
+
status
|
|
885
|
+
});
|
|
886
|
+
}
|
|
887
|
+
constructor(arg1, arg2) {
|
|
888
|
+
let messageInput;
|
|
889
|
+
let details;
|
|
890
|
+
if (typeof arg1 === "string") {
|
|
891
|
+
messageInput = arg1;
|
|
892
|
+
details = arg2;
|
|
893
|
+
} else details = arg1;
|
|
894
|
+
const status = sanitizeStatusCode(details?.status || details?.statusCode || (details?.cause)?.status || (details?.cause)?.statusCode, 500);
|
|
895
|
+
const statusText = sanitizeStatusMessage(details?.statusText || details?.statusMessage || (details?.cause)?.statusText || (details?.cause)?.statusMessage);
|
|
896
|
+
const message = messageInput || details?.message || (details?.cause)?.message || details?.statusText || details?.statusMessage || [
|
|
897
|
+
"HTTPError",
|
|
898
|
+
status,
|
|
899
|
+
statusText
|
|
900
|
+
].filter(Boolean).join(" ");
|
|
901
|
+
super(message, { cause: details });
|
|
902
|
+
this.cause = details;
|
|
903
|
+
this.status = status;
|
|
904
|
+
this.statusText = statusText || void 0;
|
|
905
|
+
const rawHeaders = details?.headers || (details?.cause)?.headers;
|
|
906
|
+
this.headers = rawHeaders ? new Headers(rawHeaders) : void 0;
|
|
907
|
+
this.unhandled = details?.unhandled ?? (details?.cause)?.unhandled ?? void 0;
|
|
908
|
+
this.data = details?.data;
|
|
909
|
+
this.body = details?.body;
|
|
910
|
+
}
|
|
911
|
+
get statusCode() {
|
|
912
|
+
return this.status;
|
|
913
|
+
}
|
|
914
|
+
get statusMessage() {
|
|
915
|
+
return this.statusText;
|
|
916
|
+
}
|
|
917
|
+
toJSON() {
|
|
918
|
+
const unhandled = this.unhandled;
|
|
919
|
+
return {
|
|
920
|
+
status: this.status,
|
|
921
|
+
statusText: this.statusText,
|
|
922
|
+
unhandled,
|
|
923
|
+
message: unhandled ? "HTTPError" : this.message,
|
|
924
|
+
data: unhandled ? void 0 : this.data,
|
|
925
|
+
...unhandled ? void 0 : this.body
|
|
926
|
+
};
|
|
927
|
+
}
|
|
928
|
+
};
|
|
929
|
+
function isJSONSerializable(value, _type) {
|
|
930
|
+
if (value === null || value === void 0) return true;
|
|
931
|
+
if (_type !== "object") return _type === "boolean" || _type === "number" || _type === "string";
|
|
932
|
+
if (typeof value.toJSON === "function") return true;
|
|
933
|
+
if (Array.isArray(value)) return true;
|
|
934
|
+
if (typeof value.pipe === "function" || typeof value.pipeTo === "function") return false;
|
|
935
|
+
if (value instanceof NullProtoObj) return true;
|
|
936
|
+
const proto = Object.getPrototypeOf(value);
|
|
937
|
+
return proto === Object.prototype || proto === null;
|
|
938
|
+
}
|
|
939
|
+
var kNotFound = /* @__PURE__ */ Symbol.for("h3.notFound");
|
|
940
|
+
var kHandled = /* @__PURE__ */ Symbol.for("h3.handled");
|
|
941
|
+
function toResponse(val, event, config = {}) {
|
|
942
|
+
if (typeof val?.then === "function") return (val.catch?.((error) => error) || Promise.resolve(val)).then((resolvedVal) => toResponse(resolvedVal, event, config));
|
|
943
|
+
const response = prepareResponse(val, event, config);
|
|
944
|
+
if (typeof response?.then === "function") return toResponse(response, event, config);
|
|
945
|
+
const { onResponse } = config;
|
|
946
|
+
return onResponse ? Promise.resolve(onResponse(response, event)).then(() => response) : response;
|
|
947
|
+
}
|
|
948
|
+
var HTTPResponse = class {
|
|
949
|
+
#headers;
|
|
950
|
+
#init;
|
|
951
|
+
body;
|
|
952
|
+
constructor(body, init) {
|
|
953
|
+
this.body = body;
|
|
954
|
+
this.#init = init;
|
|
955
|
+
}
|
|
956
|
+
get status() {
|
|
957
|
+
return this.#init?.status || 200;
|
|
958
|
+
}
|
|
959
|
+
get statusText() {
|
|
960
|
+
return this.#init?.statusText || "OK";
|
|
961
|
+
}
|
|
962
|
+
get headers() {
|
|
963
|
+
return this.#headers ||= new Headers(this.#init?.headers);
|
|
964
|
+
}
|
|
965
|
+
};
|
|
966
|
+
function prepareResponse(val, event, config, nested) {
|
|
967
|
+
if (val === kHandled) return new NodeResponse(null);
|
|
968
|
+
if (val === kNotFound) val = new HTTPError({
|
|
969
|
+
status: 404,
|
|
970
|
+
message: `Cannot find any route matching [${event.req.method}] ${event.url}`
|
|
971
|
+
});
|
|
972
|
+
if (val && val instanceof Error) {
|
|
973
|
+
const isHTTPError = HTTPError.isError(val);
|
|
974
|
+
const error = isHTTPError ? val : new HTTPError(val);
|
|
975
|
+
if (!isHTTPError) {
|
|
976
|
+
error.unhandled = true;
|
|
977
|
+
if (val?.stack) error.stack = val.stack;
|
|
978
|
+
}
|
|
979
|
+
if (error.unhandled && !config.silent) console.error(error);
|
|
980
|
+
const { onError } = config;
|
|
981
|
+
const errHeaders = event[kEventRes]?.[kEventResErrHeaders];
|
|
982
|
+
return onError && !nested ? Promise.resolve(onError(error, event)).catch((error) => error).then((newVal) => prepareResponse(newVal ?? val, event, config, true)) : errorResponse(error, config.debug, errHeaders);
|
|
983
|
+
}
|
|
984
|
+
const preparedRes = event[kEventRes];
|
|
985
|
+
const preparedHeaders = preparedRes?.[kEventResHeaders];
|
|
986
|
+
event[kEventRes] = void 0;
|
|
987
|
+
if (!(val instanceof Response)) {
|
|
988
|
+
const res = prepareResponseBody(val, event, config);
|
|
989
|
+
const status = res.status || preparedRes?.status;
|
|
990
|
+
return new NodeResponse(nullBody(event.req.method, status) ? null : res.body, {
|
|
991
|
+
status,
|
|
992
|
+
statusText: res.statusText || preparedRes?.statusText,
|
|
993
|
+
headers: res.headers && preparedHeaders ? mergeHeaders$1(res.headers, preparedHeaders) : res.headers || preparedHeaders
|
|
994
|
+
});
|
|
995
|
+
}
|
|
996
|
+
if (!preparedHeaders || nested || !val.ok) return val;
|
|
997
|
+
try {
|
|
998
|
+
mergeHeaders$1(val.headers, preparedHeaders, val.headers);
|
|
999
|
+
return val;
|
|
1000
|
+
} catch {
|
|
1001
|
+
return new NodeResponse(nullBody(event.req.method, val.status) ? null : val.body, {
|
|
1002
|
+
status: val.status,
|
|
1003
|
+
statusText: val.statusText,
|
|
1004
|
+
headers: mergeHeaders$1(val.headers, preparedHeaders)
|
|
1005
|
+
});
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
function mergeHeaders$1(base, overrides, target = new Headers(base)) {
|
|
1009
|
+
for (const [name, value] of overrides) if (name === "set-cookie") target.append(name, value);
|
|
1010
|
+
else target.set(name, value);
|
|
1011
|
+
return target;
|
|
1012
|
+
}
|
|
1013
|
+
var frozen = (name) => (...args) => {
|
|
1014
|
+
throw new Error(`Headers are frozen (${name} ${args.join(", ")})`);
|
|
1015
|
+
};
|
|
1016
|
+
var FrozenHeaders = class extends Headers {
|
|
1017
|
+
set = frozen("set");
|
|
1018
|
+
append = frozen("append");
|
|
1019
|
+
delete = frozen("delete");
|
|
1020
|
+
};
|
|
1021
|
+
var emptyHeaders = /* @__PURE__ */ new FrozenHeaders({ "content-length": "0" });
|
|
1022
|
+
var jsonHeaders = /* @__PURE__ */ new FrozenHeaders({ "content-type": "application/json;charset=UTF-8" });
|
|
1023
|
+
function prepareResponseBody(val, event, config) {
|
|
1024
|
+
if (val === null || val === void 0) return {
|
|
1025
|
+
body: "",
|
|
1026
|
+
headers: emptyHeaders
|
|
1027
|
+
};
|
|
1028
|
+
const valType = typeof val;
|
|
1029
|
+
if (valType === "string") return { body: val };
|
|
1030
|
+
if (val instanceof Uint8Array) {
|
|
1031
|
+
event.res.headers.set("content-length", val.byteLength.toString());
|
|
1032
|
+
return { body: val };
|
|
1033
|
+
}
|
|
1034
|
+
if (val instanceof HTTPResponse || val?.constructor?.name === "HTTPResponse") return val;
|
|
1035
|
+
if (isJSONSerializable(val, valType)) return {
|
|
1036
|
+
body: JSON.stringify(val, void 0, config.debug ? 2 : void 0),
|
|
1037
|
+
headers: jsonHeaders
|
|
1038
|
+
};
|
|
1039
|
+
if (valType === "bigint") return {
|
|
1040
|
+
body: val.toString(),
|
|
1041
|
+
headers: jsonHeaders
|
|
1042
|
+
};
|
|
1043
|
+
if (val instanceof Blob) {
|
|
1044
|
+
const headers = new Headers({
|
|
1045
|
+
"content-type": val.type,
|
|
1046
|
+
"content-length": val.size.toString()
|
|
1047
|
+
});
|
|
1048
|
+
let filename = val.name;
|
|
1049
|
+
if (filename) {
|
|
1050
|
+
filename = encodeURIComponent(filename);
|
|
1051
|
+
headers.set("content-disposition", `filename="${filename}"; filename*=UTF-8''${filename}`);
|
|
1052
|
+
}
|
|
1053
|
+
return {
|
|
1054
|
+
body: val.stream(),
|
|
1055
|
+
headers
|
|
1056
|
+
};
|
|
1057
|
+
}
|
|
1058
|
+
if (valType === "symbol") return { body: val.toString() };
|
|
1059
|
+
if (valType === "function") return { body: `${val.name}()` };
|
|
1060
|
+
return { body: val };
|
|
1061
|
+
}
|
|
1062
|
+
function nullBody(method, status) {
|
|
1063
|
+
return method === "HEAD" || status === 100 || status === 101 || status === 102 || status === 204 || status === 205 || status === 304;
|
|
1064
|
+
}
|
|
1065
|
+
function errorResponse(error, debug, errHeaders) {
|
|
1066
|
+
let headers = error.headers ? mergeHeaders$1(jsonHeaders, error.headers) : new Headers(jsonHeaders);
|
|
1067
|
+
if (errHeaders) headers = mergeHeaders$1(headers, errHeaders);
|
|
1068
|
+
return new NodeResponse(JSON.stringify({
|
|
1069
|
+
...error.toJSON(),
|
|
1070
|
+
stack: debug && error.stack ? error.stack.split("\n").map((l) => l.trim()) : void 0
|
|
1071
|
+
}, void 0, debug ? 2 : void 0), {
|
|
1072
|
+
status: error.status,
|
|
1073
|
+
statusText: error.statusText,
|
|
1074
|
+
headers
|
|
1075
|
+
});
|
|
1076
|
+
}
|
|
1077
|
+
function callMiddleware(event, middleware, handler, index = 0) {
|
|
1078
|
+
if (index === middleware.length) return handler(event);
|
|
1079
|
+
const fn = middleware[index];
|
|
1080
|
+
let nextCalled;
|
|
1081
|
+
let nextResult;
|
|
1082
|
+
const next = () => {
|
|
1083
|
+
if (nextCalled) return nextResult;
|
|
1084
|
+
nextCalled = true;
|
|
1085
|
+
nextResult = callMiddleware(event, middleware, handler, index + 1);
|
|
1086
|
+
return nextResult;
|
|
1087
|
+
};
|
|
1088
|
+
const ret = fn(event, next);
|
|
1089
|
+
return isUnhandledResponse(ret) ? next() : typeof ret?.then === "function" ? ret.then((resolved) => isUnhandledResponse(resolved) ? next() : resolved) : ret;
|
|
1090
|
+
}
|
|
1091
|
+
function isUnhandledResponse(val) {
|
|
1092
|
+
return val === void 0 || val === kNotFound;
|
|
1093
|
+
}
|
|
1094
|
+
function toRequest(input, options) {
|
|
1095
|
+
if (typeof input === "string") {
|
|
1096
|
+
let url = input;
|
|
1097
|
+
if (url[0] === "/") {
|
|
1098
|
+
const headers = options?.headers ? new Headers(options.headers) : void 0;
|
|
1099
|
+
const host = headers?.get("host") || "localhost";
|
|
1100
|
+
url = `${headers?.get("x-forwarded-proto") === "https" ? "https" : "http"}://${host}${url}`;
|
|
1101
|
+
}
|
|
1102
|
+
return new Request(url, options);
|
|
1103
|
+
} else if (options || input instanceof URL) return new Request(input, options);
|
|
1104
|
+
return input;
|
|
1105
|
+
}
|
|
1106
|
+
function defineHandler(input) {
|
|
1107
|
+
if (typeof input === "function") return handlerWithFetch(input);
|
|
1108
|
+
const handler = input.handler || (input.fetch ? function _fetchHandler(event) {
|
|
1109
|
+
return input.fetch(event.req);
|
|
1110
|
+
} : NoHandler);
|
|
1111
|
+
return Object.assign(handlerWithFetch(input.middleware?.length ? function _handlerMiddleware(event) {
|
|
1112
|
+
return callMiddleware(event, input.middleware, handler);
|
|
1113
|
+
} : handler), input);
|
|
1114
|
+
}
|
|
1115
|
+
function handlerWithFetch(handler) {
|
|
1116
|
+
if ("fetch" in handler) return handler;
|
|
1117
|
+
return Object.assign(handler, { fetch: (req) => {
|
|
1118
|
+
if (typeof req === "string") req = new URL(req, "http://_");
|
|
1119
|
+
if (req instanceof URL) req = new Request(req);
|
|
1120
|
+
const event = new H3Event(req);
|
|
1121
|
+
try {
|
|
1122
|
+
return Promise.resolve(toResponse(handler(event), event));
|
|
1123
|
+
} catch (error) {
|
|
1124
|
+
return Promise.resolve(toResponse(error, event));
|
|
1125
|
+
}
|
|
1126
|
+
} });
|
|
1127
|
+
}
|
|
1128
|
+
function defineLazyEventHandler(loader) {
|
|
1129
|
+
let handler;
|
|
1130
|
+
let promise;
|
|
1131
|
+
return defineHandler(function lazyHandler(event) {
|
|
1132
|
+
return handler ? handler(event) : (promise ??= Promise.resolve(loader()).then(function resolveLazyHandler(r) {
|
|
1133
|
+
handler = toEventHandler(r) || toEventHandler(r.default);
|
|
1134
|
+
if (typeof handler !== "function") throw new TypeError("Invalid lazy handler", { cause: { resolved: r } });
|
|
1135
|
+
return handler;
|
|
1136
|
+
})).then((r) => r(event));
|
|
1137
|
+
});
|
|
1138
|
+
}
|
|
1139
|
+
function toEventHandler(handler) {
|
|
1140
|
+
if (typeof handler === "function") return handler;
|
|
1141
|
+
if (typeof handler?.handler === "function") return handler.handler;
|
|
1142
|
+
if (typeof handler?.fetch === "function") return function _fetchHandler(event) {
|
|
1143
|
+
return handler.fetch(event.req);
|
|
1144
|
+
};
|
|
1145
|
+
}
|
|
1146
|
+
var NoHandler = () => kNotFound;
|
|
1147
|
+
var H3Core = class {
|
|
1148
|
+
config;
|
|
1149
|
+
"~middleware";
|
|
1150
|
+
"~routes" = [];
|
|
1151
|
+
constructor(config = {}) {
|
|
1152
|
+
this["~middleware"] = [];
|
|
1153
|
+
this.config = config;
|
|
1154
|
+
this.fetch = this.fetch.bind(this);
|
|
1155
|
+
this.handler = this.handler.bind(this);
|
|
1156
|
+
}
|
|
1157
|
+
fetch(request) {
|
|
1158
|
+
return this["~request"](request);
|
|
1159
|
+
}
|
|
1160
|
+
handler(event) {
|
|
1161
|
+
const route = this["~findRoute"](event);
|
|
1162
|
+
if (route) {
|
|
1163
|
+
event.context.params = route.params;
|
|
1164
|
+
event.context.matchedRoute = route.data;
|
|
1165
|
+
}
|
|
1166
|
+
const routeHandler = route?.data.handler || NoHandler;
|
|
1167
|
+
const middleware = this["~getMiddleware"](event, route);
|
|
1168
|
+
return middleware.length > 0 ? callMiddleware(event, middleware, routeHandler) : routeHandler(event);
|
|
1169
|
+
}
|
|
1170
|
+
"~request"(request, context) {
|
|
1171
|
+
const event = new H3Event(request, context, this);
|
|
1172
|
+
let handlerRes;
|
|
1173
|
+
try {
|
|
1174
|
+
if (this.config.onRequest) {
|
|
1175
|
+
const hookRes = this.config.onRequest(event);
|
|
1176
|
+
handlerRes = typeof hookRes?.then === "function" ? hookRes.then(() => this.handler(event)) : this.handler(event);
|
|
1177
|
+
} else handlerRes = this.handler(event);
|
|
1178
|
+
} catch (error) {
|
|
1179
|
+
handlerRes = Promise.reject(error);
|
|
1180
|
+
}
|
|
1181
|
+
return toResponse(handlerRes, event, this.config);
|
|
1182
|
+
}
|
|
1183
|
+
"~findRoute"(_event) {}
|
|
1184
|
+
"~addRoute"(_route) {
|
|
1185
|
+
this["~routes"].push(_route);
|
|
1186
|
+
}
|
|
1187
|
+
"~getMiddleware"(_event, route) {
|
|
1188
|
+
const routeMiddleware = route?.data.middleware;
|
|
1189
|
+
const globalMiddleware = this["~middleware"];
|
|
1190
|
+
return routeMiddleware ? [...globalMiddleware, ...routeMiddleware] : globalMiddleware;
|
|
1191
|
+
}
|
|
1192
|
+
};
|
|
1193
|
+
new TextEncoder();
|
|
1194
|
+
//#endregion
|
|
1195
|
+
export { toEventHandler as a, serve as c, defineLazyEventHandler as i, HTTPError as n, toRequest as o, defineHandler as r, NodeResponse as s, H3Core as t };
|