hasancode-api-docs 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +403 -0
- package/client/dist/assets/abap-BdImnpbu.js +1 -0
- package/client/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/client/dist/assets/ada-bCR0ucgS.js +1 -0
- package/client/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/client/dist/assets/angular-html-CU67Zn6k.js +1 -0
- package/client/dist/assets/angular-ts-BwZT4LLn.js +1 -0
- package/client/dist/assets/apache-Pmp26Uib.js +1 -0
- package/client/dist/assets/apex-D8_7TLub.js +1 -0
- package/client/dist/assets/apl-dKokRX4l.js +1 -0
- package/client/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/client/dist/assets/ara-BRHolxvo.js +1 -0
- package/client/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/client/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/client/dist/assets/astro-CbQHKStN.js +1 -0
- package/client/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/client/dist/assets/awk-DMzUqQB5.js +1 -0
- package/client/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/client/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/client/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/client/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/client/dist/assets/bat-BkioyH1T.js +1 -0
- package/client/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/client/dist/assets/berry-uYugtg8r.js +1 -0
- package/client/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/client/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/client/dist/assets/bird2-DPOp833l.js +1 -0
- package/client/dist/assets/blade-D4QpJJKB.js +1 -0
- package/client/dist/assets/bsl-BO_Y6i37.js +1 -0
- package/client/dist/assets/c-BIGW1oBm.js +1 -0
- package/client/dist/assets/c3-eo99z4R2.js +1 -0
- package/client/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/client/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/client/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/client/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/client/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/client/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/client/dist/assets/clarity-D53aC0YG.js +1 -0
- package/client/dist/assets/clojure-P80f7IUj.js +1 -0
- package/client/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/client/dist/assets/cobol-nwyudZeR.js +1 -0
- package/client/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/client/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/client/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/client/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/client/dist/assets/coq-DkFqJrB1.js +1 -0
- package/client/dist/assets/cpp-CofmeUqb.js +1 -0
- package/client/dist/assets/crystal-tKQVLTB8.js +1 -0
- package/client/dist/assets/csharp-COcwbKMJ.js +1 -0
- package/client/dist/assets/css-DPfMkruS.js +1 -0
- package/client/dist/assets/csv-fuZLfV_i.js +1 -0
- package/client/dist/assets/cue-D82EKSYY.js +1 -0
- package/client/dist/assets/cypher-COkxafJQ.js +1 -0
- package/client/dist/assets/d-85-TOEBH.js +1 -0
- package/client/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/client/dist/assets/dart-CF10PKvl.js +1 -0
- package/client/dist/assets/dax-CEL-wOlO.js +1 -0
- package/client/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/client/dist/assets/diff-D97Zzqfu.js +1 -0
- package/client/dist/assets/docker-BcOcwvcX.js +1 -0
- package/client/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/client/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/client/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/client/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/client/dist/assets/edge-BkV0erSs.js +1 -0
- package/client/dist/assets/elixir-CDX3lj18.js +1 -0
- package/client/dist/assets/elm-DbKCFpqz.js +1 -0
- package/client/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/client/dist/assets/erb-B12qg9BL.js +1 -0
- package/client/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/client/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/client/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/client/dist/assets/fennel-BYunw83y.js +1 -0
- package/client/dist/assets/fish-BvzEVeQv.js +1 -0
- package/client/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/client/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/client/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/client/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/client/dist/assets/gdresource-BOOCDP_w.js +1 -0
- package/client/dist/assets/gdscript-C5YyOfLZ.js +1 -0
- package/client/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/client/dist/assets/genie-D0YGMca9.js +1 -0
- package/client/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/client/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/client/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/client/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/client/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/client/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/client/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/client/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/client/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/client/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/client/dist/assets/gleam-BspZqrRM.js +1 -0
- package/client/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/client/dist/assets/glimmer-ts-U6CK756n.js +1 -0
- package/client/dist/assets/glsl-DplSGwfg.js +1 -0
- package/client/dist/assets/gn-n2N0HUVH.js +1 -0
- package/client/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/client/dist/assets/go-CxLEBnE3.js +1 -0
- package/client/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/client/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/client/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/client/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/client/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/client/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/client/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/client/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/client/dist/assets/hack-CaT9iCJl.js +1 -0
- package/client/dist/assets/haml-B8DHNrY2.js +1 -0
- package/client/dist/assets/handlebars-BL8al0AC.js +1 -0
- package/client/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/client/dist/assets/haxe-CzTSHFRz.js +1 -0
- package/client/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/client/dist/assets/hjson-D5-asLiD.js +1 -0
- package/client/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/client/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/client/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/client/dist/assets/houston-DnULxvSX.js +1 -0
- package/client/dist/assets/html-GMplVEZG.js +1 -0
- package/client/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/client/dist/assets/http-jrhK8wxY.js +1 -0
- package/client/dist/assets/hurl-irOxFIW8.js +1 -0
- package/client/dist/assets/hxml-Bvhsp5Yf.js +1 -0
- package/client/dist/assets/hy-DFXneXwc.js +1 -0
- package/client/dist/assets/imba-DGztddWO.js +1 -0
- package/client/dist/assets/index-BdqrFP6U.js +14 -0
- package/client/dist/assets/index-uUjMOcBA.css +1 -0
- package/client/dist/assets/ini-BEwlwnbL.js +1 -0
- package/client/dist/assets/java-CylS5w8V.js +1 -0
- package/client/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/client/dist/assets/jinja-4LBKfQ-Z.js +1 -0
- package/client/dist/assets/jison-wvAkD_A8.js +1 -0
- package/client/dist/assets/json-Cp-IABpG.js +1 -0
- package/client/dist/assets/json5-C9tS-k6U.js +1 -0
- package/client/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/client/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/client/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/client/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/client/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/client/dist/assets/julia-CxzCAyBv.js +1 -0
- package/client/dist/assets/just-Cw27pwNe.js +1 -0
- package/client/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/client/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/client/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/client/dist/assets/kdl-DV7GczEv.js +1 -0
- package/client/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/client/dist/assets/kusto-DZf3V79B.js +1 -0
- package/client/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/client/dist/assets/latex-CWtU0Tv5.js +1 -0
- package/client/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/client/dist/assets/less-B1dDrJ26.js +1 -0
- package/client/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/client/dist/assets/liquid-DYVedYrR.js +1 -0
- package/client/dist/assets/llvm-DjAJT7YJ.js +1 -0
- package/client/dist/assets/log-2UxHyX5q.js +1 -0
- package/client/dist/assets/logo-BtOb2qkB.js +1 -0
- package/client/dist/assets/lua-BaeVxFsk.js +1 -0
- package/client/dist/assets/luau-C-HG3fhB.js +1 -0
- package/client/dist/assets/make-CHLpvVh8.js +1 -0
- package/client/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/client/dist/assets/marko-CnJfTvn9.js +1 -0
- package/client/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/client/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/client/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/client/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/client/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/client/dist/assets/matlab-D7o27uSR.js +1 -0
- package/client/dist/assets/mdc-BMNejdWA.js +1 -0
- package/client/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/client/dist/assets/mermaid-mWjccvbQ.js +1 -0
- package/client/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/client/dist/assets/min-light-CTRr51gU.js +1 -0
- package/client/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/client/dist/assets/mojo-rZm6bMo-.js +1 -0
- package/client/dist/assets/monokai-D4h5O-jR.js +1 -0
- package/client/dist/assets/moonbit-_H4v1dQx.js +1 -0
- package/client/dist/assets/move-IF9eRakj.js +1 -0
- package/client/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/client/dist/assets/nextflow-Zz6hmt5N.js +1 -0
- package/client/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/client/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/client/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/client/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/client/dist/assets/nim-CVrawwO9.js +1 -0
- package/client/dist/assets/nix-CwoSXNpI.js +1 -0
- package/client/dist/assets/nord-Ddv68eIx.js +1 -0
- package/client/dist/assets/nushell-Cz2AlsmD.js +1 -0
- package/client/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/client/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/client/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/client/dist/assets/odin-BBf5iR-q.js +1 -0
- package/client/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/client/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/client/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/client/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/client/dist/assets/perl-C0TMdlhV.js +1 -0
- package/client/dist/assets/php-Dhbhpdrm.js +1 -0
- package/client/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/client/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/client/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/client/dist/assets/po-BTJTHyun.js +1 -0
- package/client/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/client/dist/assets/polar-C0HS_06l.js +1 -0
- package/client/dist/assets/postcss-CXtECtnM.js +1 -0
- package/client/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/client/dist/assets/powershell-Dpen1YoG.js +1 -0
- package/client/dist/assets/prisma-Dd19v3D-.js +1 -0
- package/client/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/client/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/client/dist/assets/pug-CGlum2m_.js +1 -0
- package/client/dist/assets/puppet-BMWR74SV.js +1 -0
- package/client/dist/assets/purescript-CklMAg4u.js +1 -0
- package/client/dist/assets/python-B6aJPvgy.js +1 -0
- package/client/dist/assets/qml-3beO22l8.js +1 -0
- package/client/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/client/dist/assets/qss-IeuSbFQv.js +1 -0
- package/client/dist/assets/r-Dspwwk_N.js +1 -0
- package/client/dist/assets/racket-BqYA7rlc.js +1 -0
- package/client/dist/assets/raku-DXvB9xmW.js +1 -0
- package/client/dist/assets/razor-Uh8Bk_45.js +1 -0
- package/client/dist/assets/red-bN70gL4F.js +1 -0
- package/client/dist/assets/reg-C-SQnVFl.js +1 -0
- package/client/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/client/dist/assets/rel-C3B-1QV4.js +1 -0
- package/client/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/client/dist/assets/ron-D8l8udqQ.js +1 -0
- package/client/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/client/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/client/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/client/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/client/dist/assets/rst-BrH8l1NY.js +1 -0
- package/client/dist/assets/ruby-Dw2BHqvy.js +1 -0
- package/client/dist/assets/rust-B1yitclQ.js +1 -0
- package/client/dist/assets/sas-cz2c8ADy.js +1 -0
- package/client/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/client/dist/assets/scala-C151Ov-r.js +1 -0
- package/client/dist/assets/scheme-C98Dy4si.js +1 -0
- package/client/dist/assets/scss-OYdSNvt2.js +1 -0
- package/client/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/client/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/client/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/client/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/client/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/client/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/client/dist/assets/smalltalk-BERRCDM3.js +1 -0
- package/client/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/client/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/client/dist/assets/solarized-light-L9t79GZl.js +1 -0
- package/client/dist/assets/solidity-rGO070M0.js +1 -0
- package/client/dist/assets/soy-Brmx7dQM.js +1 -0
- package/client/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/client/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/client/dist/assets/sql-BLtJtn59.js +1 -0
- package/client/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/client/dist/assets/stata-BH5u7GGu.js +1 -0
- package/client/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/client/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/client/dist/assets/svelte-C_ipcX3V.js +1 -0
- package/client/dist/assets/swift-D82vCrfD.js +1 -0
- package/client/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/client/dist/assets/system-verilog-CnnmHF94.js +1 -0
- package/client/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/client/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/client/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/client/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/client/dist/assets/templ-P3uqSqPl.js +1 -0
- package/client/dist/assets/terraform-BETggiCN.js +1 -0
- package/client/dist/assets/tex-idrVyKtj.js +1 -0
- package/client/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/client/dist/assets/toml-vGWfd6FD.js +1 -0
- package/client/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/client/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/client/dist/assets/tsx-COt5Ahok.js +1 -0
- package/client/dist/assets/turtle-BsS91CYL.js +1 -0
- package/client/dist/assets/twig-DNn4PbVi.js +1 -0
- package/client/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/client/dist/assets/typespec-BGHnOYBU.js +1 -0
- package/client/dist/assets/typst-DHCkPAjA.js +1 -0
- package/client/dist/assets/v-BcVCzyr7.js +1 -0
- package/client/dist/assets/vala-CsfeWuGM.js +1 -0
- package/client/dist/assets/vb-D17OF-Vu.js +1 -0
- package/client/dist/assets/vendor-r6CGHiWc.js +16 -0
- package/client/dist/assets/verilog-BQ8w6xss.js +1 -0
- package/client/dist/assets/vesper-DU1UobuO.js +1 -0
- package/client/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/client/dist/assets/viml-CJc9bBzg.js +1 -0
- package/client/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/client/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/client/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/client/dist/assets/vue-DN_0RTcg.js +1 -0
- package/client/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/client/dist/assets/vue-vine-CQOfvN7w.js +1 -0
- package/client/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/client/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/client/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/client/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/client/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/client/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/client/dist/assets/wit-5i3qLPDT.js +1 -0
- package/client/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/client/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/client/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/client/dist/assets/yaml-Buea-lGh.js +1 -0
- package/client/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/client/dist/assets/zig-VOosw3JB.js +1 -0
- package/client/dist/index.html +23 -0
- package/client/dist/logo.png +0 -0
- package/dist/code-theme.d.ts +69 -0
- package/dist/code-theme.js +69 -0
- package/dist/decorators/MetadataDecorators.d.ts +56 -0
- package/dist/decorators/MetadataDecorators.js +196 -0
- package/dist/decorators/MethodDecorators.d.ts +40 -0
- package/dist/decorators/MethodDecorators.js +98 -0
- package/dist/decorators/ParameterDecorators.d.ts +33 -0
- package/dist/decorators/ParameterDecorators.js +158 -0
- package/dist/define/DefineDoc.d.ts +39 -0
- package/dist/define/DefineDoc.js +90 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +37 -0
- package/dist/middleware/ApiDoc.d.ts +75 -0
- package/dist/middleware/ApiDoc.js +307 -0
- package/dist/middleware/RouteDoc.js +47 -0
- package/dist/registry/RouteRegistry.d.ts +103 -0
- package/dist/registry/RouteRegistry.js +70 -0
- package/package.json +55 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ParamMetadata } from "../registry/RouteRegistry";
|
|
2
|
+
/**
|
|
3
|
+
* Path parameter decorator
|
|
4
|
+
* @example
|
|
5
|
+
* @Param('id', { type: 'string', required: true, description: 'User ID' })
|
|
6
|
+
*/
|
|
7
|
+
export declare function Param(name: string, config: Omit<ParamMetadata, "name">): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
8
|
+
/**
|
|
9
|
+
* Query parameter decorator
|
|
10
|
+
* @example
|
|
11
|
+
* @Query('page', { type: 'number', default: 1, description: 'Page number' })
|
|
12
|
+
*/
|
|
13
|
+
export declare function Query(name: string, config: Omit<ParamMetadata, "name">): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
14
|
+
/**
|
|
15
|
+
* Header decorator
|
|
16
|
+
* @example
|
|
17
|
+
* @Header('Authorization', { type: 'string', required: true })
|
|
18
|
+
*/
|
|
19
|
+
export declare function Header(name: string, config: Omit<ParamMetadata, "name">): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
20
|
+
/**
|
|
21
|
+
* Request body decorator
|
|
22
|
+
* @example
|
|
23
|
+
* @Body({
|
|
24
|
+
* email: { type: 'string', required: true },
|
|
25
|
+
* password: { type: 'string', required: true }
|
|
26
|
+
* })
|
|
27
|
+
*/
|
|
28
|
+
export declare function Body(schema: Record<string, Omit<ParamMetadata, "name">>, options?: {
|
|
29
|
+
contentType?: string;
|
|
30
|
+
required?: boolean;
|
|
31
|
+
description?: string;
|
|
32
|
+
example?: any;
|
|
33
|
+
}): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Param = Param;
|
|
4
|
+
exports.Query = Query;
|
|
5
|
+
exports.Header = Header;
|
|
6
|
+
exports.Body = Body;
|
|
7
|
+
const marked_1 = require("marked");
|
|
8
|
+
const RouteRegistry_1 = require("../registry/RouteRegistry");
|
|
9
|
+
/**
|
|
10
|
+
* Helper to get or create metadata for a route based on the decorator context
|
|
11
|
+
*/
|
|
12
|
+
function getOrCreateMetadata(target, propertyKey, defaultMethod = "get", defaultPath = "/") {
|
|
13
|
+
// Try to get method and path from existing metadata
|
|
14
|
+
const method = Reflect.getMetadata("api:method", target, propertyKey) || defaultMethod;
|
|
15
|
+
const path = Reflect.getMetadata("api:path", target, propertyKey) ||
|
|
16
|
+
defaultPath;
|
|
17
|
+
return { method, path };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Path parameter decorator
|
|
21
|
+
* @example
|
|
22
|
+
* @Param('id', { type: 'string', required: true, description: 'User ID' })
|
|
23
|
+
*/
|
|
24
|
+
function Param(name, config) {
|
|
25
|
+
return function (target, propertyKey, descriptor) {
|
|
26
|
+
const { method, path } = getOrCreateMetadata(target, propertyKey);
|
|
27
|
+
let metadata = RouteRegistry_1.routeRegistry.get(method, path);
|
|
28
|
+
if (!metadata) {
|
|
29
|
+
metadata = {
|
|
30
|
+
method,
|
|
31
|
+
path,
|
|
32
|
+
params: [],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (!metadata.params) {
|
|
36
|
+
metadata.params = [];
|
|
37
|
+
}
|
|
38
|
+
// Convert description to HTML if it exists
|
|
39
|
+
if (config === null || config === void 0 ? void 0 : config.description) {
|
|
40
|
+
const paramData = Object.assign(Object.assign({ name }, config), { description: '<div class="md__code">' +
|
|
41
|
+
marked_1.marked.parse(config.description.toString()) +
|
|
42
|
+
"</div>" });
|
|
43
|
+
metadata.params.push(paramData);
|
|
44
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
metadata.params.push(Object.assign({ name }, config));
|
|
48
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
49
|
+
}
|
|
50
|
+
return descriptor;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Query parameter decorator
|
|
55
|
+
* @example
|
|
56
|
+
* @Query('page', { type: 'number', default: 1, description: 'Page number' })
|
|
57
|
+
*/
|
|
58
|
+
function Query(name, config) {
|
|
59
|
+
return function (target, propertyKey, descriptor) {
|
|
60
|
+
const { method, path } = getOrCreateMetadata(target, propertyKey);
|
|
61
|
+
let metadata = RouteRegistry_1.routeRegistry.get(method, path);
|
|
62
|
+
if (!metadata) {
|
|
63
|
+
metadata = {
|
|
64
|
+
method,
|
|
65
|
+
path,
|
|
66
|
+
query: [],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (!metadata.query) {
|
|
70
|
+
metadata.query = [];
|
|
71
|
+
}
|
|
72
|
+
// Convert description to HTML if it exists
|
|
73
|
+
if (config === null || config === void 0 ? void 0 : config.description) {
|
|
74
|
+
const queryData = Object.assign(Object.assign({ name }, config), { description: '<div class="md__code">' +
|
|
75
|
+
marked_1.marked.parse(config.description.toString()) +
|
|
76
|
+
"</div>" });
|
|
77
|
+
metadata.query.push(queryData);
|
|
78
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
metadata.query.push(Object.assign({ name }, config));
|
|
82
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
83
|
+
}
|
|
84
|
+
return descriptor;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Header decorator
|
|
89
|
+
* @example
|
|
90
|
+
* @Header('Authorization', { type: 'string', required: true })
|
|
91
|
+
*/
|
|
92
|
+
function Header(name, config) {
|
|
93
|
+
return function (target, propertyKey, descriptor) {
|
|
94
|
+
const { method, path } = getOrCreateMetadata(target, propertyKey);
|
|
95
|
+
let metadata = RouteRegistry_1.routeRegistry.get(method, path);
|
|
96
|
+
if (!metadata) {
|
|
97
|
+
metadata = {
|
|
98
|
+
method,
|
|
99
|
+
path,
|
|
100
|
+
headers: [],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (!metadata.headers) {
|
|
104
|
+
metadata.headers = [];
|
|
105
|
+
}
|
|
106
|
+
metadata.headers.push(Object.assign({ name }, config));
|
|
107
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
108
|
+
return descriptor;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Request body decorator
|
|
113
|
+
* @example
|
|
114
|
+
* @Body({
|
|
115
|
+
* email: { type: 'string', required: true },
|
|
116
|
+
* password: { type: 'string', required: true }
|
|
117
|
+
* })
|
|
118
|
+
*/
|
|
119
|
+
function Body(schema, options) {
|
|
120
|
+
return function (target, propertyKey, descriptor) {
|
|
121
|
+
const { method, path } = getOrCreateMetadata(target, propertyKey, "post");
|
|
122
|
+
let metadata = RouteRegistry_1.routeRegistry.get(method, path);
|
|
123
|
+
if (!metadata) {
|
|
124
|
+
metadata = {
|
|
125
|
+
method,
|
|
126
|
+
path,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Convert schema to proper format and handle descriptions
|
|
130
|
+
const processSchema = () => {
|
|
131
|
+
const bodySchema = {};
|
|
132
|
+
for (const [name, config] of Object.entries(schema)) {
|
|
133
|
+
if (config === null || config === void 0 ? void 0 : config.description) {
|
|
134
|
+
const html = marked_1.marked.parse(config.description);
|
|
135
|
+
bodySchema[name] = Object.assign(Object.assign({ name }, config), { description: '<div class="md__code">' + html + "</div>" });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
bodySchema[name] = Object.assign({ name }, config);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
let bodyDescription = options === null || options === void 0 ? void 0 : options.description;
|
|
142
|
+
if (options === null || options === void 0 ? void 0 : options.description) {
|
|
143
|
+
const parsed = marked_1.marked.parse(options.description.toString());
|
|
144
|
+
bodyDescription = '<div class="md__code">' + parsed + "</div>";
|
|
145
|
+
}
|
|
146
|
+
metadata.body = {
|
|
147
|
+
contentType: (options === null || options === void 0 ? void 0 : options.contentType) || "application/json",
|
|
148
|
+
required: (options === null || options === void 0 ? void 0 : options.required) !== false,
|
|
149
|
+
description: bodyDescription,
|
|
150
|
+
schema: bodySchema,
|
|
151
|
+
example: options === null || options === void 0 ? void 0 : options.example,
|
|
152
|
+
};
|
|
153
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
154
|
+
};
|
|
155
|
+
processSchema();
|
|
156
|
+
return descriptor;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { RouteMetadata, ParamMetadata } from "../registry/RouteRegistry";
|
|
2
|
+
/**
|
|
3
|
+
* Input type for doc() function - allows flexible input format
|
|
4
|
+
*/
|
|
5
|
+
export interface DocInput {
|
|
6
|
+
method: RouteMetadata["method"];
|
|
7
|
+
path: string;
|
|
8
|
+
summary?: string;
|
|
9
|
+
note?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
tags?: string[];
|
|
12
|
+
deprecated?: boolean;
|
|
13
|
+
params?: Record<string, Omit<ParamMetadata, "name">> | ParamMetadata[];
|
|
14
|
+
query?: Record<string, Omit<ParamMetadata, "name">> | ParamMetadata[];
|
|
15
|
+
headers?: Record<string, Omit<ParamMetadata, "name">> | ParamMetadata[];
|
|
16
|
+
body?: {
|
|
17
|
+
contentType?: string;
|
|
18
|
+
required?: boolean;
|
|
19
|
+
description?: string;
|
|
20
|
+
schema: Record<string, Omit<ParamMetadata, "name">>;
|
|
21
|
+
example?: any;
|
|
22
|
+
};
|
|
23
|
+
responses?: Record<number, {
|
|
24
|
+
description: string;
|
|
25
|
+
contentType?: string;
|
|
26
|
+
schema?: Record<string, Omit<ParamMetadata, "name">>;
|
|
27
|
+
example?: any;
|
|
28
|
+
}>;
|
|
29
|
+
auth?: boolean | {
|
|
30
|
+
required: boolean;
|
|
31
|
+
type?: "Bearer" | "Basic" | "ApiKey";
|
|
32
|
+
scopes?: string[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* doc() — Register API documentation for ANY route.
|
|
37
|
+
* Works with modular, functional, MVC, raw Express — any structure.
|
|
38
|
+
*/
|
|
39
|
+
export declare function doc(docInput: DocInput): void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.doc = doc;
|
|
4
|
+
const marked_1 = require("marked");
|
|
5
|
+
const RouteRegistry_1 = require("../registry/RouteRegistry");
|
|
6
|
+
/**
|
|
7
|
+
* Helper to convert object params to array format
|
|
8
|
+
*/
|
|
9
|
+
function convertParamsToArray(params) {
|
|
10
|
+
if (!params)
|
|
11
|
+
return undefined;
|
|
12
|
+
// If already array, return as is
|
|
13
|
+
if (Array.isArray(params))
|
|
14
|
+
return params;
|
|
15
|
+
// Convert object to array
|
|
16
|
+
return Object.entries(params).map(([name, config]) => (Object.assign({ name }, config)));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Helper to convert body schema to proper format
|
|
20
|
+
*/
|
|
21
|
+
function convertBodySchema(body) {
|
|
22
|
+
if (!body)
|
|
23
|
+
return undefined;
|
|
24
|
+
const schema = {};
|
|
25
|
+
for (const [name, config] of Object.entries(body.schema)) {
|
|
26
|
+
schema[name] = Object.assign({ name }, config);
|
|
27
|
+
}
|
|
28
|
+
if (body === null || body === void 0 ? void 0 : body.description) {
|
|
29
|
+
const parsed = marked_1.marked.parse(body.description.toString());
|
|
30
|
+
body.description = '<div class="md__code">' + parsed + "</div>";
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
contentType: body.contentType || "application/json",
|
|
34
|
+
required: body.required !== false,
|
|
35
|
+
description: body.description,
|
|
36
|
+
schema,
|
|
37
|
+
example: body.example,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Helper to convert responses object to array format
|
|
42
|
+
*/
|
|
43
|
+
function convertResponsesToArray(responses) {
|
|
44
|
+
if (!responses)
|
|
45
|
+
return undefined;
|
|
46
|
+
return Object.entries(responses).map(([statusCode, config]) => {
|
|
47
|
+
let responseSchema;
|
|
48
|
+
if (config.schema) {
|
|
49
|
+
responseSchema = {};
|
|
50
|
+
for (const [name, paramConfig] of Object.entries(config.schema)) {
|
|
51
|
+
responseSchema[name] = Object.assign({ name }, paramConfig);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let description = config.description;
|
|
55
|
+
if (description) {
|
|
56
|
+
const parsed = marked_1.marked.parse(description.toString());
|
|
57
|
+
description = `<div class="md__code">${parsed}</div>`;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
statusCode: parseInt(statusCode),
|
|
61
|
+
description,
|
|
62
|
+
contentType: config.contentType || "application/json",
|
|
63
|
+
schema: responseSchema,
|
|
64
|
+
example: config.example,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* doc() — Register API documentation for ANY route.
|
|
70
|
+
* Works with modular, functional, MVC, raw Express — any structure.
|
|
71
|
+
*/
|
|
72
|
+
function doc(docInput) {
|
|
73
|
+
// Convert input format to RouteMetadata format
|
|
74
|
+
const metadata = {
|
|
75
|
+
method: docInput.method,
|
|
76
|
+
path: docInput.path,
|
|
77
|
+
summary: docInput.summary,
|
|
78
|
+
note: docInput.note,
|
|
79
|
+
description: docInput.description,
|
|
80
|
+
tags: docInput.tags,
|
|
81
|
+
deprecated: docInput.deprecated,
|
|
82
|
+
params: convertParamsToArray(docInput.params),
|
|
83
|
+
query: convertParamsToArray(docInput.query),
|
|
84
|
+
headers: convertParamsToArray(docInput.headers),
|
|
85
|
+
body: convertBodySchema(docInput.body),
|
|
86
|
+
responses: convertResponsesToArray(docInput.responses),
|
|
87
|
+
auth: docInput.auth,
|
|
88
|
+
};
|
|
89
|
+
RouteRegistry_1.routeRegistry.register(metadata);
|
|
90
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
export { CODE_THEMES, CodeThemeValues } from "./code-theme";
|
|
3
|
+
export { ApiDoc, type ApiDocConfig } from "./middleware/ApiDoc";
|
|
4
|
+
export { Get, Post, Put, Patch, Delete, Route, } from "./decorators/MethodDecorators";
|
|
5
|
+
export { Param, Query, Header, Body } from "./decorators/ParameterDecorators";
|
|
6
|
+
export { Response, Summary, Description, Tags, Deprecated, Auth, } from "./decorators/MetadataDecorators";
|
|
7
|
+
export { doc } from "./define/DefineDoc";
|
|
8
|
+
export { type RouteMetadata, type ParamMetadata, type BodyMetadata, type ResponseMetadata, type AuthMetadata, } from "./registry/RouteRegistry";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.doc = exports.Auth = exports.Deprecated = exports.Tags = exports.Description = exports.Summary = exports.Response = exports.Body = exports.Header = exports.Query = exports.Param = exports.Route = exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = exports.ApiDoc = exports.CODE_THEMES = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
// Code theme type and constant
|
|
6
|
+
var code_theme_1 = require("./code-theme");
|
|
7
|
+
Object.defineProperty(exports, "CODE_THEMES", { enumerable: true, get: function () { return code_theme_1.CODE_THEMES; } });
|
|
8
|
+
// Main class
|
|
9
|
+
var ApiDoc_1 = require("./middleware/ApiDoc");
|
|
10
|
+
Object.defineProperty(exports, "ApiDoc", { enumerable: true, get: function () { return ApiDoc_1.ApiDoc; } });
|
|
11
|
+
// HTTP Method decorators
|
|
12
|
+
var MethodDecorators_1 = require("./decorators/MethodDecorators");
|
|
13
|
+
Object.defineProperty(exports, "Get", { enumerable: true, get: function () { return MethodDecorators_1.Get; } });
|
|
14
|
+
Object.defineProperty(exports, "Post", { enumerable: true, get: function () { return MethodDecorators_1.Post; } });
|
|
15
|
+
Object.defineProperty(exports, "Put", { enumerable: true, get: function () { return MethodDecorators_1.Put; } });
|
|
16
|
+
Object.defineProperty(exports, "Patch", { enumerable: true, get: function () { return MethodDecorators_1.Patch; } });
|
|
17
|
+
Object.defineProperty(exports, "Delete", { enumerable: true, get: function () { return MethodDecorators_1.Delete; } });
|
|
18
|
+
Object.defineProperty(exports, "Route", { enumerable: true, get: function () { return MethodDecorators_1.Route; } });
|
|
19
|
+
// Parameter decorators
|
|
20
|
+
var ParameterDecorators_1 = require("./decorators/ParameterDecorators");
|
|
21
|
+
Object.defineProperty(exports, "Param", { enumerable: true, get: function () { return ParameterDecorators_1.Param; } });
|
|
22
|
+
Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return ParameterDecorators_1.Query; } });
|
|
23
|
+
Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return ParameterDecorators_1.Header; } });
|
|
24
|
+
Object.defineProperty(exports, "Body", { enumerable: true, get: function () { return ParameterDecorators_1.Body; } });
|
|
25
|
+
// Metadata decorators
|
|
26
|
+
var MetadataDecorators_1 = require("./decorators/MetadataDecorators");
|
|
27
|
+
Object.defineProperty(exports, "Response", { enumerable: true, get: function () { return MetadataDecorators_1.Response; } });
|
|
28
|
+
Object.defineProperty(exports, "Summary", { enumerable: true, get: function () { return MetadataDecorators_1.Summary; } });
|
|
29
|
+
Object.defineProperty(exports, "Description", { enumerable: true, get: function () { return MetadataDecorators_1.Description; } });
|
|
30
|
+
Object.defineProperty(exports, "Tags", { enumerable: true, get: function () { return MetadataDecorators_1.Tags; } });
|
|
31
|
+
Object.defineProperty(exports, "Deprecated", { enumerable: true, get: function () { return MetadataDecorators_1.Deprecated; } });
|
|
32
|
+
Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return MetadataDecorators_1.Auth; } });
|
|
33
|
+
// ── For modular / functional / raw Express ────
|
|
34
|
+
// doc() is an Express middleware — sits inline in router.get/post/put/delete
|
|
35
|
+
// method & path are inferred automatically from the router
|
|
36
|
+
var DefineDoc_1 = require("./define/DefineDoc");
|
|
37
|
+
Object.defineProperty(exports, "doc", { enumerable: true, get: function () { return DefineDoc_1.doc; } });
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { RouteMetadata } from "../registry/RouteRegistry";
|
|
3
|
+
import { CodeThemeValues } from "../code-theme";
|
|
4
|
+
/**
|
|
5
|
+
* API Documentation configuration
|
|
6
|
+
*/
|
|
7
|
+
export interface ApiDocConfig {
|
|
8
|
+
title: string;
|
|
9
|
+
version: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
baseUrl?: string;
|
|
12
|
+
theme?: {
|
|
13
|
+
primaryColor?: string;
|
|
14
|
+
secondaryColor?: string;
|
|
15
|
+
accentColor?: string;
|
|
16
|
+
backgroundColor?: string;
|
|
17
|
+
sidebarBackgroundColor?: string;
|
|
18
|
+
codeTheme?: CodeThemeValues;
|
|
19
|
+
};
|
|
20
|
+
defaultAuth?: {
|
|
21
|
+
type: "Bearer" | "Basic" | "ApiKey";
|
|
22
|
+
bearerFormat?: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Main API Documentation class
|
|
27
|
+
*/
|
|
28
|
+
export declare class ApiDoc {
|
|
29
|
+
private config;
|
|
30
|
+
private clientPath;
|
|
31
|
+
private readonly DOCS_PATH;
|
|
32
|
+
private configReady;
|
|
33
|
+
constructor(config: ApiDocConfig);
|
|
34
|
+
/**
|
|
35
|
+
* Normalize configuration with defaults
|
|
36
|
+
*/
|
|
37
|
+
private normalizeConfig;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve client path
|
|
40
|
+
*/
|
|
41
|
+
private resolveClientPath;
|
|
42
|
+
/**
|
|
43
|
+
* Convert route metadata to API documentation format
|
|
44
|
+
*/
|
|
45
|
+
private convertRoutesToSections;
|
|
46
|
+
/**
|
|
47
|
+
* Convert single route to section format
|
|
48
|
+
*/
|
|
49
|
+
private convertRouteToSection;
|
|
50
|
+
/**
|
|
51
|
+
* Get Express middleware - automatically mounts at /api-docs
|
|
52
|
+
* Usage: app.use(apiDoc.middleware())
|
|
53
|
+
*/
|
|
54
|
+
middleware(): Router;
|
|
55
|
+
/**
|
|
56
|
+
* Serve configuration
|
|
57
|
+
*/
|
|
58
|
+
private serveConfig;
|
|
59
|
+
/**
|
|
60
|
+
* Serve the React app
|
|
61
|
+
*/
|
|
62
|
+
private serveApp;
|
|
63
|
+
/**
|
|
64
|
+
* Get all registered routes
|
|
65
|
+
*/
|
|
66
|
+
getRoutes(): RouteMetadata[];
|
|
67
|
+
/**
|
|
68
|
+
* Clear all routes (useful for testing)
|
|
69
|
+
*/
|
|
70
|
+
clearRoutes(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get the documentation path
|
|
73
|
+
*/
|
|
74
|
+
getDocsPath(): string;
|
|
75
|
+
}
|