bluera-knowledge 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (652) hide show
  1. package/.claude/commands/commit.md +37 -0
  2. package/.claude/hooks/post-edit-check.sh +41 -0
  3. package/.claude/settings.local.json.example +40 -0
  4. package/.claude/skills/atomic-commits/SKILL.md +53 -0
  5. package/.claude-plugin/plugin.json +13 -0
  6. package/.editorconfig +15 -0
  7. package/.github/workflows/auto-release.yml +59 -0
  8. package/.github/workflows/ci.yml +142 -0
  9. package/.github/workflows/release.yml +66 -0
  10. package/.github/workflows/update-marketplace.yml +96 -0
  11. package/.husky/pre-commit +47 -0
  12. package/.husky/pre-push +29 -0
  13. package/.versionrc.json +28 -0
  14. package/CHANGELOG.md +410 -0
  15. package/CLAUDE.md +109 -0
  16. package/LICENSE +21 -0
  17. package/NOTICE +47 -0
  18. package/README.md +1546 -0
  19. package/SECURITY.md +65 -0
  20. package/bun.lock +1758 -0
  21. package/commands/add-folder.md +48 -0
  22. package/commands/add-repo.md +50 -0
  23. package/commands/cancel.md +63 -0
  24. package/commands/check-status.md +78 -0
  25. package/commands/crawl.md +51 -0
  26. package/commands/index.md +48 -0
  27. package/commands/remove-store.md +52 -0
  28. package/commands/search.md +79 -0
  29. package/commands/search.sh +63 -0
  30. package/commands/stores.md +54 -0
  31. package/commands/suggest.md +82 -0
  32. package/dist/chunk-5QMHZUC4.js +3617 -0
  33. package/dist/chunk-5QMHZUC4.js.map +1 -0
  34. package/dist/chunk-BICFAWMN.js +656 -0
  35. package/dist/chunk-BICFAWMN.js.map +1 -0
  36. package/dist/chunk-J7J6LXOJ.js +958 -0
  37. package/dist/chunk-J7J6LXOJ.js.map +1 -0
  38. package/dist/chunk-L2YVNC63.js +59 -0
  39. package/dist/chunk-L2YVNC63.js.map +1 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +1429 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mcp/server.d.ts +15 -0
  44. package/dist/mcp/server.js +11 -0
  45. package/dist/mcp/server.js.map +1 -0
  46. package/dist/watch.service-YAIKKDCF.js +7 -0
  47. package/dist/watch.service-YAIKKDCF.js.map +1 -0
  48. package/dist/workers/background-worker-cli.d.ts +1 -0
  49. package/dist/workers/background-worker-cli.js +310 -0
  50. package/dist/workers/background-worker-cli.js.map +1 -0
  51. package/docs/plans/2024-12-17-ai-search-quality-implementation.md +752 -0
  52. package/docs/plans/2024-12-17-ai-search-quality-testing-design.md +201 -0
  53. package/docs/plans/2025-12-16-bluera-knowledge-cli.md +2951 -0
  54. package/docs/plans/2025-12-16-phase2-features.md +1518 -0
  55. package/docs/plans/2025-12-17-hil-implementation.md +926 -0
  56. package/docs/plans/2025-12-17-hil-quality-testing.md +224 -0
  57. package/docs/plans/2025-12-17-search-quality-phase1-implementation.md +1416 -0
  58. package/docs/plans/2025-12-17-search-quality-testing-v2-design.md +212 -0
  59. package/docs/plans/2025-12-28-ai-agent-optimization.md +1630 -0
  60. package/eslint-rules/require-skip-comment.js +81 -0
  61. package/eslint.config.js +61 -0
  62. package/hooks/check-dependencies.sh +110 -0
  63. package/hooks/format-search-results.py +132 -0
  64. package/hooks/hooks.json +27 -0
  65. package/hooks/job-status-hook.sh +51 -0
  66. package/knip.json +43 -0
  67. package/mcp.plugin.json +12 -0
  68. package/package.json +103 -0
  69. package/python/crawl_worker.py +275 -0
  70. package/python/requirements.txt +2 -0
  71. package/scripts/readme-version-updater.cjs +18 -0
  72. package/skills/advanced-workflows/SKILL.md +273 -0
  73. package/skills/atomic-commits/SKILL.md +77 -0
  74. package/skills/knowledge-search/SKILL.md +54 -0
  75. package/skills/search-optimization/SKILL.md +396 -0
  76. package/skills/store-lifecycle/SKILL.md +470 -0
  77. package/skills/when-to-query/SKILL.md +66 -0
  78. package/src/analysis/ast-parser.test.ts +423 -0
  79. package/src/analysis/ast-parser.ts +192 -0
  80. package/src/analysis/code-graph.test.ts +698 -0
  81. package/src/analysis/code-graph.ts +245 -0
  82. package/src/analysis/dependency-usage-analyzer.test.ts +799 -0
  83. package/src/analysis/dependency-usage-analyzer.ts +405 -0
  84. package/src/analysis/go-ast-parser.test.ts +531 -0
  85. package/src/analysis/go-ast-parser.ts +478 -0
  86. package/src/analysis/parser-factory.test.ts +132 -0
  87. package/src/analysis/parser-factory.ts +44 -0
  88. package/src/analysis/python-ast-parser.test.ts +210 -0
  89. package/src/analysis/python-ast-parser.ts +34 -0
  90. package/src/analysis/repo-url-resolver.test.ts +533 -0
  91. package/src/analysis/repo-url-resolver.ts +233 -0
  92. package/src/analysis/rust-ast-parser.test.ts +568 -0
  93. package/src/analysis/rust-ast-parser.ts +477 -0
  94. package/src/analysis/tree-sitter-parser.test.ts +297 -0
  95. package/src/analysis/tree-sitter-parser.ts +223 -0
  96. package/src/cli/commands/crawl.test.ts +942 -0
  97. package/src/cli/commands/crawl.ts +141 -0
  98. package/src/cli/commands/index-cmd.test.ts +722 -0
  99. package/src/cli/commands/index-cmd.ts +105 -0
  100. package/src/cli/commands/mcp.test.ts +218 -0
  101. package/src/cli/commands/mcp.ts +18 -0
  102. package/src/cli/commands/plugin-api.test.ts +313 -0
  103. package/src/cli/commands/plugin-api.ts +45 -0
  104. package/src/cli/commands/search.test.ts +911 -0
  105. package/src/cli/commands/search.ts +113 -0
  106. package/src/cli/commands/serve.test.ts +329 -0
  107. package/src/cli/commands/serve.ts +28 -0
  108. package/src/cli/commands/setup.test.ts +820 -0
  109. package/src/cli/commands/setup.ts +153 -0
  110. package/src/cli/commands/store.test.ts +1003 -0
  111. package/src/cli/commands/store.ts +167 -0
  112. package/src/cli/index.ts +7 -0
  113. package/src/cli/program.ts +59 -0
  114. package/src/crawl/article-converter.test.ts +604 -0
  115. package/src/crawl/article-converter.ts +98 -0
  116. package/src/crawl/bridge.test.ts +674 -0
  117. package/src/crawl/bridge.ts +236 -0
  118. package/src/crawl/claude-client.test.ts +663 -0
  119. package/src/crawl/claude-client.ts +234 -0
  120. package/src/crawl/intelligent-crawler.test.ts +931 -0
  121. package/src/crawl/intelligent-crawler.ts +428 -0
  122. package/src/crawl/markdown-utils.test.ts +703 -0
  123. package/src/crawl/markdown-utils.ts +228 -0
  124. package/src/crawl/schemas.ts +114 -0
  125. package/src/db/embeddings.test.ts +63 -0
  126. package/src/db/embeddings.ts +69 -0
  127. package/src/db/index.ts +2 -0
  128. package/src/db/lance.test.ts +390 -0
  129. package/src/db/lance.ts +164 -0
  130. package/src/defaults/repos.ts +67 -0
  131. package/src/index.ts +107 -0
  132. package/src/mcp/cache.test.ts +202 -0
  133. package/src/mcp/cache.ts +103 -0
  134. package/src/mcp/commands/index.ts +20 -0
  135. package/src/mcp/commands/job.commands.ts +54 -0
  136. package/src/mcp/commands/meta.commands.ts +54 -0
  137. package/src/mcp/commands/registry.ts +183 -0
  138. package/src/mcp/commands/store.commands.ts +75 -0
  139. package/src/mcp/handlers/execute.handler.test.ts +179 -0
  140. package/src/mcp/handlers/execute.handler.ts +24 -0
  141. package/src/mcp/handlers/index.ts +43 -0
  142. package/src/mcp/handlers/job.handler.test.ts +189 -0
  143. package/src/mcp/handlers/job.handler.ts +116 -0
  144. package/src/mcp/handlers/search.handler.test.ts +334 -0
  145. package/src/mcp/handlers/search.handler.ts +209 -0
  146. package/src/mcp/handlers/store.handler.test.ts +415 -0
  147. package/src/mcp/handlers/store.handler.ts +295 -0
  148. package/src/mcp/schemas/index.test.ts +315 -0
  149. package/src/mcp/schemas/index.ts +138 -0
  150. package/src/mcp/server.test.ts +36 -0
  151. package/src/mcp/server.ts +162 -0
  152. package/src/mcp/types.ts +41 -0
  153. package/src/plugin/commands.test.ts +789 -0
  154. package/src/plugin/commands.ts +257 -0
  155. package/src/plugin/dependency-analyzer.test.ts +380 -0
  156. package/src/plugin/dependency-analyzer.ts +147 -0
  157. package/src/plugin/git-clone.test.ts +332 -0
  158. package/src/plugin/git-clone.ts +57 -0
  159. package/src/server/app.test.ts +752 -0
  160. package/src/server/app.ts +119 -0
  161. package/src/server/index.test.ts +477 -0
  162. package/src/server/index.ts +1 -0
  163. package/src/services/chunking.service.test.ts +363 -0
  164. package/src/services/chunking.service.ts +350 -0
  165. package/src/services/code-graph.service.test.ts +304 -0
  166. package/src/services/code-graph.service.ts +302 -0
  167. package/src/services/code-unit.service.test.ts +596 -0
  168. package/src/services/code-unit.service.ts +115 -0
  169. package/src/services/config.service.test.ts +127 -0
  170. package/src/services/config.service.ts +69 -0
  171. package/src/services/index.service.test.ts +1002 -0
  172. package/src/services/index.service.ts +266 -0
  173. package/src/services/index.ts +75 -0
  174. package/src/services/job.service.test.ts +418 -0
  175. package/src/services/job.service.ts +246 -0
  176. package/src/services/project-root.service.test.ts +506 -0
  177. package/src/services/project-root.service.ts +112 -0
  178. package/src/services/search.service.test.ts +1105 -0
  179. package/src/services/search.service.ts +892 -0
  180. package/src/services/services.test.ts +38 -0
  181. package/src/services/snippet.service.test.ts +205 -0
  182. package/src/services/snippet.service.ts +166 -0
  183. package/src/services/store.service.test.ts +474 -0
  184. package/src/services/store.service.ts +225 -0
  185. package/src/services/watch.service.test.ts +553 -0
  186. package/src/services/watch.service.ts +71 -0
  187. package/src/types/brands.test.ts +45 -0
  188. package/src/types/brands.ts +32 -0
  189. package/src/types/config.ts +79 -0
  190. package/src/types/document.ts +30 -0
  191. package/src/types/index.ts +66 -0
  192. package/src/types/job.ts +46 -0
  193. package/src/types/progress.ts +9 -0
  194. package/src/types/result.test.ts +44 -0
  195. package/src/types/result.ts +41 -0
  196. package/src/types/search.ts +95 -0
  197. package/src/types/store.test.ts +69 -0
  198. package/src/types/store.ts +47 -0
  199. package/src/utils/type-guards.test.ts +346 -0
  200. package/src/utils/type-guards.ts +61 -0
  201. package/src/workers/background-worker-cli.ts +105 -0
  202. package/src/workers/background-worker.test.ts +178 -0
  203. package/src/workers/background-worker.ts +294 -0
  204. package/src/workers/spawn-worker.test.ts +128 -0
  205. package/src/workers/spawn-worker.ts +49 -0
  206. package/tests/analysis/ast-parser.test.ts +98 -0
  207. package/tests/analysis/code-graph.test.ts +60 -0
  208. package/tests/fixtures/README.md +114 -0
  209. package/tests/fixtures/code-snippets/api/error-handling.ts +267 -0
  210. package/tests/fixtures/code-snippets/api/rest-controller.ts +303 -0
  211. package/tests/fixtures/code-snippets/auth/jwt-auth.ts +213 -0
  212. package/tests/fixtures/code-snippets/auth/oauth-flow.ts +245 -0
  213. package/tests/fixtures/code-snippets/database/repository-pattern.ts +272 -0
  214. package/tests/fixtures/corpus/VERSION.md +25 -0
  215. package/tests/fixtures/corpus/articles/jwt-authentication.md +97 -0
  216. package/tests/fixtures/corpus/articles/react-hooks-patterns.md +127 -0
  217. package/tests/fixtures/corpus/articles/typescript-generics.md +111 -0
  218. package/tests/fixtures/corpus/documentation/express-middleware.md +71 -0
  219. package/tests/fixtures/corpus/documentation/express-routing.md +83 -0
  220. package/tests/fixtures/corpus/documentation/node-streams.md +78 -0
  221. package/tests/fixtures/corpus/oss-repos/express/History.md +3871 -0
  222. package/tests/fixtures/corpus/oss-repos/express/LICENSE +24 -0
  223. package/tests/fixtures/corpus/oss-repos/express/Readme.md +276 -0
  224. package/tests/fixtures/corpus/oss-repos/express/SECURITY.md +56 -0
  225. package/tests/fixtures/corpus/oss-repos/express/benchmarks/Makefile +17 -0
  226. package/tests/fixtures/corpus/oss-repos/express/benchmarks/README.md +34 -0
  227. package/tests/fixtures/corpus/oss-repos/express/benchmarks/middleware.js +20 -0
  228. package/tests/fixtures/corpus/oss-repos/express/benchmarks/run +18 -0
  229. package/tests/fixtures/corpus/oss-repos/express/examples/README.md +29 -0
  230. package/tests/fixtures/corpus/oss-repos/express/examples/auth/index.js +134 -0
  231. package/tests/fixtures/corpus/oss-repos/express/examples/auth/views/foot.ejs +2 -0
  232. package/tests/fixtures/corpus/oss-repos/express/examples/auth/views/head.ejs +20 -0
  233. package/tests/fixtures/corpus/oss-repos/express/examples/auth/views/login.ejs +21 -0
  234. package/tests/fixtures/corpus/oss-repos/express/examples/content-negotiation/db.js +9 -0
  235. package/tests/fixtures/corpus/oss-repos/express/examples/content-negotiation/index.js +46 -0
  236. package/tests/fixtures/corpus/oss-repos/express/examples/content-negotiation/users.js +19 -0
  237. package/tests/fixtures/corpus/oss-repos/express/examples/cookie-sessions/index.js +25 -0
  238. package/tests/fixtures/corpus/oss-repos/express/examples/cookies/index.js +53 -0
  239. package/tests/fixtures/corpus/oss-repos/express/examples/downloads/files/CCTV/345/244/247/350/265/233/344/270/212/346/265/267/345/210/206/350/265/233/345/214/272.txt +2 -0
  240. package/tests/fixtures/corpus/oss-repos/express/examples/downloads/files/amazing.txt +1 -0
  241. package/tests/fixtures/corpus/oss-repos/express/examples/downloads/files/notes/groceries.txt +3 -0
  242. package/tests/fixtures/corpus/oss-repos/express/examples/downloads/index.js +40 -0
  243. package/tests/fixtures/corpus/oss-repos/express/examples/ejs/index.js +57 -0
  244. package/tests/fixtures/corpus/oss-repos/express/examples/ejs/public/stylesheets/style.css +4 -0
  245. package/tests/fixtures/corpus/oss-repos/express/examples/ejs/views/footer.html +2 -0
  246. package/tests/fixtures/corpus/oss-repos/express/examples/ejs/views/header.html +9 -0
  247. package/tests/fixtures/corpus/oss-repos/express/examples/ejs/views/users.html +10 -0
  248. package/tests/fixtures/corpus/oss-repos/express/examples/error/index.js +53 -0
  249. package/tests/fixtures/corpus/oss-repos/express/examples/error-pages/index.js +103 -0
  250. package/tests/fixtures/corpus/oss-repos/express/examples/error-pages/views/404.ejs +3 -0
  251. package/tests/fixtures/corpus/oss-repos/express/examples/error-pages/views/500.ejs +8 -0
  252. package/tests/fixtures/corpus/oss-repos/express/examples/error-pages/views/error_header.ejs +10 -0
  253. package/tests/fixtures/corpus/oss-repos/express/examples/error-pages/views/footer.ejs +2 -0
  254. package/tests/fixtures/corpus/oss-repos/express/examples/error-pages/views/index.ejs +20 -0
  255. package/tests/fixtures/corpus/oss-repos/express/examples/hello-world/index.js +15 -0
  256. package/tests/fixtures/corpus/oss-repos/express/examples/markdown/index.js +44 -0
  257. package/tests/fixtures/corpus/oss-repos/express/examples/markdown/views/index.md +4 -0
  258. package/tests/fixtures/corpus/oss-repos/express/examples/multi-router/controllers/api_v1.js +15 -0
  259. package/tests/fixtures/corpus/oss-repos/express/examples/multi-router/controllers/api_v2.js +15 -0
  260. package/tests/fixtures/corpus/oss-repos/express/examples/multi-router/index.js +18 -0
  261. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/main/index.js +5 -0
  262. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/pet/index.js +31 -0
  263. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/pet/views/edit.ejs +17 -0
  264. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/pet/views/show.ejs +15 -0
  265. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/user/index.js +41 -0
  266. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/user/views/edit.hbs +27 -0
  267. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/user/views/list.hbs +18 -0
  268. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/user/views/show.hbs +31 -0
  269. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/controllers/user-pet/index.js +22 -0
  270. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/db.js +16 -0
  271. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/index.js +95 -0
  272. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/lib/boot.js +83 -0
  273. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/public/style.css +14 -0
  274. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/views/404.ejs +13 -0
  275. package/tests/fixtures/corpus/oss-repos/express/examples/mvc/views/5xx.ejs +13 -0
  276. package/tests/fixtures/corpus/oss-repos/express/examples/online/index.js +61 -0
  277. package/tests/fixtures/corpus/oss-repos/express/examples/params/index.js +74 -0
  278. package/tests/fixtures/corpus/oss-repos/express/examples/resource/index.js +95 -0
  279. package/tests/fixtures/corpus/oss-repos/express/examples/route-map/index.js +75 -0
  280. package/tests/fixtures/corpus/oss-repos/express/examples/route-middleware/index.js +90 -0
  281. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/index.js +55 -0
  282. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/post.js +13 -0
  283. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/public/style.css +24 -0
  284. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/site.js +5 -0
  285. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/user.js +47 -0
  286. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/footer.ejs +2 -0
  287. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/header.ejs +9 -0
  288. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/index.ejs +10 -0
  289. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/posts/index.ejs +12 -0
  290. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/users/edit.ejs +23 -0
  291. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/users/index.ejs +14 -0
  292. package/tests/fixtures/corpus/oss-repos/express/examples/route-separation/views/users/view.ejs +9 -0
  293. package/tests/fixtures/corpus/oss-repos/express/examples/search/index.js +61 -0
  294. package/tests/fixtures/corpus/oss-repos/express/examples/search/public/client.js +15 -0
  295. package/tests/fixtures/corpus/oss-repos/express/examples/search/public/index.html +21 -0
  296. package/tests/fixtures/corpus/oss-repos/express/examples/session/index.js +37 -0
  297. package/tests/fixtures/corpus/oss-repos/express/examples/session/redis.js +39 -0
  298. package/tests/fixtures/corpus/oss-repos/express/examples/static-files/index.js +43 -0
  299. package/tests/fixtures/corpus/oss-repos/express/examples/static-files/public/css/style.css +3 -0
  300. package/tests/fixtures/corpus/oss-repos/express/examples/static-files/public/hello.txt +1 -0
  301. package/tests/fixtures/corpus/oss-repos/express/examples/static-files/public/js/app.js +1 -0
  302. package/tests/fixtures/corpus/oss-repos/express/examples/vhost/index.js +53 -0
  303. package/tests/fixtures/corpus/oss-repos/express/examples/view-constructor/github-view.js +53 -0
  304. package/tests/fixtures/corpus/oss-repos/express/examples/view-constructor/index.js +48 -0
  305. package/tests/fixtures/corpus/oss-repos/express/examples/view-locals/index.js +155 -0
  306. package/tests/fixtures/corpus/oss-repos/express/examples/view-locals/user.js +36 -0
  307. package/tests/fixtures/corpus/oss-repos/express/examples/view-locals/views/index.ejs +20 -0
  308. package/tests/fixtures/corpus/oss-repos/express/examples/web-service/index.js +117 -0
  309. package/tests/fixtures/corpus/oss-repos/express/index.js +11 -0
  310. package/tests/fixtures/corpus/oss-repos/express/lib/application.js +631 -0
  311. package/tests/fixtures/corpus/oss-repos/express/lib/express.js +81 -0
  312. package/tests/fixtures/corpus/oss-repos/express/lib/request.js +514 -0
  313. package/tests/fixtures/corpus/oss-repos/express/lib/response.js +1053 -0
  314. package/tests/fixtures/corpus/oss-repos/express/lib/utils.js +271 -0
  315. package/tests/fixtures/corpus/oss-repos/express/lib/view.js +205 -0
  316. package/tests/fixtures/corpus/oss-repos/express/package.json +99 -0
  317. package/tests/fixtures/corpus/oss-repos/express/test/Route.js +274 -0
  318. package/tests/fixtures/corpus/oss-repos/express/test/Router.js +636 -0
  319. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/auth.js +117 -0
  320. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/content-negotiation.js +49 -0
  321. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/cookie-sessions.js +38 -0
  322. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/cookies.js +71 -0
  323. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/downloads.js +47 -0
  324. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/ejs.js +17 -0
  325. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/error-pages.js +99 -0
  326. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/error.js +29 -0
  327. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/hello-world.js +21 -0
  328. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/markdown.js +21 -0
  329. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/multi-router.js +44 -0
  330. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/mvc.js +132 -0
  331. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/params.js +44 -0
  332. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/resource.js +68 -0
  333. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/route-map.js +45 -0
  334. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/route-separation.js +97 -0
  335. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/vhost.js +46 -0
  336. package/tests/fixtures/corpus/oss-repos/express/test/acceptance/web-service.js +105 -0
  337. package/tests/fixtures/corpus/oss-repos/express/test/app.all.js +38 -0
  338. package/tests/fixtures/corpus/oss-repos/express/test/app.engine.js +83 -0
  339. package/tests/fixtures/corpus/oss-repos/express/test/app.head.js +66 -0
  340. package/tests/fixtures/corpus/oss-repos/express/test/app.js +120 -0
  341. package/tests/fixtures/corpus/oss-repos/express/test/app.listen.js +55 -0
  342. package/tests/fixtures/corpus/oss-repos/express/test/app.locals.js +26 -0
  343. package/tests/fixtures/corpus/oss-repos/express/test/app.options.js +116 -0
  344. package/tests/fixtures/corpus/oss-repos/express/test/app.param.js +323 -0
  345. package/tests/fixtures/corpus/oss-repos/express/test/app.render.js +374 -0
  346. package/tests/fixtures/corpus/oss-repos/express/test/app.request.js +143 -0
  347. package/tests/fixtures/corpus/oss-repos/express/test/app.response.js +143 -0
  348. package/tests/fixtures/corpus/oss-repos/express/test/app.route.js +197 -0
  349. package/tests/fixtures/corpus/oss-repos/express/test/app.router.js +1217 -0
  350. package/tests/fixtures/corpus/oss-repos/express/test/app.routes.error.js +62 -0
  351. package/tests/fixtures/corpus/oss-repos/express/test/app.use.js +542 -0
  352. package/tests/fixtures/corpus/oss-repos/express/test/config.js +207 -0
  353. package/tests/fixtures/corpus/oss-repos/express/test/exports.js +82 -0
  354. package/tests/fixtures/corpus/oss-repos/express/test/express.json.js +755 -0
  355. package/tests/fixtures/corpus/oss-repos/express/test/express.raw.js +513 -0
  356. package/tests/fixtures/corpus/oss-repos/express/test/express.static.js +815 -0
  357. package/tests/fixtures/corpus/oss-repos/express/test/express.text.js +566 -0
  358. package/tests/fixtures/corpus/oss-repos/express/test/express.urlencoded.js +828 -0
  359. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/% of dogs.txt +1 -0
  360. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/.name +1 -0
  361. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/blog/index.html +1 -0
  362. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/blog/post/index.tmpl +1 -0
  363. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/broken.send +0 -0
  364. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/default_layout/name.tmpl +1 -0
  365. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/default_layout/user.tmpl +1 -0
  366. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/email.tmpl +1 -0
  367. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/empty.txt +0 -0
  368. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/local_layout/user.tmpl +1 -0
  369. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/name.tmpl +1 -0
  370. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/name.txt +1 -0
  371. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/nums.txt +1 -0
  372. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/pets/names.txt +1 -0
  373. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/snow /342/230/203/.gitkeep +0 -0
  374. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/todo.html +1 -0
  375. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/todo.txt +1 -0
  376. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/user.html +1 -0
  377. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/user.tmpl +1 -0
  378. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/users/index.html +1 -0
  379. package/tests/fixtures/corpus/oss-repos/express/test/fixtures/users/tobi.txt +1 -0
  380. package/tests/fixtures/corpus/oss-repos/express/test/middleware.basic.js +42 -0
  381. package/tests/fixtures/corpus/oss-repos/express/test/regression.js +20 -0
  382. package/tests/fixtures/corpus/oss-repos/express/test/req.accepts.js +125 -0
  383. package/tests/fixtures/corpus/oss-repos/express/test/req.acceptsCharsets.js +50 -0
  384. package/tests/fixtures/corpus/oss-repos/express/test/req.acceptsEncodings.js +39 -0
  385. package/tests/fixtures/corpus/oss-repos/express/test/req.acceptsLanguages.js +57 -0
  386. package/tests/fixtures/corpus/oss-repos/express/test/req.baseUrl.js +88 -0
  387. package/tests/fixtures/corpus/oss-repos/express/test/req.fresh.js +70 -0
  388. package/tests/fixtures/corpus/oss-repos/express/test/req.get.js +60 -0
  389. package/tests/fixtures/corpus/oss-repos/express/test/req.host.js +156 -0
  390. package/tests/fixtures/corpus/oss-repos/express/test/req.hostname.js +188 -0
  391. package/tests/fixtures/corpus/oss-repos/express/test/req.ip.js +113 -0
  392. package/tests/fixtures/corpus/oss-repos/express/test/req.ips.js +71 -0
  393. package/tests/fixtures/corpus/oss-repos/express/test/req.is.js +169 -0
  394. package/tests/fixtures/corpus/oss-repos/express/test/req.path.js +20 -0
  395. package/tests/fixtures/corpus/oss-repos/express/test/req.protocol.js +113 -0
  396. package/tests/fixtures/corpus/oss-repos/express/test/req.query.js +106 -0
  397. package/tests/fixtures/corpus/oss-repos/express/test/req.range.js +104 -0
  398. package/tests/fixtures/corpus/oss-repos/express/test/req.route.js +28 -0
  399. package/tests/fixtures/corpus/oss-repos/express/test/req.secure.js +101 -0
  400. package/tests/fixtures/corpus/oss-repos/express/test/req.signedCookies.js +37 -0
  401. package/tests/fixtures/corpus/oss-repos/express/test/req.stale.js +50 -0
  402. package/tests/fixtures/corpus/oss-repos/express/test/req.subdomains.js +173 -0
  403. package/tests/fixtures/corpus/oss-repos/express/test/req.xhr.js +42 -0
  404. package/tests/fixtures/corpus/oss-repos/express/test/res.append.js +116 -0
  405. package/tests/fixtures/corpus/oss-repos/express/test/res.attachment.js +79 -0
  406. package/tests/fixtures/corpus/oss-repos/express/test/res.clearCookie.js +62 -0
  407. package/tests/fixtures/corpus/oss-repos/express/test/res.cookie.js +295 -0
  408. package/tests/fixtures/corpus/oss-repos/express/test/res.download.js +487 -0
  409. package/tests/fixtures/corpus/oss-repos/express/test/res.format.js +248 -0
  410. package/tests/fixtures/corpus/oss-repos/express/test/res.get.js +21 -0
  411. package/tests/fixtures/corpus/oss-repos/express/test/res.json.js +186 -0
  412. package/tests/fixtures/corpus/oss-repos/express/test/res.jsonp.js +344 -0
  413. package/tests/fixtures/corpus/oss-repos/express/test/res.links.js +65 -0
  414. package/tests/fixtures/corpus/oss-repos/express/test/res.locals.js +40 -0
  415. package/tests/fixtures/corpus/oss-repos/express/test/res.location.js +316 -0
  416. package/tests/fixtures/corpus/oss-repos/express/test/res.redirect.js +214 -0
  417. package/tests/fixtures/corpus/oss-repos/express/test/res.render.js +367 -0
  418. package/tests/fixtures/corpus/oss-repos/express/test/res.send.js +569 -0
  419. package/tests/fixtures/corpus/oss-repos/express/test/res.sendFile.js +913 -0
  420. package/tests/fixtures/corpus/oss-repos/express/test/res.sendStatus.js +44 -0
  421. package/tests/fixtures/corpus/oss-repos/express/test/res.set.js +124 -0
  422. package/tests/fixtures/corpus/oss-repos/express/test/res.status.js +206 -0
  423. package/tests/fixtures/corpus/oss-repos/express/test/res.type.js +46 -0
  424. package/tests/fixtures/corpus/oss-repos/express/test/res.vary.js +90 -0
  425. package/tests/fixtures/corpus/oss-repos/express/test/support/env.js +3 -0
  426. package/tests/fixtures/corpus/oss-repos/express/test/support/tmpl.js +36 -0
  427. package/tests/fixtures/corpus/oss-repos/express/test/support/utils.js +86 -0
  428. package/tests/fixtures/corpus/oss-repos/express/test/utils.js +83 -0
  429. package/tests/fixtures/corpus/oss-repos/hono/.devcontainer/Dockerfile +11 -0
  430. package/tests/fixtures/corpus/oss-repos/hono/.devcontainer/devcontainer.json +21 -0
  431. package/tests/fixtures/corpus/oss-repos/hono/.devcontainer/docker-compose.yml +18 -0
  432. package/tests/fixtures/corpus/oss-repos/hono/.eslintignore +1 -0
  433. package/tests/fixtures/corpus/oss-repos/hono/.eslintrc.cjs +9 -0
  434. package/tests/fixtures/corpus/oss-repos/hono/.gitpod.yml +9 -0
  435. package/tests/fixtures/corpus/oss-repos/hono/.prettierrc +9 -0
  436. package/tests/fixtures/corpus/oss-repos/hono/.vitest.config/jsx-runtime-default.ts +15 -0
  437. package/tests/fixtures/corpus/oss-repos/hono/.vitest.config/jsx-runtime-dom.ts +15 -0
  438. package/tests/fixtures/corpus/oss-repos/hono/.vitest.config/setup-vitest.ts +47 -0
  439. package/tests/fixtures/corpus/oss-repos/hono/LICENSE +21 -0
  440. package/tests/fixtures/corpus/oss-repos/hono/README.md +91 -0
  441. package/tests/fixtures/corpus/oss-repos/hono/build.ts +80 -0
  442. package/tests/fixtures/corpus/oss-repos/hono/bun.lockb +0 -0
  443. package/tests/fixtures/corpus/oss-repos/hono/bunfig.toml +7 -0
  444. package/tests/fixtures/corpus/oss-repos/hono/codecov.yml +13 -0
  445. package/tests/fixtures/corpus/oss-repos/hono/docs/CODE_OF_CONDUCT.md +128 -0
  446. package/tests/fixtures/corpus/oss-repos/hono/docs/CONTRIBUTING.md +62 -0
  447. package/tests/fixtures/corpus/oss-repos/hono/docs/MIGRATION.md +295 -0
  448. package/tests/fixtures/corpus/oss-repos/hono/docs/images/hono-logo.png +0 -0
  449. package/tests/fixtures/corpus/oss-repos/hono/docs/images/hono-logo.pxm +0 -0
  450. package/tests/fixtures/corpus/oss-repos/hono/docs/images/hono-logo.svg +6 -0
  451. package/tests/fixtures/corpus/oss-repos/hono/docs/images/hono-title.png +0 -0
  452. package/tests/fixtures/corpus/oss-repos/hono/docs/images/hono-title.pxm +0 -0
  453. package/tests/fixtures/corpus/oss-repos/hono/jsr.json +119 -0
  454. package/tests/fixtures/corpus/oss-repos/hono/package.cjs.json +3 -0
  455. package/tests/fixtures/corpus/oss-repos/hono/package.json +650 -0
  456. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/aws-lambda/handler.ts +492 -0
  457. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/aws-lambda/index.ts +13 -0
  458. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/aws-lambda/types.ts +144 -0
  459. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/bun/conninfo.ts +28 -0
  460. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/bun/index.ts +9 -0
  461. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/bun/serve-static.ts +35 -0
  462. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/bun/server.ts +30 -0
  463. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/bun/ssg.ts +27 -0
  464. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/bun/websocket.ts +110 -0
  465. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-pages/handler.ts +120 -0
  466. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-pages/index.ts +7 -0
  467. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-workers/conninfo.ts +7 -0
  468. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-workers/index.ts +8 -0
  469. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-workers/serve-static-module.ts +12 -0
  470. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-workers/serve-static.ts +39 -0
  471. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-workers/utils.ts +50 -0
  472. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/cloudflare-workers/websocket.ts +50 -0
  473. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/deno/conninfo.ts +17 -0
  474. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/deno/deno.d.ts +28 -0
  475. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/deno/index.ts +9 -0
  476. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/deno/serve-static.ts +40 -0
  477. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/deno/ssg.ts +27 -0
  478. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/deno/websocket.ts +51 -0
  479. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/lambda-edge/conninfo.ts +15 -0
  480. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/lambda-edge/handler.ts +189 -0
  481. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/lambda-edge/index.ts +14 -0
  482. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/netlify/handler.ts +10 -0
  483. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/netlify/index.ts +6 -0
  484. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/netlify/mod.ts +1 -0
  485. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/service-worker/handler.ts +34 -0
  486. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/service-worker/index.ts +5 -0
  487. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/service-worker/types.ts +14 -0
  488. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/vercel/conninfo.ts +8 -0
  489. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/vercel/handler.ts +9 -0
  490. package/tests/fixtures/corpus/oss-repos/hono/src/adapter/vercel/index.ts +7 -0
  491. package/tests/fixtures/corpus/oss-repos/hono/src/client/client.ts +214 -0
  492. package/tests/fixtures/corpus/oss-repos/hono/src/client/index.ts +14 -0
  493. package/tests/fixtures/corpus/oss-repos/hono/src/client/types.ts +180 -0
  494. package/tests/fixtures/corpus/oss-repos/hono/src/client/utils.ts +54 -0
  495. package/tests/fixtures/corpus/oss-repos/hono/src/compose.ts +94 -0
  496. package/tests/fixtures/corpus/oss-repos/hono/src/context.ts +914 -0
  497. package/tests/fixtures/corpus/oss-repos/hono/src/helper/accepts/accepts.ts +81 -0
  498. package/tests/fixtures/corpus/oss-repos/hono/src/helper/accepts/index.ts +6 -0
  499. package/tests/fixtures/corpus/oss-repos/hono/src/helper/adapter/index.ts +85 -0
  500. package/tests/fixtures/corpus/oss-repos/hono/src/helper/conninfo/index.ts +6 -0
  501. package/tests/fixtures/corpus/oss-repos/hono/src/helper/conninfo/types.ts +45 -0
  502. package/tests/fixtures/corpus/oss-repos/hono/src/helper/cookie/index.ts +130 -0
  503. package/tests/fixtures/corpus/oss-repos/hono/src/helper/css/common.ts +243 -0
  504. package/tests/fixtures/corpus/oss-repos/hono/src/helper/css/index.ts +220 -0
  505. package/tests/fixtures/corpus/oss-repos/hono/src/helper/dev/index.ts +79 -0
  506. package/tests/fixtures/corpus/oss-repos/hono/src/helper/factory/index.ts +246 -0
  507. package/tests/fixtures/corpus/oss-repos/hono/src/helper/html/index.ts +56 -0
  508. package/tests/fixtures/corpus/oss-repos/hono/src/helper/ssg/index.ts +13 -0
  509. package/tests/fixtures/corpus/oss-repos/hono/src/helper/ssg/middleware.ts +79 -0
  510. package/tests/fixtures/corpus/oss-repos/hono/src/helper/ssg/ssg.ts +388 -0
  511. package/tests/fixtures/corpus/oss-repos/hono/src/helper/ssg/utils.ts +71 -0
  512. package/tests/fixtures/corpus/oss-repos/hono/src/helper/streaming/index.ts +9 -0
  513. package/tests/fixtures/corpus/oss-repos/hono/src/helper/streaming/sse.ts +89 -0
  514. package/tests/fixtures/corpus/oss-repos/hono/src/helper/streaming/stream.ts +36 -0
  515. package/tests/fixtures/corpus/oss-repos/hono/src/helper/streaming/text.ts +15 -0
  516. package/tests/fixtures/corpus/oss-repos/hono/src/helper/testing/index.ts +26 -0
  517. package/tests/fixtures/corpus/oss-repos/hono/src/helper/websocket/index.ts +57 -0
  518. package/tests/fixtures/corpus/oss-repos/hono/src/hono-base.ts +523 -0
  519. package/tests/fixtures/corpus/oss-repos/hono/src/hono.ts +34 -0
  520. package/tests/fixtures/corpus/oss-repos/hono/src/http-exception.ts +78 -0
  521. package/tests/fixtures/corpus/oss-repos/hono/src/index.ts +51 -0
  522. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/base.ts +419 -0
  523. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/children.ts +20 -0
  524. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/components.ts +195 -0
  525. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/constants.ts +5 -0
  526. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/context.ts +50 -0
  527. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/client.ts +89 -0
  528. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/components.ts +39 -0
  529. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/context.ts +52 -0
  530. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/css.ts +246 -0
  531. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/hooks/index.ts +91 -0
  532. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/index.ts +159 -0
  533. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/intrinsic-element/components.ts +398 -0
  534. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/jsx-dev-runtime.ts +22 -0
  535. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/jsx-runtime.ts +7 -0
  536. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/render.ts +772 -0
  537. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/server.ts +70 -0
  538. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/dom/utils.ts +7 -0
  539. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/hooks/index.ts +426 -0
  540. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/index.ts +114 -0
  541. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/intrinsic-element/common.ts +11 -0
  542. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/intrinsic-element/components.ts +196 -0
  543. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/intrinsic-elements.ts +924 -0
  544. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/jsx-dev-runtime.ts +26 -0
  545. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/jsx-runtime.ts +18 -0
  546. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/streaming.ts +184 -0
  547. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/types.ts +41 -0
  548. package/tests/fixtures/corpus/oss-repos/hono/src/jsx/utils.ts +36 -0
  549. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/basic-auth/index.ts +128 -0
  550. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/bearer-auth/index.ts +159 -0
  551. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/body-limit/index.ts +115 -0
  552. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/cache/index.ts +127 -0
  553. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/combine/index.ts +153 -0
  554. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/compress/index.ts +79 -0
  555. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/context-storage/index.ts +55 -0
  556. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/cors/index.ts +141 -0
  557. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/csrf/index.ts +90 -0
  558. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/etag/index.ts +88 -0
  559. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/ip-restriction/index.ts +178 -0
  560. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/jsx-renderer/index.ts +158 -0
  561. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/jwt/index.ts +8 -0
  562. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/jwt/jwt.ts +159 -0
  563. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/logger/index.ts +93 -0
  564. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/method-override/index.ts +146 -0
  565. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/powered-by/index.ts +13 -0
  566. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/pretty-json/index.ts +50 -0
  567. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/request-id/index.ts +8 -0
  568. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/request-id/request-id.ts +59 -0
  569. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/secure-headers/index.ts +8 -0
  570. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/secure-headers/permissions-policy.ts +86 -0
  571. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/secure-headers/secure-headers.ts +319 -0
  572. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/serve-static/index.ts +140 -0
  573. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/timeout/index.ts +58 -0
  574. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/timing/index.ts +7 -0
  575. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/timing/timing.ts +225 -0
  576. package/tests/fixtures/corpus/oss-repos/hono/src/middleware/trailing-slash/index.ts +71 -0
  577. package/tests/fixtures/corpus/oss-repos/hono/src/preset/quick.ts +24 -0
  578. package/tests/fixtures/corpus/oss-repos/hono/src/preset/tiny.ts +20 -0
  579. package/tests/fixtures/corpus/oss-repos/hono/src/request.ts +403 -0
  580. package/tests/fixtures/corpus/oss-repos/hono/src/router/linear-router/index.ts +6 -0
  581. package/tests/fixtures/corpus/oss-repos/hono/src/router/linear-router/router.ts +132 -0
  582. package/tests/fixtures/corpus/oss-repos/hono/src/router/pattern-router/index.ts +6 -0
  583. package/tests/fixtures/corpus/oss-repos/hono/src/router/pattern-router/router.ts +54 -0
  584. package/tests/fixtures/corpus/oss-repos/hono/src/router/reg-exp-router/index.ts +6 -0
  585. package/tests/fixtures/corpus/oss-repos/hono/src/router/reg-exp-router/node.ts +159 -0
  586. package/tests/fixtures/corpus/oss-repos/hono/src/router/reg-exp-router/router.ts +274 -0
  587. package/tests/fixtures/corpus/oss-repos/hono/src/router/reg-exp-router/trie.ts +74 -0
  588. package/tests/fixtures/corpus/oss-repos/hono/src/router/smart-router/index.ts +6 -0
  589. package/tests/fixtures/corpus/oss-repos/hono/src/router/smart-router/router.ts +69 -0
  590. package/tests/fixtures/corpus/oss-repos/hono/src/router/trie-router/index.ts +6 -0
  591. package/tests/fixtures/corpus/oss-repos/hono/src/router/trie-router/node.ts +205 -0
  592. package/tests/fixtures/corpus/oss-repos/hono/src/router/trie-router/router.ts +28 -0
  593. package/tests/fixtures/corpus/oss-repos/hono/src/router.ts +103 -0
  594. package/tests/fixtures/corpus/oss-repos/hono/src/types.ts +2009 -0
  595. package/tests/fixtures/corpus/oss-repos/hono/src/utils/basic-auth.ts +26 -0
  596. package/tests/fixtures/corpus/oss-repos/hono/src/utils/body.ts +225 -0
  597. package/tests/fixtures/corpus/oss-repos/hono/src/utils/buffer.ts +65 -0
  598. package/tests/fixtures/corpus/oss-repos/hono/src/utils/color.ts +26 -0
  599. package/tests/fixtures/corpus/oss-repos/hono/src/utils/concurrent.ts +55 -0
  600. package/tests/fixtures/corpus/oss-repos/hono/src/utils/cookie.ts +230 -0
  601. package/tests/fixtures/corpus/oss-repos/hono/src/utils/crypto.ts +65 -0
  602. package/tests/fixtures/corpus/oss-repos/hono/src/utils/encode.ts +34 -0
  603. package/tests/fixtures/corpus/oss-repos/hono/src/utils/filepath.ts +56 -0
  604. package/tests/fixtures/corpus/oss-repos/hono/src/utils/handler.ts +15 -0
  605. package/tests/fixtures/corpus/oss-repos/hono/src/utils/html.ts +182 -0
  606. package/tests/fixtures/corpus/oss-repos/hono/src/utils/http-status.ts +69 -0
  607. package/tests/fixtures/corpus/oss-repos/hono/src/utils/ipaddr.ts +113 -0
  608. package/tests/fixtures/corpus/oss-repos/hono/src/utils/jwt/index.ts +7 -0
  609. package/tests/fixtures/corpus/oss-repos/hono/src/utils/jwt/jwa.ts +23 -0
  610. package/tests/fixtures/corpus/oss-repos/hono/src/utils/jwt/jws.ts +226 -0
  611. package/tests/fixtures/corpus/oss-repos/hono/src/utils/jwt/jwt.ts +114 -0
  612. package/tests/fixtures/corpus/oss-repos/hono/src/utils/jwt/types.ts +83 -0
  613. package/tests/fixtures/corpus/oss-repos/hono/src/utils/jwt/utf8.ts +7 -0
  614. package/tests/fixtures/corpus/oss-repos/hono/src/utils/mime.ts +142 -0
  615. package/tests/fixtures/corpus/oss-repos/hono/src/utils/stream.ts +96 -0
  616. package/tests/fixtures/corpus/oss-repos/hono/src/utils/types.ts +105 -0
  617. package/tests/fixtures/corpus/oss-repos/hono/src/utils/url.ts +310 -0
  618. package/tests/fixtures/corpus/oss-repos/hono/src/validator/index.ts +7 -0
  619. package/tests/fixtures/corpus/oss-repos/hono/src/validator/validator.ts +151 -0
  620. package/tests/fixtures/corpus/oss-repos/hono/tsconfig.build.json +23 -0
  621. package/tests/fixtures/corpus/oss-repos/hono/tsconfig.json +28 -0
  622. package/tests/fixtures/corpus/oss-repos/hono/vitest.config.ts +34 -0
  623. package/tests/fixtures/corpus/oss-repos/hono/yarn.lock +6232 -0
  624. package/tests/fixtures/documentation/api-reference.md +412 -0
  625. package/tests/fixtures/documentation/architecture.md +214 -0
  626. package/tests/fixtures/documentation/deployment-guide.md +420 -0
  627. package/tests/fixtures/github-readmes/express.md +133 -0
  628. package/tests/fixtures/github-readmes/nextjs.md +106 -0
  629. package/tests/fixtures/github-readmes/react.md +74 -0
  630. package/tests/fixtures/github-readmes/typescript.md +93 -0
  631. package/tests/fixtures/github-readmes/vite.md +79 -0
  632. package/tests/fixtures/queries/core.json +125 -0
  633. package/tests/fixtures/queries/extended.json +427 -0
  634. package/tests/fixtures/queries/generated/.gitkeep +0 -0
  635. package/tests/fixtures/test-server.ts +267 -0
  636. package/tests/helpers/performance-metrics.ts +387 -0
  637. package/tests/helpers/search-relevance.ts +381 -0
  638. package/tests/integration/cli-consistency.test.ts +299 -0
  639. package/tests/integration/cli.test.ts +69 -0
  640. package/tests/integration/e2e-workflow.test.ts +612 -0
  641. package/tests/integration/python-bridge.test.ts +183 -0
  642. package/tests/integration/search-quality.test.ts +718 -0
  643. package/tests/integration/stress.test.ts +326 -0
  644. package/tests/mcp/server.test.ts +15 -0
  645. package/tests/scripts/schemas/evaluation.json +44 -0
  646. package/tests/scripts/schemas/query-generation.json +21 -0
  647. package/tests/services/code-unit.service.test.ts +47 -0
  648. package/tests/services/search.progressive-context.test.ts +35 -0
  649. package/tsconfig.json +34 -0
  650. package/tsup.config.ts +15 -0
  651. package/turndown-plugin-gfm.d.ts +29 -0
  652. package/vitest.config.ts +79 -0
@@ -0,0 +1,914 @@
1
+ import { HonoRequest } from './request'
2
+ import type { Result } from './router'
3
+ import type {
4
+ Env,
5
+ FetchEventLike,
6
+ H,
7
+ Input,
8
+ NotFoundHandler,
9
+ RouterRoute,
10
+ TypedResponse,
11
+ } from './types'
12
+ import { HtmlEscapedCallbackPhase, resolveCallback } from './utils/html'
13
+ import type { RedirectStatusCode, StatusCode } from './utils/http-status'
14
+ import type {
15
+ InvalidJSONValue,
16
+ IsAny,
17
+ JSONParsed,
18
+ JSONValue,
19
+ SimplifyDeepArray,
20
+ } from './utils/types'
21
+ import type { BaseMime } from './utils/mime'
22
+
23
+ type HeaderRecord =
24
+ | Record<'Content-Type', BaseMime>
25
+ | Record<ResponseHeader, string | string[]>
26
+ | Record<string, string | string[]>
27
+
28
+ /**
29
+ * Data type can be a string, ArrayBuffer, or ReadableStream.
30
+ */
31
+ export type Data = string | ArrayBuffer | ReadableStream
32
+
33
+ /**
34
+ * Interface for the execution context in a web worker or similar environment.
35
+ */
36
+ export interface ExecutionContext {
37
+ /**
38
+ * Extends the lifetime of the event callback until the promise is settled.
39
+ *
40
+ * @param promise - A promise to wait for.
41
+ */
42
+ waitUntil(promise: Promise<unknown>): void
43
+ /**
44
+ * Allows the event to be passed through to subsequent event listeners.
45
+ */
46
+ passThroughOnException(): void
47
+ }
48
+
49
+ /**
50
+ * Interface for context variable mapping.
51
+ */
52
+ export interface ContextVariableMap {}
53
+
54
+ /**
55
+ * Interface for context renderer.
56
+ */
57
+ export interface ContextRenderer {}
58
+
59
+ /**
60
+ * Interface representing a renderer for content.
61
+ *
62
+ * @interface DefaultRenderer
63
+ * @param {string | Promise<string>} content - The content to be rendered, which can be either a string or a Promise resolving to a string.
64
+ * @returns {Response | Promise<Response>} - The response after rendering the content, which can be either a Response or a Promise resolving to a Response.
65
+ */
66
+ interface DefaultRenderer {
67
+ (content: string | Promise<string>): Response | Promise<Response>
68
+ }
69
+
70
+ /**
71
+ * Renderer type which can either be a ContextRenderer or DefaultRenderer.
72
+ */
73
+ export type Renderer = ContextRenderer extends Function ? ContextRenderer : DefaultRenderer
74
+
75
+ /**
76
+ * Extracts the props for the renderer.
77
+ */
78
+ export type PropsForRenderer = [...Required<Parameters<Renderer>>] extends [unknown, infer Props]
79
+ ? Props
80
+ : unknown
81
+
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ export type Layout<T = Record<string, any>> = (props: T) => any
84
+
85
+ /**
86
+ * Interface for getting context variables.
87
+ *
88
+ * @template E - Environment type.
89
+ */
90
+ interface Get<E extends Env> {
91
+ <Key extends keyof E['Variables']>(key: Key): E['Variables'][Key]
92
+ <Key extends keyof ContextVariableMap>(key: Key): ContextVariableMap[Key]
93
+ }
94
+
95
+ /**
96
+ * Interface for setting context variables.
97
+ *
98
+ * @template E - Environment type.
99
+ */
100
+ interface Set<E extends Env> {
101
+ <Key extends keyof E['Variables']>(key: Key, value: E['Variables'][Key]): void
102
+ <Key extends keyof ContextVariableMap>(key: Key, value: ContextVariableMap[Key]): void
103
+ }
104
+
105
+ /**
106
+ * Interface for creating a new response.
107
+ */
108
+ interface NewResponse {
109
+ (data: Data | null, status?: StatusCode, headers?: HeaderRecord): Response
110
+ (data: Data | null, init?: ResponseInit): Response
111
+ }
112
+
113
+ /**
114
+ * Interface for responding with a body.
115
+ */
116
+ interface BodyRespond extends NewResponse {}
117
+
118
+ /**
119
+ * Interface for responding with text.
120
+ *
121
+ * @interface TextRespond
122
+ * @template T - The type of the text content.
123
+ * @template U - The type of the status code.
124
+ *
125
+ * @param {T} text - The text content to be included in the response.
126
+ * @param {U} [status] - An optional status code for the response.
127
+ * @param {HeaderRecord} [headers] - An optional record of headers to include in the response.
128
+ *
129
+ * @returns {Response & TypedResponse<T, U, 'text'>} - The response after rendering the text content, typed with the provided text and status code types.
130
+ */
131
+ interface TextRespond {
132
+ <T extends string, U extends StatusCode = StatusCode>(
133
+ text: T,
134
+ status?: U,
135
+ headers?: HeaderRecord
136
+ ): Response & TypedResponse<T, U, 'text'>
137
+ <T extends string, U extends StatusCode = StatusCode>(text: T, init?: ResponseInit): Response &
138
+ TypedResponse<T, U, 'text'>
139
+ }
140
+
141
+ /**
142
+ * Interface for responding with JSON.
143
+ *
144
+ * @interface JSONRespond
145
+ * @template T - The type of the JSON value or simplified unknown type.
146
+ * @template U - The type of the status code.
147
+ *
148
+ * @param {T} object - The JSON object to be included in the response.
149
+ * @param {U} [status] - An optional status code for the response.
150
+ * @param {HeaderRecord} [headers] - An optional record of headers to include in the response.
151
+ *
152
+ * @returns {JSONRespondReturn<T, U>} - The response after rendering the JSON object, typed with the provided object and status code types.
153
+ */
154
+ interface JSONRespond {
155
+ <
156
+ T extends JSONValue | SimplifyDeepArray<unknown> | InvalidJSONValue,
157
+ U extends StatusCode = StatusCode
158
+ >(
159
+ object: T,
160
+ status?: U,
161
+ headers?: HeaderRecord
162
+ ): JSONRespondReturn<T, U>
163
+ <
164
+ T extends JSONValue | SimplifyDeepArray<unknown> | InvalidJSONValue,
165
+ U extends StatusCode = StatusCode
166
+ >(
167
+ object: T,
168
+ init?: ResponseInit
169
+ ): JSONRespondReturn<T, U>
170
+ }
171
+
172
+ /**
173
+ * @template T - The type of the JSON value or simplified unknown type.
174
+ * @template U - The type of the status code.
175
+ *
176
+ * @returns {Response & TypedResponse<SimplifyDeepArray<T> extends JSONValue ? (JSONValue extends SimplifyDeepArray<T> ? never : JSONParsed<T>) : never, U, 'json'>} - The response after rendering the JSON object, typed with the provided object and status code types.
177
+ */
178
+ type JSONRespondReturn<
179
+ T extends JSONValue | SimplifyDeepArray<unknown> | InvalidJSONValue,
180
+ U extends StatusCode
181
+ > = Response &
182
+ TypedResponse<
183
+ SimplifyDeepArray<T> extends JSONValue
184
+ ? JSONValue extends SimplifyDeepArray<T>
185
+ ? never
186
+ : JSONParsed<T>
187
+ : never,
188
+ U,
189
+ 'json'
190
+ >
191
+
192
+ /**
193
+ * Interface representing a function that responds with HTML content.
194
+ *
195
+ * @param html - The HTML content to respond with, which can be a string or a Promise that resolves to a string.
196
+ * @param status - (Optional) The HTTP status code for the response.
197
+ * @param headers - (Optional) A record of headers to include in the response.
198
+ * @param init - (Optional) The response initialization object.
199
+ *
200
+ * @returns A Response object or a Promise that resolves to a Response object.
201
+ */
202
+ interface HTMLRespond {
203
+ <T extends string | Promise<string>>(
204
+ html: T,
205
+ status?: StatusCode,
206
+ headers?: HeaderRecord
207
+ ): T extends string ? Response : Promise<Response>
208
+ <T extends string | Promise<string>>(html: T, init?: ResponseInit): T extends string
209
+ ? Response
210
+ : Promise<Response>
211
+ }
212
+
213
+ /**
214
+ * Options for configuring the context.
215
+ *
216
+ * @template E - Environment type.
217
+ */
218
+ type ContextOptions<E extends Env> = {
219
+ /**
220
+ * Bindings for the environment.
221
+ */
222
+ env: E['Bindings']
223
+ /**
224
+ * Execution context for the request.
225
+ */
226
+ executionCtx?: FetchEventLike | ExecutionContext | undefined
227
+ /**
228
+ * Handler for not found responses.
229
+ */
230
+ notFoundHandler?: NotFoundHandler<E>
231
+ matchResult?: Result<[H, RouterRoute]>
232
+ path?: string
233
+ }
234
+
235
+ interface SetHeadersOptions {
236
+ append?: boolean
237
+ }
238
+
239
+ type ResponseHeader =
240
+ | 'Access-Control-Allow-Credentials'
241
+ | 'Access-Control-Allow-Headers'
242
+ | 'Access-Control-Allow-Methods'
243
+ | 'Access-Control-Allow-Origin'
244
+ | 'Access-Control-Expose-Headers'
245
+ | 'Access-Control-Max-Age'
246
+ | 'Age'
247
+ | 'Allow'
248
+ | 'Cache-Control'
249
+ | 'Clear-Site-Data'
250
+ | 'Content-Disposition'
251
+ | 'Content-Encoding'
252
+ | 'Content-Language'
253
+ | 'Content-Length'
254
+ | 'Content-Location'
255
+ | 'Content-Range'
256
+ | 'Content-Security-Policy'
257
+ | 'Content-Security-Policy-Report-Only'
258
+ | 'Content-Type'
259
+ | 'Cookie'
260
+ | 'Cross-Origin-Embedder-Policy'
261
+ | 'Cross-Origin-Opener-Policy'
262
+ | 'Cross-Origin-Resource-Policy'
263
+ | 'Date'
264
+ | 'ETag'
265
+ | 'Expires'
266
+ | 'Last-Modified'
267
+ | 'Location'
268
+ | 'Permissions-Policy'
269
+ | 'Pragma'
270
+ | 'Retry-After'
271
+ | 'Save-Data'
272
+ | 'Sec-CH-Prefers-Color-Scheme'
273
+ | 'Sec-CH-Prefers-Reduced-Motion'
274
+ | 'Sec-CH-UA'
275
+ | 'Sec-CH-UA-Arch'
276
+ | 'Sec-CH-UA-Bitness'
277
+ | 'Sec-CH-UA-Form-Factor'
278
+ | 'Sec-CH-UA-Full-Version'
279
+ | 'Sec-CH-UA-Full-Version-List'
280
+ | 'Sec-CH-UA-Mobile'
281
+ | 'Sec-CH-UA-Model'
282
+ | 'Sec-CH-UA-Platform'
283
+ | 'Sec-CH-UA-Platform-Version'
284
+ | 'Sec-CH-UA-WoW64'
285
+ | 'Sec-Fetch-Dest'
286
+ | 'Sec-Fetch-Mode'
287
+ | 'Sec-Fetch-Site'
288
+ | 'Sec-Fetch-User'
289
+ | 'Sec-GPC'
290
+ | 'Server'
291
+ | 'Server-Timing'
292
+ | 'Service-Worker-Navigation-Preload'
293
+ | 'Set-Cookie'
294
+ | 'Strict-Transport-Security'
295
+ | 'Timing-Allow-Origin'
296
+ | 'Trailer'
297
+ | 'Transfer-Encoding'
298
+ | 'Upgrade'
299
+ | 'Vary'
300
+ | 'WWW-Authenticate'
301
+ | 'Warning'
302
+ | 'X-Content-Type-Options'
303
+ | 'X-DNS-Prefetch-Control'
304
+ | 'X-Frame-Options'
305
+ | 'X-Permitted-Cross-Domain-Policies'
306
+ | 'X-Powered-By'
307
+ | 'X-Robots-Tag'
308
+ | 'X-XSS-Protection'
309
+
310
+ interface SetHeaders {
311
+ (name: 'Content-Type', value?: BaseMime, options?: SetHeadersOptions): void
312
+ (name: ResponseHeader, value?: string, options?: SetHeadersOptions): void
313
+ (name: string, value?: string, options?: SetHeadersOptions): void
314
+ }
315
+
316
+ type ResponseHeadersInit =
317
+ | [string, string][]
318
+ | Record<'Content-Type', BaseMime>
319
+ | Record<ResponseHeader, string>
320
+ | Record<string, string>
321
+ | Headers
322
+
323
+ interface ResponseInit {
324
+ headers?: ResponseHeadersInit
325
+ status?: number
326
+ statusText?: string
327
+ }
328
+
329
+ export const TEXT_PLAIN = 'text/plain; charset=UTF-8'
330
+
331
+ /**
332
+ * Sets the headers of a response.
333
+ *
334
+ * @param headers - The Headers object to set the headers on.
335
+ * @param map - A record of header key-value pairs to set.
336
+ * @returns The updated Headers object.
337
+ */
338
+ const setHeaders = (headers: Headers, map: Record<string, string> = {}) => {
339
+ Object.entries(map).forEach(([key, value]) => headers.set(key, value))
340
+ return headers
341
+ }
342
+
343
+ export class Context<
344
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
345
+ E extends Env = any,
346
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
347
+ P extends string = any,
348
+ I extends Input = {}
349
+ > {
350
+ #rawRequest: Request
351
+ #req: HonoRequest<P, I['out']> | undefined
352
+ /**
353
+ * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.
354
+ *
355
+ * @see {@link https://hono.dev/docs/api/context#env}
356
+ *
357
+ * @example
358
+ * ```ts
359
+ * // Environment object for Cloudflare Workers
360
+ * app.get('*', async c => {
361
+ * const counter = c.env.COUNTER
362
+ * })
363
+ * ```
364
+ */
365
+ env: E['Bindings'] = {}
366
+ #var: Map<unknown, unknown> | undefined
367
+ finalized: boolean = false
368
+ /**
369
+ * `.error` can get the error object from the middleware if the Handler throws an error.
370
+ *
371
+ * @see {@link https://hono.dev/docs/api/context#error}
372
+ *
373
+ * @example
374
+ * ```ts
375
+ * app.use('*', async (c, next) => {
376
+ * await next()
377
+ * if (c.error) {
378
+ * // do something...
379
+ * }
380
+ * })
381
+ * ```
382
+ */
383
+ error: Error | undefined
384
+
385
+ #status: StatusCode = 200
386
+ #executionCtx: FetchEventLike | ExecutionContext | undefined
387
+ #headers: Headers | undefined
388
+ #preparedHeaders: Record<string, string> | undefined
389
+ #res: Response | undefined
390
+ #isFresh = true
391
+ #layout: Layout<PropsForRenderer & { Layout: Layout }> | undefined
392
+ #renderer: Renderer | undefined
393
+ #notFoundHandler: NotFoundHandler<E> | undefined
394
+
395
+ #matchResult: Result<[H, RouterRoute]> | undefined
396
+ #path: string | undefined
397
+
398
+ /**
399
+ * Creates an instance of the Context class.
400
+ *
401
+ * @param req - The Request object.
402
+ * @param options - Optional configuration options for the context.
403
+ */
404
+ constructor(req: Request, options?: ContextOptions<E>) {
405
+ this.#rawRequest = req
406
+ if (options) {
407
+ this.#executionCtx = options.executionCtx
408
+ this.env = options.env
409
+ this.#notFoundHandler = options.notFoundHandler
410
+ this.#path = options.path
411
+ this.#matchResult = options.matchResult
412
+ }
413
+ }
414
+
415
+ /**
416
+ * `.req` is the instance of {@link HonoRequest}.
417
+ */
418
+ get req(): HonoRequest<P, I['out']> {
419
+ this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult)
420
+ return this.#req
421
+ }
422
+
423
+ /**
424
+ * @see {@link https://hono.dev/docs/api/context#event}
425
+ * The FetchEvent associated with the current request.
426
+ *
427
+ * @throws Will throw an error if the context does not have a FetchEvent.
428
+ */
429
+ get event(): FetchEventLike {
430
+ if (this.#executionCtx && 'respondWith' in this.#executionCtx) {
431
+ return this.#executionCtx
432
+ } else {
433
+ throw Error('This context has no FetchEvent')
434
+ }
435
+ }
436
+
437
+ /**
438
+ * @see {@link https://hono.dev/docs/api/context#executionctx}
439
+ * The ExecutionContext associated with the current request.
440
+ *
441
+ * @throws Will throw an error if the context does not have an ExecutionContext.
442
+ */
443
+ get executionCtx(): ExecutionContext {
444
+ if (this.#executionCtx) {
445
+ return this.#executionCtx as ExecutionContext
446
+ } else {
447
+ throw Error('This context has no ExecutionContext')
448
+ }
449
+ }
450
+
451
+ /**
452
+ * @see {@link https://hono.dev/docs/api/context#res}
453
+ * The Response object for the current request.
454
+ */
455
+ get res(): Response {
456
+ this.#isFresh = false
457
+ return (this.#res ||= new Response('404 Not Found', { status: 404 }))
458
+ }
459
+
460
+ /**
461
+ * Sets the Response object for the current request.
462
+ *
463
+ * @param _res - The Response object to set.
464
+ */
465
+ set res(_res: Response | undefined) {
466
+ this.#isFresh = false
467
+ if (this.#res && _res) {
468
+ try {
469
+ for (const [k, v] of this.#res.headers.entries()) {
470
+ if (k === 'content-type') {
471
+ continue
472
+ }
473
+ if (k === 'set-cookie') {
474
+ const cookies = this.#res.headers.getSetCookie()
475
+ _res.headers.delete('set-cookie')
476
+ for (const cookie of cookies) {
477
+ _res.headers.append('set-cookie', cookie)
478
+ }
479
+ } else {
480
+ _res.headers.set(k, v)
481
+ }
482
+ }
483
+ } catch (e) {
484
+ if (e instanceof TypeError && e.message.includes('immutable')) {
485
+ // `_res` is immutable (probably a response from a fetch API), so retry with a new response.
486
+ this.res = new Response(_res.body, {
487
+ headers: _res.headers,
488
+ status: _res.status,
489
+ })
490
+ return
491
+ } else {
492
+ throw e
493
+ }
494
+ }
495
+ }
496
+ this.#res = _res
497
+ this.finalized = true
498
+ }
499
+
500
+ /**
501
+ * `.render()` can create a response within a layout.
502
+ *
503
+ * @see {@link https://hono.dev/docs/api/context#render-setrenderer}
504
+ *
505
+ * @example
506
+ * ```ts
507
+ * app.get('/', (c) => {
508
+ * return c.render('Hello!')
509
+ * })
510
+ * ```
511
+ */
512
+ render: Renderer = (...args) => {
513
+ this.#renderer ??= (content: string | Promise<string>) => this.html(content)
514
+ return this.#renderer(...args)
515
+ }
516
+
517
+ /**
518
+ * Sets the layout for the response.
519
+ *
520
+ * @param layout - The layout to set.
521
+ * @returns The layout function.
522
+ */
523
+ setLayout = (
524
+ layout: Layout<PropsForRenderer & { Layout: Layout }>
525
+ ): Layout<
526
+ PropsForRenderer & {
527
+ Layout: Layout
528
+ }
529
+ > => (this.#layout = layout)
530
+
531
+ /**
532
+ * Gets the current layout for the response.
533
+ *
534
+ * @returns The current layout function.
535
+ */
536
+ getLayout = (): Layout<PropsForRenderer & { Layout: Layout }> | undefined => this.#layout
537
+
538
+ /**
539
+ * `.setRenderer()` can set the layout in the custom middleware.
540
+ *
541
+ * @see {@link https://hono.dev/docs/api/context#render-setrenderer}
542
+ *
543
+ * @example
544
+ * ```tsx
545
+ * app.use('*', async (c, next) => {
546
+ * c.setRenderer((content) => {
547
+ * return c.html(
548
+ * <html>
549
+ * <body>
550
+ * <p>{content}</p>
551
+ * </body>
552
+ * </html>
553
+ * )
554
+ * })
555
+ * await next()
556
+ * })
557
+ * ```
558
+ */
559
+ setRenderer = (renderer: Renderer): void => {
560
+ this.#renderer = renderer
561
+ }
562
+
563
+ /**
564
+ * `.header()` can set headers.
565
+ *
566
+ * @see {@link https://hono.dev/docs/api/context#body}
567
+ *
568
+ * @example
569
+ * ```ts
570
+ * app.get('/welcome', (c) => {
571
+ * // Set headers
572
+ * c.header('X-Message', 'Hello!')
573
+ * c.header('Content-Type', 'text/plain')
574
+ *
575
+ * return c.body('Thank you for coming')
576
+ * })
577
+ * ```
578
+ */
579
+ header: SetHeaders = (name, value, options): void => {
580
+ // Clear the header
581
+ if (value === undefined) {
582
+ if (this.#headers) {
583
+ this.#headers.delete(name)
584
+ } else if (this.#preparedHeaders) {
585
+ delete this.#preparedHeaders[name.toLocaleLowerCase()]
586
+ }
587
+ if (this.finalized) {
588
+ this.res.headers.delete(name)
589
+ }
590
+ return
591
+ }
592
+
593
+ if (options?.append) {
594
+ if (!this.#headers) {
595
+ this.#isFresh = false
596
+ this.#headers = new Headers(this.#preparedHeaders)
597
+ this.#preparedHeaders = {}
598
+ }
599
+ this.#headers.append(name, value)
600
+ } else {
601
+ if (this.#headers) {
602
+ this.#headers.set(name, value)
603
+ } else {
604
+ this.#preparedHeaders ??= {}
605
+ this.#preparedHeaders[name.toLowerCase()] = value
606
+ }
607
+ }
608
+
609
+ if (this.finalized) {
610
+ if (options?.append) {
611
+ this.res.headers.append(name, value)
612
+ } else {
613
+ this.res.headers.set(name, value)
614
+ }
615
+ }
616
+ }
617
+
618
+ status = (status: StatusCode): void => {
619
+ this.#isFresh = false
620
+ this.#status = status
621
+ }
622
+
623
+ /**
624
+ * `.set()` can set the value specified by the key.
625
+ *
626
+ * @see {@link https://hono.dev/docs/api/context#set-get}
627
+ *
628
+ * @example
629
+ * ```ts
630
+ * app.use('*', async (c, next) => {
631
+ * c.set('message', 'Hono is cool!!')
632
+ * await next()
633
+ * })
634
+ * ```
635
+ */
636
+ set: Set<
637
+ IsAny<E> extends true
638
+ ? {
639
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
640
+ Variables: ContextVariableMap & Record<string, any>
641
+ }
642
+ : E
643
+ > = (key: string, value: unknown) => {
644
+ this.#var ??= new Map()
645
+ this.#var.set(key, value)
646
+ }
647
+
648
+ /**
649
+ * `.get()` can use the value specified by the key.
650
+ *
651
+ * @see {@link https://hono.dev/docs/api/context#set-get}
652
+ *
653
+ * @example
654
+ * ```ts
655
+ * app.get('/', (c) => {
656
+ * const message = c.get('message')
657
+ * return c.text(`The message is "${message}"`)
658
+ * })
659
+ * ```
660
+ */
661
+ get: Get<
662
+ IsAny<E> extends true
663
+ ? {
664
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
665
+ Variables: ContextVariableMap & Record<string, any>
666
+ }
667
+ : E
668
+ > = (key: string) => {
669
+ return this.#var ? this.#var.get(key) : undefined
670
+ }
671
+
672
+ /**
673
+ * `.var` can access the value of a variable.
674
+ *
675
+ * @see {@link https://hono.dev/docs/api/context#var}
676
+ *
677
+ * @example
678
+ * ```ts
679
+ * const result = c.var.client.oneMethod()
680
+ * ```
681
+ */
682
+ // c.var.propName is a read-only
683
+ get var(): Readonly<
684
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
685
+ ContextVariableMap & (IsAny<E['Variables']> extends true ? Record<string, any> : E['Variables'])
686
+ > {
687
+ if (!this.#var) {
688
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
689
+ return {} as any
690
+ }
691
+ return Object.fromEntries(this.#var)
692
+ }
693
+
694
+ newResponse: NewResponse = (
695
+ data: Data | null,
696
+ arg?: StatusCode | ResponseInit,
697
+ headers?: HeaderRecord
698
+ ): Response => {
699
+ // Optimized
700
+ if (this.#isFresh && !headers && !arg && this.#status === 200) {
701
+ return new Response(data, {
702
+ headers: this.#preparedHeaders,
703
+ })
704
+ }
705
+
706
+ if (arg && typeof arg !== 'number') {
707
+ const header = new Headers(arg.headers)
708
+ if (this.#headers) {
709
+ // If the header is set by c.header() and arg.headers, c.header() will be prioritized.
710
+ this.#headers.forEach((v, k) => {
711
+ if (k === 'set-cookie') {
712
+ header.append(k, v)
713
+ } else {
714
+ header.set(k, v)
715
+ }
716
+ })
717
+ }
718
+ const headers = setHeaders(header, this.#preparedHeaders)
719
+ return new Response(data, {
720
+ headers,
721
+ status: arg.status ?? this.#status,
722
+ })
723
+ }
724
+
725
+ const status = typeof arg === 'number' ? arg : this.#status
726
+ this.#preparedHeaders ??= {}
727
+
728
+ this.#headers ??= new Headers()
729
+ setHeaders(this.#headers, this.#preparedHeaders)
730
+
731
+ if (this.#res) {
732
+ this.#res.headers.forEach((v, k) => {
733
+ if (k === 'set-cookie') {
734
+ this.#headers?.append(k, v)
735
+ } else {
736
+ this.#headers?.set(k, v)
737
+ }
738
+ })
739
+ setHeaders(this.#headers, this.#preparedHeaders)
740
+ }
741
+
742
+ headers ??= {}
743
+ for (const [k, v] of Object.entries(headers)) {
744
+ if (typeof v === 'string') {
745
+ this.#headers.set(k, v)
746
+ } else {
747
+ this.#headers.delete(k)
748
+ for (const v2 of v) {
749
+ this.#headers.append(k, v2)
750
+ }
751
+ }
752
+ }
753
+
754
+ return new Response(data, {
755
+ status,
756
+ headers: this.#headers,
757
+ })
758
+ }
759
+
760
+ /**
761
+ * `.body()` can return the HTTP response.
762
+ * You can set headers with `.header()` and set HTTP status code with `.status`.
763
+ * This can also be set in `.text()`, `.json()` and so on.
764
+ *
765
+ * @see {@link https://hono.dev/docs/api/context#body}
766
+ *
767
+ * @example
768
+ * ```ts
769
+ * app.get('/welcome', (c) => {
770
+ * // Set headers
771
+ * c.header('X-Message', 'Hello!')
772
+ * c.header('Content-Type', 'text/plain')
773
+ * // Set HTTP status code
774
+ * c.status(201)
775
+ *
776
+ * // Return the response body
777
+ * return c.body('Thank you for coming')
778
+ * })
779
+ * ```
780
+ */
781
+ body: BodyRespond = (
782
+ data: Data | null,
783
+ arg?: StatusCode | ResponseInit,
784
+ headers?: HeaderRecord
785
+ ): Response => {
786
+ return typeof arg === 'number'
787
+ ? this.newResponse(data, arg, headers)
788
+ : this.newResponse(data, arg)
789
+ }
790
+
791
+ /**
792
+ * `.text()` can render text as `Content-Type:text/plain`.
793
+ *
794
+ * @see {@link https://hono.dev/docs/api/context#text}
795
+ *
796
+ * @example
797
+ * ```ts
798
+ * app.get('/say', (c) => {
799
+ * return c.text('Hello!')
800
+ * })
801
+ * ```
802
+ */
803
+ text: TextRespond = (
804
+ text: string,
805
+ arg?: StatusCode | ResponseInit,
806
+ headers?: HeaderRecord
807
+ ): ReturnType<TextRespond> => {
808
+ // If the header is empty, return Response immediately.
809
+ // Content-Type will be added automatically as `text/plain`.
810
+ if (!this.#preparedHeaders) {
811
+ if (this.#isFresh && !headers && !arg) {
812
+ // @ts-expect-error `Response` due to missing some types-only keys
813
+ return new Response(text)
814
+ }
815
+ this.#preparedHeaders = {}
816
+ }
817
+ this.#preparedHeaders['content-type'] = TEXT_PLAIN
818
+ // @ts-expect-error `Response` due to missing some types-only keys
819
+ return typeof arg === 'number'
820
+ ? this.newResponse(text, arg, headers)
821
+ : this.newResponse(text, arg)
822
+ }
823
+
824
+ /**
825
+ * `.json()` can render JSON as `Content-Type:application/json`.
826
+ *
827
+ * @see {@link https://hono.dev/docs/api/context#json}
828
+ *
829
+ * @example
830
+ * ```ts
831
+ * app.get('/api', (c) => {
832
+ * return c.json({ message: 'Hello!' })
833
+ * })
834
+ * ```
835
+ */
836
+ json: JSONRespond = <
837
+ T extends JSONValue | SimplifyDeepArray<unknown> | InvalidJSONValue,
838
+ U extends StatusCode = StatusCode
839
+ >(
840
+ object: T,
841
+ arg?: U | ResponseInit,
842
+ headers?: HeaderRecord
843
+ ): JSONRespondReturn<T, U> => {
844
+ const body = JSON.stringify(object)
845
+ this.#preparedHeaders ??= {}
846
+ this.#preparedHeaders['content-type'] = 'application/json; charset=UTF-8'
847
+ /* eslint-disable @typescript-eslint/no-explicit-any */
848
+ return (
849
+ typeof arg === 'number' ? this.newResponse(body, arg, headers) : this.newResponse(body, arg)
850
+ ) as any
851
+ }
852
+
853
+ html: HTMLRespond = (
854
+ html: string | Promise<string>,
855
+ arg?: StatusCode | ResponseInit,
856
+ headers?: HeaderRecord
857
+ ): Response | Promise<Response> => {
858
+ this.#preparedHeaders ??= {}
859
+ this.#preparedHeaders['content-type'] = 'text/html; charset=UTF-8'
860
+
861
+ if (typeof html === 'object') {
862
+ return resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then((html) => {
863
+ return typeof arg === 'number'
864
+ ? this.newResponse(html, arg, headers)
865
+ : this.newResponse(html, arg)
866
+ })
867
+ }
868
+
869
+ return typeof arg === 'number'
870
+ ? this.newResponse(html as string, arg, headers)
871
+ : this.newResponse(html as string, arg)
872
+ }
873
+
874
+ /**
875
+ * `.redirect()` can Redirect, default status code is 302.
876
+ *
877
+ * @see {@link https://hono.dev/docs/api/context#redirect}
878
+ *
879
+ * @example
880
+ * ```ts
881
+ * app.get('/redirect', (c) => {
882
+ * return c.redirect('/')
883
+ * })
884
+ * app.get('/redirect-permanently', (c) => {
885
+ * return c.redirect('/', 301)
886
+ * })
887
+ * ```
888
+ */
889
+ redirect = <T extends RedirectStatusCode = 302>(
890
+ location: string,
891
+ status?: T
892
+ ): Response & TypedResponse<undefined, T, 'redirect'> => {
893
+ this.#headers ??= new Headers()
894
+ this.#headers.set('Location', location)
895
+ return this.newResponse(null, status ?? 302) as any
896
+ }
897
+
898
+ /**
899
+ * `.notFound()` can return the Not Found Response.
900
+ *
901
+ * @see {@link https://hono.dev/docs/api/context#notfound}
902
+ *
903
+ * @example
904
+ * ```ts
905
+ * app.get('/notfound', (c) => {
906
+ * return c.notFound()
907
+ * })
908
+ * ```
909
+ */
910
+ notFound = (): Response | Promise<Response> => {
911
+ this.#notFoundHandler ??= () => new Response()
912
+ return this.#notFoundHandler(this)
913
+ }
914
+ }