From 2e27893a3dee42ba79415159d08e310cfdb2616a Mon Sep 17 00:00:00 2001 From: saltyaom Date: Thu, 1 May 2025 22:53:21 +0700 Subject: [PATCH] :wrench: fix: 1.3.0-exp.1 --- CHANGELOG.md | 11 + bun.lock | 512 +++++++++++++++++++++++++++++++++++++++++++++++ bun.lockb | Bin 88783 -> 0 bytes example/index.ts | 9 +- package.json | 6 +- src/index.ts | 273 ++++++++++++------------- src/types.ts | 230 +++++++++++---------- src/utils.ts | 50 +++-- 8 files changed, 827 insertions(+), 264 deletions(-) create mode 100644 bun.lock delete mode 100755 bun.lockb diff --git a/CHANGELOG.md b/CHANGELOG.md index 8628a28..6d9af20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +# 1.3.0-exp.1 - 1 May 2025 +Improvement: +- use static response for documentation page +- plugin is no longer async +- model should be synced globally +- use `parse` instead of `type` to determine content type + +# 1.3.0-exp.0 - 23 Apr 2025 +Change: +- Add support for Elysia 1.3 + # 1.2.2 - 22 Feb 2024 Bug fix: - [#185](https://github.com/elysiajs/elysia-swagger/pull/185) Fix path issue in Scalar config diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..55b068d --- /dev/null +++ b/bun.lock @@ -0,0 +1,512 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "@elysiajs/swagger", + "dependencies": { + "@scalar/themes": "^0.9.52", + "@scalar/types": "^0.0.12", + "openapi-types": "^12.1.3", + "pathe": "^1.1.2", + }, + "devDependencies": { + "@apidevtools/swagger-parser": "^10.1.0", + "@types/bun": "1.1.14", + "elysia": "1.3.0-exp.71", + "eslint": "9.6.0", + "tsup": "^8.1.0", + "typescript": "^5.5.3", + }, + "peerDependencies": { + "elysia": ">= 1.3.0-exp.71", + }, + }, + }, + "packages": { + "@apidevtools/json-schema-ref-parser": ["@apidevtools/json-schema-ref-parser@11.7.2", "", { "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0" } }, "sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA=="], + + "@apidevtools/openapi-schemas": ["@apidevtools/openapi-schemas@2.1.0", "", {}, "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ=="], + + "@apidevtools/swagger-methods": ["@apidevtools/swagger-methods@3.0.2", "", {}, "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg=="], + + "@apidevtools/swagger-parser": ["@apidevtools/swagger-parser@10.1.1", "", { "dependencies": { "@apidevtools/json-schema-ref-parser": "11.7.2", "@apidevtools/openapi-schemas": "^2.1.0", "@apidevtools/swagger-methods": "^3.0.2", "@jsdevtools/ono": "^7.1.3", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", "call-me-maybe": "^1.0.2" }, "peerDependencies": { "openapi-types": ">=7" } }, "sha512-u/kozRnsPO/x8QtKYJOqoGtC4kH6yg1lfYkB9Au0WhYB0FNLpyFusttQtvhlwjtG3rOwiRz4D8DnnXa8iEpIKA=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.3", "", { "os": "android", "cpu": "arm" }, "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.3", "", { "os": "android", "cpu": "arm64" }, "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.3", "", { "os": "android", "cpu": "x64" }, "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.3", "", { "os": "linux", "cpu": "arm" }, "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.3", "", { "os": "linux", "cpu": "x64" }, "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.3", "", { "os": "none", "cpu": "arm64" }, "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.3", "", { "os": "none", "cpu": "x64" }, "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.6.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + + "@eslint/config-array": ["@eslint/config-array@0.17.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], + + "@eslint/js": ["@eslint/js@9.6.0", "", {}, "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@jsdevtools/ono": ["@jsdevtools/ono@7.1.3", "", {}, "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.1", "", { "os": "android", "cpu": "arm" }, "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.1", "", { "os": "android", "cpu": "arm64" }, "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA=="], + + "@scalar/openapi-types": ["@scalar/openapi-types@0.1.1", "", {}, "sha512-NMy3QNk6ytcCoPUGJH0t4NNr36OWXgZhA3ormr3TvhX1NDgoF95wFyodGVH8xiHeUyn2/FxtETm8UBLbB5xEmg=="], + + "@scalar/themes": ["@scalar/themes@0.9.86", "", { "dependencies": { "@scalar/types": "0.1.7" } }, "sha512-QUHo9g5oSWi+0Lm1vJY9TaMZRau8LHg+vte7q5BVTBnu6NuQfigCaN+ouQ73FqIVd96TwMO6Db+dilK1B+9row=="], + + "@scalar/types": ["@scalar/types@0.0.12", "", { "dependencies": { "@scalar/openapi-types": "0.1.1", "@unhead/schema": "^1.9.5" } }, "sha512-XYZ36lSEx87i4gDqopQlGCOkdIITHHEvgkuJFrXFATQs9zHARop0PN0g4RZYWj+ZpCUclOcaOjbCt8JGe22mnQ=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.33", "", {}, "sha512-5HAV9exOMcXRUxo+9iYB5n09XxzCXnfy4VTNW4xnDv+FgjzAGY989C28BIdljKqmF+ZltUwujE3aossvcVtq6g=="], + + "@types/bun": ["@types/bun@1.1.14", "", { "dependencies": { "bun-types": "1.1.37" } }, "sha512-opVYiFGtO2af0dnWBdZWlioLBoxSdDO5qokaazLhq8XQtGZbY4pY3/JxY8Zdf/hEwGubbp7ErZXoN1+h2yesxA=="], + + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/node": ["@types/node@20.12.14", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg=="], + + "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], + + "@unhead/schema": ["@unhead/schema@1.11.20", "", { "dependencies": { "hookable": "^5.5.3", "zhead": "^2.2.4" } }, "sha512-0zWykKAaJdm+/Y7yi/Yds20PrUK7XabLe9c3IRcjnwYmSWY6z0Cr19VIs3ozCj8P+GhR+/TI2mwtGlueCEYouA=="], + + "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "bun-types": ["bun-types@1.1.37", "", { "dependencies": { "@types/node": "~20.12.8", "@types/ws": "~8.5.10" } }, "sha512-C65lv6eBr3LPJWFZ2gswyrGZ82ljnH8flVE03xeXxKhi2ZGtFiO4isRKTKnitbSqtRAcaqYSR6djt1whI66AbA=="], + + "bundle-require": ["bundle-require@5.1.0", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.18" } }, "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA=="], + + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "call-me-maybe": ["call-me-maybe@1.0.2", "", {}, "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "elysia": ["elysia@1.3.0-exp.71", "", { "dependencies": { "@sinclair/typebox": "^0.34.33", "cookie": "^1.0.2", "exact-mirror": "0.1.1", "fast-decode-uri-component": "^1.0.1", "openapi-types": "^12.1.3" }, "peerDependencies": { "file-type": ">= 20.0.0", "typescript": ">= 5.0.0" }, "optionalPeers": ["file-type", "typescript"] }, "sha512-jL7z5OzJgs8pCzEXRmzzYu972S9hILiab7bVD3VBJHAE/9EMdG5uzxWA++3rxJXPEW7HvK3E31zaJKv6TtKgqA=="], + + "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "esbuild": ["esbuild@0.25.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.3", "@esbuild/android-arm": "0.25.3", "@esbuild/android-arm64": "0.25.3", "@esbuild/android-x64": "0.25.3", "@esbuild/darwin-arm64": "0.25.3", "@esbuild/darwin-x64": "0.25.3", "@esbuild/freebsd-arm64": "0.25.3", "@esbuild/freebsd-x64": "0.25.3", "@esbuild/linux-arm": "0.25.3", "@esbuild/linux-arm64": "0.25.3", "@esbuild/linux-ia32": "0.25.3", "@esbuild/linux-loong64": "0.25.3", "@esbuild/linux-mips64el": "0.25.3", "@esbuild/linux-ppc64": "0.25.3", "@esbuild/linux-riscv64": "0.25.3", "@esbuild/linux-s390x": "0.25.3", "@esbuild/linux-x64": "0.25.3", "@esbuild/netbsd-arm64": "0.25.3", "@esbuild/netbsd-x64": "0.25.3", "@esbuild/openbsd-arm64": "0.25.3", "@esbuild/openbsd-x64": "0.25.3", "@esbuild/sunos-x64": "0.25.3", "@esbuild/win32-arm64": "0.25.3", "@esbuild/win32-ia32": "0.25.3", "@esbuild/win32-x64": "0.25.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.6.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/config-array": "^0.17.0", "@eslint/eslintrc": "^3.1.0", "@eslint/js": "9.6.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.0.1", "eslint-visitor-keys": "^4.0.0", "espree": "^10.1.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w=="], + + "eslint-scope": ["eslint-scope@8.3.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="], + + "espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="], + + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "exact-mirror": ["exact-mirror@0.1.1", "", { "peerDependencies": { "@sinclair/typebox": "^0.34.15" }, "optionalPeers": ["@sinclair/typebox"] }, "sha512-jygrs/z9JT3UBDVPsu4vLy8gqtTLTxVzoxLmDzkVXHizRGixDMdkdLF98ChZxsqHL0F7IcpTf8GUFRqa2qt3uw=="], + + "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="], + + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "nanoid": ["nanoid@5.1.5", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@4.40.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.1", "@rollup/rollup-android-arm64": "4.40.1", "@rollup/rollup-darwin-arm64": "4.40.1", "@rollup/rollup-darwin-x64": "4.40.1", "@rollup/rollup-freebsd-arm64": "4.40.1", "@rollup/rollup-freebsd-x64": "4.40.1", "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", "@rollup/rollup-linux-arm-musleabihf": "4.40.1", "@rollup/rollup-linux-arm64-gnu": "4.40.1", "@rollup/rollup-linux-arm64-musl": "4.40.1", "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-musl": "4.40.1", "@rollup/rollup-linux-s390x-gnu": "4.40.1", "@rollup/rollup-linux-x64-gnu": "4.40.1", "@rollup/rollup-linux-x64-musl": "4.40.1", "@rollup/rollup-win32-arm64-msvc": "4.40.1", "@rollup/rollup-win32-ia32-msvc": "4.40.1", "@rollup/rollup-win32-x64-msvc": "4.40.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "source-map": ["source-map@0.8.0-beta.0", "", { "dependencies": { "whatwg-url": "^7.0.0" } }, "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA=="], + + "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], + + "tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], + + "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], + + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + + "tsup": ["tsup@8.4.0", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.25.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "0.8.0-beta.0", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], + + "whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "zhead": ["zhead@2.2.4", "", {}, "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag=="], + + "zod": ["zod@3.24.3", "", {}, "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/eslintrc/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "@scalar/themes/@scalar/types": ["@scalar/types@0.1.7", "", { "dependencies": { "@scalar/openapi-types": "0.2.0", "@unhead/schema": "^1.11.11", "nanoid": "^5.1.5", "type-fest": "^4.20.0", "zod": "^3.23.8" } }, "sha512-irIDYzTQG2KLvFbuTI8k2Pz/R4JR+zUUSykVTbEMatkzMmVFnn1VzNSMlODbadycwZunbnL2tA27AXed9URVjw=="], + + "eslint/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "@scalar/themes/@scalar/types/@scalar/openapi-types": ["@scalar/openapi-types@0.2.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-waiKk12cRCqyUCWTOX0K1WEVX46+hVUK+zRPzAahDJ7G0TApvbNkuy5wx7aoUyEk++HHde0XuQnshXnt8jsddA=="], + + "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + } +} diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 21dca3102c9d18f3e57705f9623a303869017c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88783 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 { - return { test: 'hello' } + return { test: 'hello' as const } }, { response: 'schema' } ) + .post('/json', ({ body }) => body, { + parse: 'formdata', + body: 'schema', + response: 'schema' + }) .listen(3000) diff --git a/package.json b/package.json index 8c5307d..381b344 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elysiajs/swagger", - "version": "1.2.2", + "version": "1.3.0-exp.1", "description": "Plugin for Elysia to auto-generate Swagger page", "author": { "name": "saltyAom", @@ -57,12 +57,12 @@ "release": "npm run build && npm run test && npm publish --access public" }, "peerDependencies": { - "elysia": ">= 1.2.0" + "elysia": ">= 1.3.0-exp.71" }, "devDependencies": { "@apidevtools/swagger-parser": "^10.1.0", "@types/bun": "1.1.14", - "elysia": ">= 1.2.0", + "elysia": "1.3.0-exp.71", "eslint": "9.6.0", "tsup": "^8.1.0", "typescript": "^5.5.3" diff --git a/src/index.ts b/src/index.ts index 562bea2..4fc45df 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,38 +15,23 @@ import type { ElysiaSwaggerConfig } from './types' * * @see https://github.com/elysiajs/elysia-swagger */ -export const swagger = async ( - { - provider = 'scalar', - scalarVersion = 'latest', - scalarCDN = '', - scalarConfig = {}, - documentation = {}, - version = '5.9.0', - excludeStaticFile = true, - path = '/swagger' as Path, - exclude = [], - swaggerOptions = {}, - theme = `https://unpkg.com/swagger-ui-dist@${version}/swagger-ui.css`, - autoDarkMode = true, - excludeMethods = ['OPTIONS'], - excludeTags = [] - }: ElysiaSwaggerConfig = { - provider: 'scalar', - scalarVersion: 'latest', - scalarCDN: '', - scalarConfig: {}, - documentation: {}, - version: '5.9.0', - excludeStaticFile: true, - path: '/swagger' as Path, - exclude: [], - swaggerOptions: {}, - autoDarkMode: true, - excludeMethods: ['OPTIONS'], - excludeTags: [] - } -) => { +export const swagger = ({ + provider = 'scalar', + scalarVersion = 'latest', + scalarCDN = '', + scalarConfig = {}, + documentation = {}, + version = '5.9.0', + excludeStaticFile = true, + path = '/swagger' as Path, + specPath = `${path}/json`, + exclude = [], + swaggerOptions = {}, + theme = `https://unpkg.com/swagger-ui-dist@${version}/swagger-ui.css`, + autoDarkMode = true, + excludeMethods = ['OPTIONS'], + excludeTags = [] +}: ElysiaSwaggerConfig = {}) => { const schema = {} let totalRoutes = 0 @@ -62,126 +47,142 @@ export const swagger = async ( const relativePath = path.startsWith('/') ? path.slice(1) : path - const openAPISpecUrl = relativePath === '' ? `/json` : `/${relativePath}/json` - const app = new Elysia({ name: '@elysiajs/swagger' }) - app.get(path, function documentation({request}) { - const combinedSwaggerOptions = { - url: openAPISpecUrl, - dom_id: '#swagger-ui', - ...swaggerOptions - } - - const stringifiedSwaggerOptions = JSON.stringify( - combinedSwaggerOptions, - (key, value) => { - if (typeof value == 'function') return undefined - - return value + const page = new Response( + provider === 'swagger-ui' + ? SwaggerUIRender( + info, + version, + theme, + JSON.stringify( + { + url: specPath, + dom_id: '#swagger-ui', + ...swaggerOptions + }, + (_, value) => + typeof value === 'function' ? undefined : value + ), + autoDarkMode + ) + : ScalarRender( + info, + scalarVersion, + { + spec: { + ...scalarConfig.spec, + url: specPath + }, + ...scalarConfig, + // so we can showcase the elysia theme + // @ts-expect-error + _integration: 'elysiajs' + } satisfies ReferenceConfiguration, + scalarCDN + ), + { + headers: { + 'content-type': 'text/html; charset=utf8' } - ) - - const scalarConfiguration: ReferenceConfiguration = { - spec: { - ...scalarConfig.spec, - url: `${new URL(request.url).pathname.replace(/\/$/, "")}/json` - }, - ...scalarConfig, - // so we can showcase the elysia theme - // @ts-expect-error - _integration: 'elysiajs' } + ) - return new Response( - provider === 'swagger-ui' - ? SwaggerUIRender( - info, - version, - theme, - stringifiedSwaggerOptions, - autoDarkMode + app.get(path, page, { + detail: { + hide: true + } + }).get( + specPath, + function openAPISchema() { + // @ts-expect-error Private property + const routes = app.getGlobalRoutes() as InternalRoute[] + + if (routes.length !== totalRoutes) { + const ALLOWED_METHODS = [ + 'GET', + 'PUT', + 'POST', + 'DELETE', + 'OPTIONS', + 'HEAD', + 'PATCH', + 'TRACE' + ] + totalRoutes = routes.length + + // forEach create a clone of a route (can't use for-of) + routes.forEach((route: InternalRoute) => { + if (route.hooks?.detail?.hide === true) return + if (excludeMethods.includes(route.method)) return + if ( + ALLOWED_METHODS.includes(route.method) === false && + route.method !== 'ALL' ) - : ScalarRender(info, scalarVersion, scalarConfiguration, scalarCDN), - { - headers: { - 'content-type': 'text/html; charset=utf8' - } - } - ) - }).get(path === '/' ? '/json' : `${path}/json`, function openAPISchema() { - // @ts-expect-error Private property - const routes = app.getGlobalRoutes() as InternalRoute[] + return - if (routes.length !== totalRoutes) { - const ALLOWED_METHODS = ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'HEAD', 'PATCH', 'TRACE'] - totalRoutes = routes.length - - // forEach create a clone of a route (can't use for-of) - routes.forEach((route: InternalRoute) => { - if (route.hooks?.detail?.hide === true) return - // TODO: route.hooks?.detail?.hide !== false add ability to hide: false to prevent excluding - if (excludeMethods.includes(route.method)) return - if (ALLOWED_METHODS.includes(route.method) === false && route.method !== 'ALL') return - - if (route.method === 'ALL') { - ALLOWED_METHODS.forEach((method) => { + if (route.method === 'ALL') + ALLOWED_METHODS.forEach((method) => { + registerSchemaPath({ + schema, + hook: route.hooks, + method, + path: route.path, + // @ts-ignore + models: app.getGlobalDefinitions?.().type, + contentType: route.hooks.type + }) + }) + else registerSchemaPath({ schema, hook: route.hooks, - method, + method: route.method, path: route.path, // @ts-ignore - models: app.definitions?.type, + models: app.getGlobalDefinitions?.().type, contentType: route.hooks.type }) - }) - return - } - - registerSchemaPath({ - schema, - hook: route.hooks, - method: route.method, - path: route.path, - // @ts-ignore - models: app.definitions?.type, - contentType: route.hooks.type }) - }) - } - - return { - openapi: '3.0.3', - ...{ - ...documentation, - tags: documentation.tags?.filter( - (tag) => !excludeTags?.includes(tag?.name) - ), - info: { - title: 'Elysia Documentation', - description: 'Development documentation', - version: '0.0.0', - ...documentation.info - } - }, - paths: { - ...filterPaths(schema, relativePath, { - excludeStaticFile, - exclude: Array.isArray(exclude) ? exclude : [exclude] - }), - ...documentation.paths - }, - components: { - ...documentation.components, - schemas: { - // @ts-ignore - ...app.definitions?.type, - ...documentation.components?.schemas - } } - } satisfies OpenAPIV3.Document - }) + + return { + openapi: '3.0.3', + ...{ + ...documentation, + tags: documentation.tags?.filter( + (tag) => !excludeTags?.includes(tag?.name) + ), + info: { + title: 'Elysia Documentation', + description: 'Development documentation', + version: '0.0.0', + ...documentation.info + } + }, + paths: { + ...filterPaths(schema, { + excludeStaticFile, + exclude: Array.isArray(exclude) ? exclude : [exclude] + }), + ...documentation.paths + }, + components: { + ...documentation.components, + schemas: { + // @ts-ignore + ...app.getGlobalDefinitions?.().type, + ...documentation.components?.schemas + } + } + } satisfies OpenAPIV3.Document + }, + { + detail: { + hide: true + } + } + ) return app } diff --git a/src/types.ts b/src/types.ts index 5370e38..ce16c26 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,117 +3,125 @@ import type { ReferenceConfiguration } from '@scalar/types' import type { SwaggerUIOptions } from './swagger/types' export interface ElysiaSwaggerConfig { - /** - * Customize Swagger config, refers to Swagger 2.0 config - * - * @see https://swagger.io/specification/v2/ - */ - documentation?: Omit< - Partial, - | 'x-express-openapi-additional-middleware' - | 'x-express-openapi-validation-strict' - > - /** - * Choose your provider, Scalar or Swagger UI - * - * @default 'scalar' - * @see https://github.com/scalar/scalar - * @see https://github.com/swagger-api/swagger-ui - */ - provider?: 'scalar' | 'swagger-ui' - /** - * Version to use for Scalar cdn bundle - * - * @default 'latest' - * @see https://github.com/scalar/scalar - */ - scalarVersion?: string - /** - * Optional override to specifying the path for the Scalar bundle - * - * Custom URL or path to locally hosted Scalar bundle - * - * Lease blank to use default jsdeliver.net CDN - * - * @default '' - * @example 'https://unpkg.com/@scalar/api-reference@1.13.10/dist/browser/standalone.js' - * @example '/public/standalone.js' - * @see https://github.com/scalar/scalar - */ - scalarCDN?: string - /** - * Scalar configuration to customize scalar - *' - * @see https://github.com/scalar/scalar/blob/main/documentation/configuration.md - */ - scalarConfig?: ReferenceConfiguration - /** - * Version to use for swagger cdn bundle - * - * @see unpkg.com/swagger-ui-dist - * - * @default 4.18.2 - */ - version?: string - /** - * Determine if Swagger should exclude static files. - * - * @default true - */ - excludeStaticFile?: boolean - /** - * The endpoint to expose Swagger - * - * @default '/swagger' - */ - path?: Path - /** - * Paths to exclude from Swagger endpoint - * - * @default [] - */ - exclude?: string | RegExp | (string | RegExp)[] - /** - * Options to send to SwaggerUIBundle - * Currently, options that are defined as functions such as requestInterceptor - * and onComplete are not supported. - */ - swaggerOptions?: Omit< - Partial, - | 'dom_id' - | 'dom_node' - | 'spec' - | 'url' - | 'urls' - | 'layout' - | 'pluginsOptions' - | 'plugins' - | 'presets' - | 'onComplete' - | 'requestInterceptor' - | 'responseInterceptor' - | 'modelPropertyMacro' - | 'parameterMacro' - > - /** - * Custom Swagger CSS - */ - theme?: string | { - light: string - dark: string - } - /** - * Using poor man dark mode 😭 - */ - autoDarkMode?: boolean + /** + * Customize Swagger config, refers to Swagger 2.0 config + * + * @see https://swagger.io/specification/v2/ + */ + documentation?: Omit< + Partial, + | 'x-express-openapi-additional-middleware' + | 'x-express-openapi-validation-strict' + > + /** + * Choose your provider, Scalar or Swagger UI + * + * @default 'scalar' + * @see https://github.com/scalar/scalar + * @see https://github.com/swagger-api/swagger-ui + */ + provider?: 'scalar' | 'swagger-ui' + /** + * Version to use for Scalar cdn bundle + * + * @default 'latest' + * @see https://github.com/scalar/scalar + */ + scalarVersion?: string + /** + * Optional override to specifying the path for the Scalar bundle + * + * Custom URL or path to locally hosted Scalar bundle + * + * Lease blank to use default jsdeliver.net CDN + * + * @default '' + * @example 'https://unpkg.com/@scalar/api-reference@1.13.10/dist/browser/standalone.js' + * @example '/public/standalone.js' + * @see https://github.com/scalar/scalar + */ + scalarCDN?: string + /** + * Scalar configuration to customize scalar + *' + * @see https://github.com/scalar/scalar/blob/main/documentation/configuration.md + */ + scalarConfig?: ReferenceConfiguration + /** + * Version to use for swagger cdn bundle + * + * @see unpkg.com/swagger-ui-dist + * + * @default 4.18.2 + */ + version?: string + /** + * Determine if Swagger should exclude static files. + * + * @default true + */ + excludeStaticFile?: boolean + /** + * The endpoint to expose OpenAPI Documentation + * + * @default '/swagger' + */ + path?: Path + /** + * The endpoint to expose OpenAPI JSON specification + * + * @default '/${path}/json' + */ + specPath?: string + /** + * Paths to exclude from Swagger endpoint + * + * @default [] + */ + exclude?: string | RegExp | (string | RegExp)[] + /** + * Options to send to SwaggerUIBundle + * Currently, options that are defined as functions such as requestInterceptor + * and onComplete are not supported. + */ + swaggerOptions?: Omit< + Partial, + | 'dom_id' + | 'dom_node' + | 'spec' + | 'url' + | 'urls' + | 'layout' + | 'pluginsOptions' + | 'plugins' + | 'presets' + | 'onComplete' + | 'requestInterceptor' + | 'responseInterceptor' + | 'modelPropertyMacro' + | 'parameterMacro' + > + /** + * Custom Swagger CSS + */ + theme?: + | string + | { + light: string + dark: string + } + /** + * Using poor man dark mode 😭 + */ + autoDarkMode?: boolean - /** - * Exclude methods from Swagger - */ - excludeMethods?: string[] + /** + * Exclude methods from Swagger + */ + excludeMethods?: string[] - /** - * Exclude tags from Swagger or Scalar - */ - excludeTags?: string[] + /** + * Exclude tags from Swagger or Scalar + */ + excludeTags?: string[] } diff --git a/src/utils.ts b/src/utils.ts index 7d4b2f4..6d72107 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -151,11 +151,44 @@ export const registerSchemaPath = ({ }) => { hook = cloneHook(hook) - const contentType = hook?.type ?? [ - 'application/json', - 'multipart/form-data', - 'text/plain' - ] + if (hook.parse && !Array.isArray(hook.parse)) hook.parse = [hook.parse] + + let contentType = (hook.parse as unknown[]) + ?.map((x) => { + switch (typeof x) { + case 'string': + return x + + case 'object': + if (x && typeof x.fn !== 'string') return + + switch (x.fn) { + case 'json': + case 'application/json': + return 'application/json' + + case 'text': + case 'text/plain': + return 'text/plain' + + case 'urlencoded': + case 'application/x-www-form-urlencoded': + return 'application/x-www-form-urlencoded' + + case 'arrayBuffer': + case 'application/octet-stream': + return 'application/octet-stream' + + case 'formdata': + case 'multipart/form-data': + return 'multipart/form-data' + } + } + }) + .filter((x) => !!x) + + if (!contentType || contentType.length === 0) + contentType = ['application/json', 'multipart/form-data', 'text/plain'] path = toOpenAPIPath(path) @@ -331,7 +364,6 @@ export const registerSchemaPath = ({ export const filterPaths = ( paths: Record, - docsPath: string, { excludeStaticFile = true, exclude = [] @@ -342,11 +374,6 @@ export const filterPaths = ( ) => { const newPaths: Record = {} - // exclude docs path and OpenAPI json path - const excludePaths = [`/${docsPath}`, `/${docsPath}/json`].map((p) => - normalize(p) - ) - for (const [key, value] of Object.entries(paths)) if ( !exclude.some((x) => { @@ -354,7 +381,6 @@ export const filterPaths = ( return x.test(key) }) && - !excludePaths.includes(key) && !key.includes('*') && (excludeStaticFile ? !key.includes('.') : true) ) {