acrylblends 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/dist/index.d.ts +6 -1
  2. package/dist/index.js +84 -5
  3. package/dist/index.js.map +1 -1
  4. package/docs/framework/LICENSE +23 -0
  5. package/docs/framework/README.md +63 -0
  6. package/docs/framework/UPSTREAM.md +3 -0
  7. package/docs/framework/api-summary.md +138 -0
  8. package/docs/framework/concepts.md +105 -0
  9. package/docs/framework/context.md +129 -0
  10. package/docs/framework/getting-started.md +146 -0
  11. package/docs/framework/helpers.md +118 -0
  12. package/docs/framework/middleware.md +154 -0
  13. package/docs/framework/migration-from-0-3.md +108 -0
  14. package/docs/framework/migration-from-dsh-webserver.md +103 -0
  15. package/docs/framework/node-server.md +75 -0
  16. package/docs/framework/plugin-lifecycle.md +111 -0
  17. package/docs/framework/request.md +106 -0
  18. package/docs/framework/routing.md +188 -0
  19. package/docs/framework/surfaces.md +71 -0
  20. package/docs/framework/upstream.json +9 -0
  21. package/docs/framework/validation.md +135 -0
  22. package/package.json +4 -2
  23. package/plugins/acryl-inspect/plugin.json +2 -1
  24. package/plugins/acryl-inspect/src/report.ts +21 -13
  25. package/plugins/acryl-inspect/src/service.ts +9 -7
  26. package/plugins/acryl-inspect/tests/report.spec.ts +13 -8
  27. package/plugins/acryl-inspect/tests/service.spec.ts +11 -10
  28. package/plugins/acryl-inspect/upstream.json +2 -2
  29. package/plugins/acryl-node-server/LICENSE +26 -0
  30. package/plugins/acryl-node-server/plugin.json +2 -1
  31. package/plugins/acryl-node-server/src/adapter/conninfo.ts +23 -0
  32. package/plugins/acryl-node-server/src/adapter/early-hints.ts +55 -0
  33. package/plugins/acryl-node-server/src/adapter/error.ts +11 -0
  34. package/plugins/acryl-node-server/src/adapter/headers.ts +249 -0
  35. package/plugins/acryl-node-server/src/adapter/index.ts +6 -0
  36. package/plugins/acryl-node-server/src/adapter/listener.ts +540 -0
  37. package/plugins/acryl-node-server/src/adapter/request.ts +797 -0
  38. package/plugins/acryl-node-server/src/adapter/response.ts +186 -0
  39. package/plugins/acryl-node-server/src/adapter/serve-static.ts +238 -0
  40. package/plugins/acryl-node-server/src/adapter/server.ts +36 -0
  41. package/plugins/acryl-node-server/src/adapter/types.ts +82 -0
  42. package/plugins/acryl-node-server/src/adapter/url.ts +42 -0
  43. package/plugins/acryl-node-server/src/adapter/utils/response/constants.ts +1 -0
  44. package/plugins/acryl-node-server/src/adapter/utils/response.ts +4 -0
  45. package/plugins/acryl-node-server/src/adapter/utils/stream.ts +88 -0
  46. package/plugins/acryl-node-server/src/adapter/utils.ts +96 -0
  47. package/plugins/acryl-node-server/src/adapter/websocket-types.ts +45 -0
  48. package/plugins/acryl-node-server/src/adapter/websocket.ts +375 -0
  49. package/plugins/acryl-node-server/src/index.ts +19 -6
  50. package/plugins/acryl-node-server/tests/adapter/app.ts +76 -0
  51. package/plugins/acryl-node-server/tests/adapter/assets/.static/plain.txt +1 -0
  52. package/plugins/acryl-node-server/tests/adapter/assets/favicon.ico +0 -0
  53. package/plugins/acryl-node-server/tests/adapter/assets/secret.txt +1 -0
  54. package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +1 -0
  55. package/plugins/acryl-node-server/tests/adapter/assets/static/admin/secret.txt +1 -0
  56. package/plugins/acryl-node-server/tests/adapter/assets/static/data.json +5 -0
  57. package/plugins/acryl-node-server/tests/adapter/assets/static/extensionless +1 -0
  58. package/plugins/acryl-node-server/tests/adapter/assets/static/foo..bar.txt +0 -0
  59. package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +1 -0
  60. package/plugins/acryl-node-server/tests/adapter/assets/static/plain.txt +1 -0
  61. package/plugins/acryl-node-server/tests/adapter/assets/static-with-context-path/plain.txt +1 -0
  62. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin +1 -0
  63. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin.br +1 -0
  64. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt +1 -0
  65. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.br +1 -0
  66. package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.zst +1 -0
  67. package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +34 -0
  68. package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +248 -0
  69. package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +457 -0
  70. package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-cert.pem +23 -0
  71. package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-key.pem +27 -0
  72. package/plugins/acryl-node-server/tests/adapter/headers.test.ts +252 -0
  73. package/plugins/acryl-node-server/tests/adapter/helpers/request.ts +190 -0
  74. package/plugins/acryl-node-server/tests/adapter/listener.test.ts +727 -0
  75. package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +189 -0
  76. package/plugins/acryl-node-server/tests/adapter/request.test.ts +1230 -0
  77. package/plugins/acryl-node-server/tests/adapter/response.test.ts +285 -0
  78. package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +849 -0
  79. package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +790 -0
  80. package/plugins/acryl-node-server/tests/adapter/server.test.ts +1302 -0
  81. package/plugins/acryl-node-server/tests/adapter/setup.ts +16 -0
  82. package/plugins/acryl-node-server/tests/adapter/url.test.ts +76 -0
  83. package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +23 -0
  84. package/plugins/acryl-node-server/tests/adapter/utils/stream.test.ts +75 -0
  85. package/plugins/acryl-node-server/tests/adapter/utils.test.ts +235 -0
  86. package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +260 -0
  87. package/plugins/acryl-node-server/tests/server.spec.ts +44 -8
  88. package/plugins/acryl-node-server/upstream.json +3 -3
  89. package/plugins/acryl-router/LICENSE +26 -0
  90. package/plugins/acryl-router/plugin.json +2 -1
  91. package/plugins/acryl-router/src/client.ts +2 -0
  92. package/plugins/acryl-router/src/connection.ts +42 -0
  93. package/plugins/acryl-router/src/core/app-base.ts +544 -0
  94. package/plugins/acryl-router/src/core/app.test.ts +3833 -0
  95. package/plugins/acryl-router/src/core/app.ts +34 -0
  96. package/plugins/acryl-router/src/core/client/client.test.ts +2313 -0
  97. package/plugins/acryl-router/src/core/client/client.ts +249 -0
  98. package/plugins/acryl-router/src/core/client/fetch-result-please.ts +95 -0
  99. package/plugins/acryl-router/src/core/client/index.ts +17 -0
  100. package/plugins/acryl-router/src/core/client/types.test.ts +149 -0
  101. package/plugins/acryl-router/src/core/client/types.ts +393 -0
  102. package/plugins/acryl-router/src/core/client/utils.test.ts +405 -0
  103. package/plugins/acryl-router/src/core/client/utils.ts +117 -0
  104. package/plugins/acryl-router/src/core/compose.test.ts +751 -0
  105. package/plugins/acryl-router/src/core/compose.ts +73 -0
  106. package/plugins/acryl-router/src/core/context.test.ts +629 -0
  107. package/plugins/acryl-router/src/core/context.ts +781 -0
  108. package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +344 -0
  109. package/plugins/acryl-router/src/core/helper/accepts/accepts.ts +96 -0
  110. package/plugins/acryl-router/src/core/helper/accepts/index.ts +6 -0
  111. package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +55 -0
  112. package/plugins/acryl-router/src/core/helper/adapter/index.ts +90 -0
  113. package/plugins/acryl-router/src/core/helper/conninfo/index.ts +6 -0
  114. package/plugins/acryl-router/src/core/helper/conninfo/types.ts +45 -0
  115. package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +510 -0
  116. package/plugins/acryl-router/src/core/helper/cookie/index.ts +146 -0
  117. package/plugins/acryl-router/src/core/helper/factory/index.test.ts +434 -0
  118. package/plugins/acryl-router/src/core/helper/factory/index.ts +375 -0
  119. package/plugins/acryl-router/src/core/helper/html/index.test.ts +78 -0
  120. package/plugins/acryl-router/src/core/helper/html/index.ts +57 -0
  121. package/plugins/acryl-router/src/core/helper/route/index.test.ts +259 -0
  122. package/plugins/acryl-router/src/core/helper/route/index.ts +144 -0
  123. package/plugins/acryl-router/src/core/helper/streaming/index.ts +9 -0
  124. package/plugins/acryl-router/src/core/helper/streaming/sse.ts +101 -0
  125. package/plugins/acryl-router/src/core/helper/streaming/stream.test.ts +128 -0
  126. package/plugins/acryl-router/src/core/helper/streaming/stream.ts +45 -0
  127. package/plugins/acryl-router/src/core/helper/streaming/text.test.ts +34 -0
  128. package/plugins/acryl-router/src/core/helper/streaming/text.ts +15 -0
  129. package/plugins/acryl-router/src/core/helper/streaming/utils.ts +11 -0
  130. package/plugins/acryl-router/src/core/helper/testing/index.test.ts +42 -0
  131. package/plugins/acryl-router/src/core/helper/testing/index.ts +28 -0
  132. package/plugins/acryl-router/src/core/helper/websocket/index.test.ts +124 -0
  133. package/plugins/acryl-router/src/core/helper/websocket/index.ts +140 -0
  134. package/plugins/acryl-router/src/core/http-exception.test.ts +45 -0
  135. package/plugins/acryl-router/src/core/http-exception.ts +77 -0
  136. package/plugins/acryl-router/src/core/index.ts +53 -0
  137. package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +434 -0
  138. package/plugins/acryl-router/src/core/middleware/basic-auth/index.ts +152 -0
  139. package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +1018 -0
  140. package/plugins/acryl-router/src/core/middleware/bearer-auth/index.ts +220 -0
  141. package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +273 -0
  142. package/plugins/acryl-router/src/core/middleware/body-limit/index.ts +110 -0
  143. package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +355 -0
  144. package/plugins/acryl-router/src/core/middleware/combine/index.ts +171 -0
  145. package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +535 -0
  146. package/plugins/acryl-router/src/core/middleware/compress/index.ts +142 -0
  147. package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +43 -0
  148. package/plugins/acryl-router/src/core/middleware/context-storage/index.ts +58 -0
  149. package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +532 -0
  150. package/plugins/acryl-router/src/core/middleware/cors/index.ts +163 -0
  151. package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +534 -0
  152. package/plugins/acryl-router/src/core/middleware/csrf/index.ts +150 -0
  153. package/plugins/acryl-router/src/core/middleware/etag/digest.test.ts +21 -0
  154. package/plugins/acryl-router/src/core/middleware/etag/digest.ts +95 -0
  155. package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +503 -0
  156. package/plugins/acryl-router/src/core/middleware/etag/index.ts +135 -0
  157. package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +217 -0
  158. package/plugins/acryl-router/src/core/middleware/ip-restriction/index.ts +278 -0
  159. package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +1135 -0
  160. package/plugins/acryl-router/src/core/middleware/jwk/index.ts +1 -0
  161. package/plugins/acryl-router/src/core/middleware/jwk/jwk.ts +195 -0
  162. package/plugins/acryl-router/src/core/middleware/jwk/keys.test.json +48 -0
  163. package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +802 -0
  164. package/plugins/acryl-router/src/core/middleware/jwt/index.ts +9 -0
  165. package/plugins/acryl-router/src/core/middleware/jwt/jwt.ts +189 -0
  166. package/plugins/acryl-router/src/core/middleware/language/index.test.ts +552 -0
  167. package/plugins/acryl-router/src/core/middleware/language/index.ts +12 -0
  168. package/plugins/acryl-router/src/core/middleware/language/language.ts +314 -0
  169. package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +204 -0
  170. package/plugins/acryl-router/src/core/middleware/logger/index.ts +95 -0
  171. package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +292 -0
  172. package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.ts +141 -0
  173. package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +221 -0
  174. package/plugins/acryl-router/src/core/middleware/method-override/index.ts +147 -0
  175. package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +37 -0
  176. package/plugins/acryl-router/src/core/middleware/powered-by/index.ts +35 -0
  177. package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +218 -0
  178. package/plugins/acryl-router/src/core/middleware/pretty-json/index.ts +67 -0
  179. package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +168 -0
  180. package/plugins/acryl-router/src/core/middleware/request-id/index.ts +7 -0
  181. package/plugins/acryl-router/src/core/middleware/request-id/request-id.ts +59 -0
  182. package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +671 -0
  183. package/plugins/acryl-router/src/core/middleware/secure-headers/index.ts +8 -0
  184. package/plugins/acryl-router/src/core/middleware/secure-headers/permissions-policy.ts +101 -0
  185. package/plugins/acryl-router/src/core/middleware/secure-headers/secure-headers.ts +340 -0
  186. package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +450 -0
  187. package/plugins/acryl-router/src/core/middleware/serve-static/index.ts +135 -0
  188. package/plugins/acryl-router/src/core/middleware/serve-static/path.test.ts +50 -0
  189. package/plugins/acryl-router/src/core/middleware/serve-static/path.ts +25 -0
  190. package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +70 -0
  191. package/plugins/acryl-router/src/core/middleware/timeout/index.ts +58 -0
  192. package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +310 -0
  193. package/plugins/acryl-router/src/core/middleware/timing/index.ts +8 -0
  194. package/plugins/acryl-router/src/core/middleware/timing/timing.ts +256 -0
  195. package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +381 -0
  196. package/plugins/acryl-router/src/core/middleware/trailing-slash/index.ts +156 -0
  197. package/plugins/acryl-router/src/core/request/constants.ts +1 -0
  198. package/plugins/acryl-router/src/core/request.test.ts +751 -0
  199. package/plugins/acryl-router/src/core/request.ts +502 -0
  200. package/plugins/acryl-router/src/core/router/common.case.test.ts +1132 -0
  201. package/plugins/acryl-router/src/core/router/linear-router/index.ts +6 -0
  202. package/plugins/acryl-router/src/core/router/linear-router/router.test.ts +80 -0
  203. package/plugins/acryl-router/src/core/router/linear-router/router.ts +152 -0
  204. package/plugins/acryl-router/src/core/router/pattern-router/index.ts +6 -0
  205. package/plugins/acryl-router/src/core/router/pattern-router/router.test.ts +46 -0
  206. package/plugins/acryl-router/src/core/router/pattern-router/router.ts +54 -0
  207. package/plugins/acryl-router/src/core/router/reg-exp-router/index.ts +7 -0
  208. package/plugins/acryl-router/src/core/router/reg-exp-router/matcher.ts +33 -0
  209. package/plugins/acryl-router/src/core/router/reg-exp-router/node.ts +170 -0
  210. package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.test.ts +154 -0
  211. package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.ts +165 -0
  212. package/plugins/acryl-router/src/core/router/reg-exp-router/router.test.ts +265 -0
  213. package/plugins/acryl-router/src/core/router/reg-exp-router/router.ts +174 -0
  214. package/plugins/acryl-router/src/core/router/reg-exp-router/trie.ts +84 -0
  215. package/plugins/acryl-router/src/core/router/smart-router/index.ts +6 -0
  216. package/plugins/acryl-router/src/core/router/smart-router/router.test.ts +13 -0
  217. package/plugins/acryl-router/src/core/router/smart-router/router.ts +70 -0
  218. package/plugins/acryl-router/src/core/router/trie-router/index.ts +6 -0
  219. package/plugins/acryl-router/src/core/router/trie-router/node.test.ts +896 -0
  220. package/plugins/acryl-router/src/core/router/trie-router/node.ts +221 -0
  221. package/plugins/acryl-router/src/core/router/trie-router/router.test.ts +8 -0
  222. package/plugins/acryl-router/src/core/router/trie-router/router.ts +18 -0
  223. package/plugins/acryl-router/src/core/router/utils.ts +1 -0
  224. package/plugins/acryl-router/src/core/router.ts +103 -0
  225. package/plugins/acryl-router/src/core/types.test.ts +4134 -0
  226. package/plugins/acryl-router/src/core/types.ts +2782 -0
  227. package/plugins/acryl-router/src/core/utils/accept.test.ts +299 -0
  228. package/plugins/acryl-router/src/core/utils/accept.ts +268 -0
  229. package/plugins/acryl-router/src/core/utils/basic-auth.test.ts +56 -0
  230. package/plugins/acryl-router/src/core/utils/basic-auth.ts +26 -0
  231. package/plugins/acryl-router/src/core/utils/body.test.ts +496 -0
  232. package/plugins/acryl-router/src/core/utils/body.ts +263 -0
  233. package/plugins/acryl-router/src/core/utils/buffer.test.ts +147 -0
  234. package/plugins/acryl-router/src/core/utils/buffer.ts +117 -0
  235. package/plugins/acryl-router/src/core/utils/color.test.ts +23 -0
  236. package/plugins/acryl-router/src/core/utils/color.ts +56 -0
  237. package/plugins/acryl-router/src/core/utils/compress.ts +10 -0
  238. package/plugins/acryl-router/src/core/utils/concurrent.test.ts +69 -0
  239. package/plugins/acryl-router/src/core/utils/concurrent.ts +55 -0
  240. package/plugins/acryl-router/src/core/utils/constants.ts +4 -0
  241. package/plugins/acryl-router/src/core/utils/cookie.test.ts +460 -0
  242. package/plugins/acryl-router/src/core/utils/cookie.ts +281 -0
  243. package/plugins/acryl-router/src/core/utils/crypto.test.ts +43 -0
  244. package/plugins/acryl-router/src/core/utils/crypto.ts +58 -0
  245. package/plugins/acryl-router/src/core/utils/encode.test.ts +61 -0
  246. package/plugins/acryl-router/src/core/utils/encode.ts +34 -0
  247. package/plugins/acryl-router/src/core/utils/filepath.test.ts +78 -0
  248. package/plugins/acryl-router/src/core/utils/filepath.ts +60 -0
  249. package/plugins/acryl-router/src/core/utils/handler.ts +15 -0
  250. package/plugins/acryl-router/src/core/utils/headers.ts +355 -0
  251. package/plugins/acryl-router/src/core/utils/html.test.ts +16 -0
  252. package/plugins/acryl-router/src/core/utils/html.ts +182 -0
  253. package/plugins/acryl-router/src/core/utils/http-status.ts +72 -0
  254. package/plugins/acryl-router/src/core/utils/ipaddr.test.ts +149 -0
  255. package/plugins/acryl-router/src/core/utils/ipaddr.ts +374 -0
  256. package/plugins/acryl-router/src/core/utils/jwt/index.ts +7 -0
  257. package/plugins/acryl-router/src/core/utils/jwt/jwa.test.ts +86 -0
  258. package/plugins/acryl-router/src/core/utils/jwt/jwa.ts +38 -0
  259. package/plugins/acryl-router/src/core/utils/jwt/jws.ts +235 -0
  260. package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +1788 -0
  261. package/plugins/acryl-router/src/core/utils/jwt/jwt.ts +292 -0
  262. package/plugins/acryl-router/src/core/utils/jwt/types.ts +157 -0
  263. package/plugins/acryl-router/src/core/utils/jwt/utf8.ts +7 -0
  264. package/plugins/acryl-router/src/core/utils/mime.test.ts +64 -0
  265. package/plugins/acryl-router/src/core/utils/mime.ts +94 -0
  266. package/plugins/acryl-router/src/core/utils/stream.test.ts +212 -0
  267. package/plugins/acryl-router/src/core/utils/stream.ts +107 -0
  268. package/plugins/acryl-router/src/core/utils/types.test.ts +295 -0
  269. package/plugins/acryl-router/src/core/utils/types.ts +123 -0
  270. package/plugins/acryl-router/src/core/utils/url.test.ts +384 -0
  271. package/plugins/acryl-router/src/core/utils/url.ts +337 -0
  272. package/plugins/acryl-router/src/core/validator/index.ts +8 -0
  273. package/plugins/acryl-router/src/core/validator/utils.test.ts +82 -0
  274. package/plugins/acryl-router/src/core/validator/utils.ts +69 -0
  275. package/plugins/acryl-router/src/core/validator/validator.test.ts +1488 -0
  276. package/plugins/acryl-router/src/core/validator/validator.ts +185 -0
  277. package/plugins/acryl-router/src/helpers/index.ts +13 -3
  278. package/plugins/acryl-router/src/helpers/schema-validator.ts +35 -0
  279. package/plugins/acryl-router/src/index.ts +6 -6
  280. package/plugins/acryl-router/src/middleware/index.ts +25 -6
  281. package/plugins/acryl-router/src/middleware/loopback-only.ts +53 -14
  282. package/plugins/acryl-router/src/service.ts +262 -64
  283. package/plugins/acryl-router/tests/docs-examples.spec.ts +152 -0
  284. package/plugins/acryl-router/tests/live-install.spec.ts +2 -2
  285. package/plugins/acryl-router/tests/loader.spec.ts +3 -2
  286. package/plugins/acryl-router/tests/loopback-only.spec.ts +80 -0
  287. package/plugins/acryl-router/tests/service.spec.ts +281 -66
  288. package/plugins/acryl-router/tests/shadow-state.spec.ts +79 -0
  289. package/plugins/acryl-router/upstream.json +2 -2
  290. package/plugins/acryl-router-http/plugin.json +2 -1
  291. package/plugins/acryl-router-http/src/bridge.ts +3 -1
  292. package/plugins/acryl-router-http/tests/adapter.spec.ts +16 -12
  293. package/plugins/acryl-router-http/tests/surfaces.spec.ts +12 -10
  294. package/plugins/acryl-router-http/upstream.json +3 -3
  295. package/plugins/acryl-state/NOTICE +30 -0
  296. package/plugins/acryl-state/plugin.json +1 -1
  297. package/plugins/acryl-state/src/cell.ts +1 -1
  298. package/plugins/acryl-state/src/service.ts +33 -15
  299. package/plugins/acryl-state/upstream.json +6 -4
  300. package/plugins/builder/script.ts +4 -7
  301. package/plugins/extensions/index.ts +6 -5
  302. package/plugins/extensions/resolve.ts +28 -3
  303. package/plugins/openai/prompt.ts +9 -7
  304. package/plugins/tsconfig.json +5 -4
  305. package/shared/AGENTS.core.md +54 -0
  306. package/templates/agent/AGENTS.md +6 -0
  307. package/templates/agent/README.md +2 -2
  308. package/templates/agent/blend.yaml +1 -1
  309. package/templates/agent/src/routes.ts +37 -27
  310. package/templates/agent/test/model.test.ts +2 -1
  311. package/templates/agent/tsconfig.json +8 -5
  312. package/templates/blank/AGENTS.md +5 -0
  313. package/templates/blank/README.md +1 -1
  314. package/templates/blank/src/routes.ts +6 -4
  315. package/templates/blank/tsconfig.json +2 -4
  316. package/templates/todo/AGENTS.md +5 -0
  317. package/templates/todo/src/page.ts +1 -1
  318. package/templates/todo/src/todo.ts +58 -29
  319. package/templates/todo/tsconfig.json +2 -4
  320. package/templates/todo/upstream.json +2 -2
  321. package/plugins/acryl-router/src/compose.ts +0 -21
  322. package/plugins/acryl-router/src/context.ts +0 -59
  323. package/plugins/acryl-router/src/helpers/read-body.ts +0 -59
  324. package/plugins/acryl-router/src/helpers/sse.ts +0 -83
  325. package/plugins/acryl-router/src/helpers/validate.ts +0 -44
  326. package/plugins/acryl-router/src/http-error.ts +0 -21
  327. package/plugins/acryl-router/src/middleware/body-limit.ts +0 -25
  328. package/plugins/acryl-router/src/middleware/cors.ts +0 -46
  329. package/plugins/acryl-router/src/middleware/logger.ts +0 -21
  330. package/plugins/acryl-router/src/middleware/request-id.ts +0 -24
  331. package/plugins/acryl-router/src/middleware/secure-headers.ts +0 -23
  332. package/plugins/acryl-router/src/pattern.ts +0 -89
  333. package/plugins/acryl-router/src/registrar.ts +0 -90
  334. package/plugins/acryl-router/src/table.ts +0 -156
  335. package/plugins/acryl-router/src/types.ts +0 -73
  336. package/plugins/acryl-router/src/util.ts +0 -23
  337. package/plugins/acryl-router/tests/api.spec.ts +0 -223
  338. package/plugins/acryl-router/tests/conformance.ts +0 -170
  339. package/plugins/acryl-router/tests/helpers.spec.ts +0 -172
  340. package/plugins/acryl-router/tests/middleware.spec.ts +0 -183
  341. package/plugins/acryl-router/tests/table.spec.ts +0 -47
@@ -0,0 +1,2782 @@
1
+ /**
2
+ * @module
3
+ * This module contains some type definitions for the App modules.
4
+ */
5
+
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ import type { Context } from './context.ts'
8
+ import type { AppBase } from './app-base.ts'
9
+ import type { CustomHeader, RequestHeader } from './utils/headers.ts'
10
+ import type { StatusCode } from './utils/http-status.ts'
11
+ import type {
12
+ IfAnyThenEmptyObject,
13
+ IsAny,
14
+ JSONValue,
15
+ RemoveBlankRecord,
16
+ Simplify,
17
+ UnionToIntersection,
18
+ } from './utils/types.ts'
19
+
20
+ ////////////////////////////////////////
21
+ ////// //////
22
+ ////// Values //////
23
+ ////// //////
24
+ ////////////////////////////////////////
25
+
26
+ export type Bindings = object
27
+ export type Variables = object
28
+
29
+ export type BlankEnv = {}
30
+ export type Env = {
31
+ Bindings?: Bindings
32
+ Variables?: Variables
33
+ }
34
+
35
+ export type Next = () => Promise<void>
36
+
37
+ export type ExtractInput<I extends Input | Input['in']> = I extends Input
38
+ ? unknown extends I['in']
39
+ ? {}
40
+ : I['in']
41
+ : I
42
+ export type Input = {
43
+ in?: {}
44
+ out?: {}
45
+ outputFormat?: ResponseFormat
46
+ }
47
+
48
+ export type BlankSchema = {}
49
+ export type BlankInput = {}
50
+
51
+ ////////////////////////////////////////
52
+ ////// //////
53
+ ////// Routes //////
54
+ ////// //////
55
+ ////////////////////////////////////////
56
+
57
+ export interface RouterRoute {
58
+ basePath: string
59
+ path: string
60
+ method: string
61
+ handler: H
62
+ }
63
+
64
+ ////////////////////////////////////////
65
+ ////// //////
66
+ ////// Handlers //////
67
+ ////// //////
68
+ ////////////////////////////////////////
69
+
70
+ export type HandlerResponse<O> =
71
+ | Response
72
+ | TypedResponse<O>
73
+ | Promise<Response | TypedResponse<O>>
74
+ | Promise<void>
75
+
76
+ export type Handler<
77
+ E extends Env = any,
78
+ P extends string = any,
79
+ I extends Input = BlankInput,
80
+ R extends HandlerResponse<any> = any,
81
+ > = (c: Context<E, P, I>, next: Next) => R
82
+
83
+ export type MiddlewareHandler<
84
+ E extends Env = any,
85
+ P extends string = string,
86
+ I extends Input = {},
87
+ R extends HandlerResponse<any> = Response,
88
+ > = (c: Context<E, P, I>, next: Next) => Promise<R | void>
89
+
90
+ export type H<
91
+ E extends Env = any,
92
+ P extends string = any,
93
+ I extends Input = BlankInput,
94
+ R extends HandlerResponse<any> = any,
95
+ > = Handler<E, P, I, R> | MiddlewareHandler<E, P, I, R>
96
+
97
+ /**
98
+ * You can extend this interface to define a custom `c.notFound()` Response type.
99
+ *
100
+ * @example
101
+ * declare module 'acryl-router' {
102
+ * interface NotFoundResponse extends Response, TypedResponse<string, 404, 'text'> {}
103
+ * }
104
+ */
105
+ export interface NotFoundResponse {}
106
+
107
+ export type NotFoundHandler<E extends Env = any> = (
108
+ c: Context<E>
109
+ ) => NotFoundResponse extends Response
110
+ ? NotFoundResponse | Promise<NotFoundResponse>
111
+ : Response | Promise<Response>
112
+
113
+ export interface HTTPResponseError extends Error {
114
+ getResponse: () => Response
115
+ }
116
+ export type ErrorHandler<E extends Env = any> = (
117
+ err: Error | HTTPResponseError,
118
+ c: Context<E>
119
+ ) => Response | Promise<Response>
120
+
121
+ ////////////////////////////////////////
122
+ ////// //////
123
+ ////// HandlerInterface //////
124
+ ////// //////
125
+ ////////////////////////////////////////
126
+
127
+ export interface HandlerInterface<
128
+ E extends Env = Env,
129
+ M extends string = string,
130
+ S extends Schema = BlankSchema,
131
+ BasePath extends string = '/',
132
+ CurrentPath extends string = BasePath,
133
+ > {
134
+ // app.get(handler)
135
+ <
136
+ P extends string = CurrentPath,
137
+ I extends Input = BlankInput,
138
+ R extends HandlerResponse<any> = any,
139
+ E2 extends Env = E,
140
+ >(
141
+ handler: H<E2, P, I, R>
142
+ ): AppBase<
143
+ IntersectNonAnyTypes<[E, E2]>,
144
+ S & ToSchema<M, P, I, MergeTypedResponse<R>>,
145
+ BasePath,
146
+ CurrentPath
147
+ >
148
+
149
+ // app.get(handler x2)
150
+ <
151
+ P extends string = CurrentPath,
152
+ I extends Input = BlankInput,
153
+ I2 extends Input = I,
154
+ R extends HandlerResponse<any> = any,
155
+ E2 extends Env = E,
156
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
157
+ M1 extends H<E2, P, I> = H<E2, P, I>,
158
+ >(
159
+ ...handlers: [H<E2, P, I> & M1, H<E3, P, I2, R>]
160
+ ): AppBase<
161
+ IntersectNonAnyTypes<[E, E2, E3]>,
162
+ S & ToSchema<M, P, I2, MergeTypedResponse<R> | MergeMiddlewareResponse<M1>>,
163
+ BasePath,
164
+ CurrentPath
165
+ >
166
+
167
+ // app.get(path, handler)
168
+ <
169
+ P extends string,
170
+ MergedPath extends MergePath<BasePath, P>,
171
+ R extends HandlerResponse<any> = any,
172
+ I extends Input = BlankInput,
173
+ E2 extends Env = E,
174
+ >(
175
+ path: P,
176
+ handler: H<E2, MergedPath, I, R>
177
+ ): AppBase<
178
+ E,
179
+ AddSchemaIfHasResponse<MergeTypedResponse<R>, S, M, P, I, BasePath>,
180
+ BasePath,
181
+ MergePath<BasePath, P>
182
+ >
183
+
184
+ // app.get(handler x 3)
185
+ <
186
+ P extends string = CurrentPath,
187
+ R extends HandlerResponse<any> = any,
188
+ I extends Input = BlankInput,
189
+ I2 extends Input = I,
190
+ I3 extends Input = I & I2,
191
+ E2 extends Env = E,
192
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
193
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
194
+ // Middleware
195
+ M1 extends H<E2, P, I> = H<E2, P, I>,
196
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
197
+ >(
198
+ ...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3, R>]
199
+ ): AppBase<
200
+ IntersectNonAnyTypes<[E, E2, E3, E4]>,
201
+ S &
202
+ ToSchema<
203
+ M,
204
+ P,
205
+ I3,
206
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>
207
+ >,
208
+ BasePath,
209
+ CurrentPath
210
+ >
211
+
212
+ // app.get(path, handler x2)
213
+ <
214
+ P extends string,
215
+ MergedPath extends MergePath<BasePath, P>,
216
+ R extends HandlerResponse<any> = any,
217
+ I extends Input = BlankInput,
218
+ I2 extends Input = I,
219
+ E2 extends Env = E,
220
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
221
+ // Middleware
222
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
223
+ >(
224
+ path: P,
225
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2, R>]
226
+ ): AppBase<
227
+ E,
228
+ AddSchemaIfHasResponse<
229
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1>,
230
+ S,
231
+ M,
232
+ P,
233
+ I2,
234
+ BasePath
235
+ >,
236
+ BasePath,
237
+ MergePath<BasePath, P>
238
+ >
239
+
240
+ // app.get(handler x 4)
241
+ <
242
+ P extends string = CurrentPath,
243
+ R extends HandlerResponse<any> = any,
244
+ I extends Input = BlankInput,
245
+ I2 extends Input = I,
246
+ I3 extends Input = I & I2,
247
+ I4 extends Input = I & I2 & I3,
248
+ E2 extends Env = E,
249
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
250
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
251
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
252
+ // Middleware
253
+ M1 extends H<E2, P, I> = H<E2, P, I>,
254
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
255
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
256
+ >(
257
+ ...handlers: [H<E2, P, I> & M1, H<E3, P, I2> & M2, H<E4, P, I3> & M3, H<E5, P, I4, R>]
258
+ ): AppBase<
259
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
260
+ S &
261
+ ToSchema<
262
+ M,
263
+ P,
264
+ I4,
265
+ | MergeTypedResponse<R>
266
+ | MergeMiddlewareResponse<M1>
267
+ | MergeMiddlewareResponse<M2>
268
+ | MergeMiddlewareResponse<M3>
269
+ >,
270
+ BasePath,
271
+ CurrentPath
272
+ >
273
+
274
+ // app.get(path, handler x3)
275
+ <
276
+ P extends string,
277
+ MergedPath extends MergePath<BasePath, P>,
278
+ R extends HandlerResponse<any> = any,
279
+ I extends Input = BlankInput,
280
+ I2 extends Input = I,
281
+ I3 extends Input = I & I2,
282
+ E2 extends Env = E,
283
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
284
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
285
+ // Middleware
286
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
287
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
288
+ >(
289
+ path: P,
290
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2> & M2, H<E4, MergedPath, I3, R>]
291
+ ): AppBase<
292
+ E,
293
+ AddSchemaIfHasResponse<
294
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>,
295
+ S,
296
+ M,
297
+ P,
298
+ I3,
299
+ BasePath
300
+ >,
301
+ BasePath,
302
+ MergePath<BasePath, P>
303
+ >
304
+
305
+ // app.get(handler x 5)
306
+ <
307
+ P extends string = CurrentPath,
308
+ R extends HandlerResponse<any> = any,
309
+ I extends Input = BlankInput,
310
+ I2 extends Input = I,
311
+ I3 extends Input = I & I2,
312
+ I4 extends Input = I & I2 & I3,
313
+ I5 extends Input = I & I2 & I3 & I4,
314
+ E2 extends Env = E,
315
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
316
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
317
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
318
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
319
+ // Middleware
320
+ M1 extends H<E2, P, I> = H<E2, P, I>,
321
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
322
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
323
+ M4 extends H<E5, P, I4> = H<E5, P, I4>,
324
+ >(
325
+ ...handlers: [
326
+ H<E2, P, I> & M1,
327
+ H<E3, P, I2> & M2,
328
+ H<E4, P, I3> & M3,
329
+ H<E5, P, I4> & M4,
330
+ H<E6, P, I5, R>,
331
+ ]
332
+ ): AppBase<
333
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
334
+ S &
335
+ ToSchema<
336
+ M,
337
+ P,
338
+ I5,
339
+ | MergeTypedResponse<R>
340
+ | MergeMiddlewareResponse<M1>
341
+ | MergeMiddlewareResponse<M2>
342
+ | MergeMiddlewareResponse<M3>
343
+ | MergeMiddlewareResponse<M4>
344
+ >,
345
+ BasePath,
346
+ CurrentPath
347
+ >
348
+
349
+ // app.get(path, handler x4)
350
+ <
351
+ P extends string,
352
+ MergedPath extends MergePath<BasePath, P>,
353
+ R extends HandlerResponse<any> = any,
354
+ I extends Input = BlankInput,
355
+ I2 extends Input = I,
356
+ I3 extends Input = I & I2,
357
+ I4 extends Input = I & I2 & I3,
358
+ E2 extends Env = E,
359
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
360
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
361
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
362
+ // Middleware
363
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
364
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
365
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
366
+ >(
367
+ path: P,
368
+ ...handlers: [
369
+ H<E2, MergedPath, I> & M1,
370
+ H<E3, MergedPath, I2> & M2,
371
+ H<E4, MergedPath, I3> & M3,
372
+ H<E5, MergedPath, I4, R>,
373
+ ]
374
+ ): AppBase<
375
+ E,
376
+ AddSchemaIfHasResponse<
377
+ | MergeTypedResponse<R>
378
+ | MergeMiddlewareResponse<M1>
379
+ | MergeMiddlewareResponse<M2>
380
+ | MergeMiddlewareResponse<M3>,
381
+ S,
382
+ M,
383
+ P,
384
+ I4,
385
+ BasePath
386
+ >,
387
+ BasePath,
388
+ MergePath<BasePath, P>
389
+ >
390
+
391
+ // app.get(handler x 6)
392
+ <
393
+ P extends string = CurrentPath,
394
+ R extends HandlerResponse<any> = any,
395
+ I extends Input = BlankInput,
396
+ I2 extends Input = I,
397
+ I3 extends Input = I & I2,
398
+ I4 extends Input = I & I2 & I3,
399
+ I5 extends Input = I & I2 & I3 & I4,
400
+ I6 extends Input = I & I2 & I3 & I4 & I5,
401
+ E2 extends Env = E,
402
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
403
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
404
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
405
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
406
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
407
+ // Middleware
408
+ M1 extends H<E2, P, I> = H<E2, P, I>,
409
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
410
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
411
+ M4 extends H<E5, P, I4> = H<E5, P, I4>,
412
+ M5 extends H<E6, P, I5> = H<E6, P, I5>,
413
+ >(
414
+ ...handlers: [
415
+ H<E2, P, I> & M1,
416
+ H<E3, P, I2> & M2,
417
+ H<E4, P, I3> & M3,
418
+ H<E5, P, I4> & M4,
419
+ H<E6, P, I5> & M5,
420
+ H<E7, P, I6, R>,
421
+ ]
422
+ ): AppBase<
423
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
424
+ S &
425
+ ToSchema<
426
+ M,
427
+ P,
428
+ I6,
429
+ | MergeTypedResponse<R>
430
+ | MergeMiddlewareResponse<M1>
431
+ | MergeMiddlewareResponse<M2>
432
+ | MergeMiddlewareResponse<M3>
433
+ | MergeMiddlewareResponse<M4>
434
+ | MergeMiddlewareResponse<M5>
435
+ >,
436
+ BasePath,
437
+ CurrentPath
438
+ >
439
+
440
+ // app.get(path, handler x5)
441
+ <
442
+ P extends string,
443
+ MergedPath extends MergePath<BasePath, P>,
444
+ R extends HandlerResponse<any> = any,
445
+ I extends Input = BlankInput,
446
+ I2 extends Input = I,
447
+ I3 extends Input = I & I2,
448
+ I4 extends Input = I & I2 & I3,
449
+ I5 extends Input = I & I2 & I3 & I4,
450
+ E2 extends Env = E,
451
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
452
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
453
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
454
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
455
+ // Middleware
456
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
457
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
458
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
459
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
460
+ >(
461
+ path: P,
462
+ ...handlers: [
463
+ H<E2, MergedPath, I> & M1,
464
+ H<E3, MergedPath, I2> & M2,
465
+ H<E4, MergedPath, I3> & M3,
466
+ H<E5, MergedPath, I4> & M4,
467
+ H<E6, MergedPath, I5, R>,
468
+ ]
469
+ ): AppBase<
470
+ E,
471
+ AddSchemaIfHasResponse<
472
+ | MergeTypedResponse<R>
473
+ | MergeMiddlewareResponse<M1>
474
+ | MergeMiddlewareResponse<M2>
475
+ | MergeMiddlewareResponse<M3>
476
+ | MergeMiddlewareResponse<M4>,
477
+ S,
478
+ M,
479
+ P,
480
+ I5,
481
+ BasePath
482
+ >,
483
+ BasePath,
484
+ MergePath<BasePath, P>
485
+ >
486
+
487
+ // app.get(handler x 7)
488
+ <
489
+ P extends string = CurrentPath,
490
+ R extends HandlerResponse<any> = any,
491
+ I extends Input = BlankInput,
492
+ I2 extends Input = I,
493
+ I3 extends Input = I & I2,
494
+ I4 extends Input = I & I2 & I3,
495
+ I5 extends Input = I & I2 & I3 & I4,
496
+ I6 extends Input = I & I2 & I3 & I4 & I5,
497
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
498
+ E2 extends Env = E,
499
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
500
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
501
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
502
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
503
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
504
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
505
+ // Middleware
506
+ M1 extends H<E2, P, I> = H<E2, P, I>,
507
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
508
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
509
+ M4 extends H<E5, P, I4> = H<E5, P, I4>,
510
+ M5 extends H<E6, P, I5> = H<E6, P, I5>,
511
+ M6 extends H<E7, P, I6> = H<E7, P, I6>,
512
+ >(
513
+ ...handlers: [
514
+ H<E2, P, I> & M1,
515
+ H<E3, P, I2> & M2,
516
+ H<E4, P, I3> & M3,
517
+ H<E5, P, I4> & M4,
518
+ H<E6, P, I5> & M5,
519
+ H<E7, P, I6> & M6,
520
+ H<E8, P, I7, R>,
521
+ ]
522
+ ): AppBase<
523
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
524
+ S &
525
+ ToSchema<
526
+ M,
527
+ P,
528
+ I7,
529
+ | MergeTypedResponse<R>
530
+ | MergeMiddlewareResponse<M1>
531
+ | MergeMiddlewareResponse<M2>
532
+ | MergeMiddlewareResponse<M3>
533
+ | MergeMiddlewareResponse<M4>
534
+ | MergeMiddlewareResponse<M5>
535
+ | MergeMiddlewareResponse<M6>
536
+ >,
537
+ BasePath,
538
+ CurrentPath
539
+ >
540
+
541
+ // app.get(path, handler x6)
542
+ <
543
+ P extends string,
544
+ MergedPath extends MergePath<BasePath, P>,
545
+ R extends HandlerResponse<any> = any,
546
+ I extends Input = BlankInput,
547
+ I2 extends Input = I,
548
+ I3 extends Input = I & I2,
549
+ I4 extends Input = I & I2 & I3,
550
+ I5 extends Input = I & I2 & I3 & I4,
551
+ I6 extends Input = I & I2 & I3 & I4 & I5,
552
+ E2 extends Env = E,
553
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
554
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
555
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
556
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
557
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
558
+ // Middleware
559
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
560
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
561
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
562
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
563
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
564
+ >(
565
+ path: P,
566
+ ...handlers: [
567
+ H<E2, MergedPath, I> & M1,
568
+ H<E3, MergedPath, I2> & M2,
569
+ H<E4, MergedPath, I3> & M3,
570
+ H<E5, MergedPath, I4> & M4,
571
+ H<E6, MergedPath, I5> & M5,
572
+ H<E7, MergedPath, I6, R>,
573
+ ]
574
+ ): AppBase<
575
+ E,
576
+ AddSchemaIfHasResponse<
577
+ | MergeTypedResponse<R>
578
+ | MergeMiddlewareResponse<M1>
579
+ | MergeMiddlewareResponse<M2>
580
+ | MergeMiddlewareResponse<M3>
581
+ | MergeMiddlewareResponse<M4>
582
+ | MergeMiddlewareResponse<M5>,
583
+ S,
584
+ M,
585
+ P,
586
+ I6,
587
+ BasePath
588
+ >,
589
+ BasePath,
590
+ MergePath<BasePath, P>
591
+ >
592
+
593
+ // app.get(handler x 8)
594
+ <
595
+ P extends string = CurrentPath,
596
+ R extends HandlerResponse<any> = any,
597
+ I extends Input = BlankInput,
598
+ I2 extends Input = I,
599
+ I3 extends Input = I & I2,
600
+ I4 extends Input = I & I2 & I3,
601
+ I5 extends Input = I & I2 & I3 & I4,
602
+ I6 extends Input = I & I2 & I3 & I4 & I5,
603
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
604
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
605
+ E2 extends Env = E,
606
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
607
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
608
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
609
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
610
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
611
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
612
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
613
+ // Middleware
614
+ M1 extends H<E2, P, I> = H<E2, P, I>,
615
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
616
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
617
+ M4 extends H<E5, P, I4> = H<E5, P, I4>,
618
+ M5 extends H<E6, P, I5> = H<E6, P, I5>,
619
+ M6 extends H<E7, P, I6> = H<E7, P, I6>,
620
+ M7 extends H<E8, P, I7> = H<E8, P, I7>,
621
+ >(
622
+ ...handlers: [
623
+ H<E2, P, I> & M1,
624
+ H<E3, P, I2> & M2,
625
+ H<E4, P, I3> & M3,
626
+ H<E5, P, I4> & M4,
627
+ H<E6, P, I5> & M5,
628
+ H<E7, P, I6> & M6,
629
+ H<E8, P, I7> & M7,
630
+ H<E9, P, I8, R>,
631
+ ]
632
+ ): AppBase<
633
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
634
+ S &
635
+ ToSchema<
636
+ M,
637
+ P,
638
+ I8,
639
+ | MergeTypedResponse<R>
640
+ | MergeMiddlewareResponse<M1>
641
+ | MergeMiddlewareResponse<M2>
642
+ | MergeMiddlewareResponse<M3>
643
+ | MergeMiddlewareResponse<M4>
644
+ | MergeMiddlewareResponse<M5>
645
+ | MergeMiddlewareResponse<M6>
646
+ | MergeMiddlewareResponse<M7>
647
+ >,
648
+ BasePath,
649
+ CurrentPath
650
+ >
651
+
652
+ // app.get(path, handler x7)
653
+ <
654
+ P extends string,
655
+ MergedPath extends MergePath<BasePath, P>,
656
+ R extends HandlerResponse<any> = any,
657
+ I extends Input = BlankInput,
658
+ I2 extends Input = I,
659
+ I3 extends Input = I & I2,
660
+ I4 extends Input = I & I2 & I3,
661
+ I5 extends Input = I & I2 & I3 & I4,
662
+ I6 extends Input = I & I2 & I3 & I4 & I5,
663
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
664
+ E2 extends Env = E,
665
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
666
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
667
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
668
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
669
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
670
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
671
+ // Middleware
672
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
673
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
674
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
675
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
676
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
677
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
678
+ >(
679
+ path: P,
680
+ ...handlers: [
681
+ H<E2, MergedPath, I> & M1,
682
+ H<E3, MergedPath, I2> & M2,
683
+ H<E4, MergedPath, I3> & M3,
684
+ H<E5, MergedPath, I4> & M4,
685
+ H<E6, MergedPath, I5> & M5,
686
+ H<E7, MergedPath, I6> & M6,
687
+ H<E8, MergedPath, I7, R>,
688
+ ]
689
+ ): AppBase<
690
+ E,
691
+ AddSchemaIfHasResponse<
692
+ | MergeTypedResponse<R>
693
+ | MergeMiddlewareResponse<M1>
694
+ | MergeMiddlewareResponse<M2>
695
+ | MergeMiddlewareResponse<M3>
696
+ | MergeMiddlewareResponse<M4>
697
+ | MergeMiddlewareResponse<M5>
698
+ | MergeMiddlewareResponse<M6>,
699
+ S,
700
+ M,
701
+ P,
702
+ I7,
703
+ BasePath
704
+ >,
705
+ BasePath,
706
+ MergePath<BasePath, P>
707
+ >
708
+
709
+ // app.get(handler x 9)
710
+ <
711
+ P extends string = CurrentPath,
712
+ R extends HandlerResponse<any> = any,
713
+ I extends Input = BlankInput,
714
+ I2 extends Input = I,
715
+ I3 extends Input = I & I2,
716
+ I4 extends Input = I & I2 & I3,
717
+ I5 extends Input = I & I2 & I3 & I4,
718
+ I6 extends Input = I & I2 & I3 & I4 & I5,
719
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
720
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
721
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
722
+ E2 extends Env = E,
723
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
724
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
725
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
726
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
727
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
728
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
729
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
730
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
731
+ // Middleware
732
+ M1 extends H<E2, P, I> = H<E2, P, I>,
733
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
734
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
735
+ M4 extends H<E5, P, I4> = H<E5, P, I4>,
736
+ M5 extends H<E6, P, I5> = H<E6, P, I5>,
737
+ M6 extends H<E7, P, I6> = H<E7, P, I6>,
738
+ M7 extends H<E8, P, I7> = H<E8, P, I7>,
739
+ M8 extends H<E9, P, I8> = H<E9, P, I8>,
740
+ >(
741
+ ...handlers: [
742
+ H<E2, P, I> & M1,
743
+ H<E3, P, I2> & M2,
744
+ H<E4, P, I3> & M3,
745
+ H<E5, P, I4> & M4,
746
+ H<E6, P, I5> & M5,
747
+ H<E7, P, I6> & M6,
748
+ H<E8, P, I7> & M7,
749
+ H<E9, P, I8> & M8,
750
+ H<E10, P, I9, R>,
751
+ ]
752
+ ): AppBase<
753
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
754
+ S &
755
+ ToSchema<
756
+ M,
757
+ P,
758
+ I9,
759
+ | MergeTypedResponse<R>
760
+ | MergeMiddlewareResponse<M1>
761
+ | MergeMiddlewareResponse<M2>
762
+ | MergeMiddlewareResponse<M3>
763
+ | MergeMiddlewareResponse<M4>
764
+ | MergeMiddlewareResponse<M5>
765
+ | MergeMiddlewareResponse<M6>
766
+ | MergeMiddlewareResponse<M7>
767
+ | MergeMiddlewareResponse<M8>
768
+ >,
769
+ BasePath,
770
+ CurrentPath
771
+ >
772
+
773
+ // app.get(path, handler x8)
774
+ <
775
+ P extends string,
776
+ MergedPath extends MergePath<BasePath, P>,
777
+ R extends HandlerResponse<any> = any,
778
+ I extends Input = BlankInput,
779
+ I2 extends Input = I,
780
+ I3 extends Input = I & I2,
781
+ I4 extends Input = I & I2 & I3,
782
+ I5 extends Input = I & I2 & I3 & I4,
783
+ I6 extends Input = I & I2 & I3 & I4 & I5,
784
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
785
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
786
+ E2 extends Env = E,
787
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
788
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
789
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
790
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
791
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
792
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
793
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
794
+ // Middleware
795
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
796
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
797
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
798
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
799
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
800
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
801
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
802
+ >(
803
+ path: P,
804
+ ...handlers: [
805
+ H<E2, MergedPath, I> & M1,
806
+ H<E3, MergedPath, I2> & M2,
807
+ H<E4, MergedPath, I3> & M3,
808
+ H<E5, MergedPath, I4> & M4,
809
+ H<E6, MergedPath, I5> & M5,
810
+ H<E7, MergedPath, I6> & M6,
811
+ H<E8, MergedPath, I7> & M7,
812
+ H<E9, MergedPath, I8, R>,
813
+ ]
814
+ ): AppBase<
815
+ E,
816
+ AddSchemaIfHasResponse<
817
+ | MergeTypedResponse<R>
818
+ | MergeMiddlewareResponse<M1>
819
+ | MergeMiddlewareResponse<M2>
820
+ | MergeMiddlewareResponse<M3>
821
+ | MergeMiddlewareResponse<M4>
822
+ | MergeMiddlewareResponse<M5>
823
+ | MergeMiddlewareResponse<M6>
824
+ | MergeMiddlewareResponse<M7>,
825
+ S,
826
+ M,
827
+ P,
828
+ I8,
829
+ BasePath
830
+ >,
831
+ BasePath,
832
+ MergePath<BasePath, P>
833
+ >
834
+
835
+ // app.get(handler x 10)
836
+ <
837
+ P extends string = CurrentPath,
838
+ R extends HandlerResponse<any> = any,
839
+ I extends Input = BlankInput,
840
+ I2 extends Input = I,
841
+ I3 extends Input = I & I2,
842
+ I4 extends Input = I & I2 & I3,
843
+ I5 extends Input = I & I2 & I3 & I4,
844
+ I6 extends Input = I & I2 & I3 & I4 & I5,
845
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
846
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
847
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
848
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
849
+ E2 extends Env = E,
850
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
851
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
852
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
853
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
854
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
855
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
856
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
857
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
858
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
859
+ // Middleware
860
+ M1 extends H<E2, P, I> = H<E2, P, I>,
861
+ M2 extends H<E3, P, I2> = H<E3, P, I2>,
862
+ M3 extends H<E4, P, I3> = H<E4, P, I3>,
863
+ M4 extends H<E5, P, I4> = H<E5, P, I4>,
864
+ M5 extends H<E6, P, I5> = H<E6, P, I5>,
865
+ M6 extends H<E7, P, I6> = H<E7, P, I6>,
866
+ M7 extends H<E8, P, I7> = H<E8, P, I7>,
867
+ M8 extends H<E9, P, I8> = H<E9, P, I8>,
868
+ M9 extends H<E10, P, I9> = H<E10, P, I9>,
869
+ >(
870
+ ...handlers: [
871
+ H<E2, P, I> & M1,
872
+ H<E3, P, I2> & M2,
873
+ H<E4, P, I3> & M3,
874
+ H<E5, P, I4> & M4,
875
+ H<E6, P, I5> & M5,
876
+ H<E7, P, I6> & M6,
877
+ H<E8, P, I7> & M7,
878
+ H<E9, P, I8> & M8,
879
+ H<E10, P, I9> & M9,
880
+ H<E11, P, I10, R>,
881
+ ]
882
+ ): AppBase<
883
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>,
884
+ S &
885
+ ToSchema<
886
+ M,
887
+ P,
888
+ I10,
889
+ | MergeTypedResponse<R>
890
+ | MergeMiddlewareResponse<M1>
891
+ | MergeMiddlewareResponse<M2>
892
+ | MergeMiddlewareResponse<M3>
893
+ | MergeMiddlewareResponse<M4>
894
+ | MergeMiddlewareResponse<M5>
895
+ | MergeMiddlewareResponse<M6>
896
+ | MergeMiddlewareResponse<M7>
897
+ | MergeMiddlewareResponse<M8>
898
+ | MergeMiddlewareResponse<M9>
899
+ >,
900
+ BasePath,
901
+ CurrentPath
902
+ >
903
+
904
+ // app.get(path, handler x9)
905
+ <
906
+ P extends string,
907
+ MergedPath extends MergePath<BasePath, P>,
908
+ R extends HandlerResponse<any> = any,
909
+ I extends Input = BlankInput,
910
+ I2 extends Input = I,
911
+ I3 extends Input = I & I2,
912
+ I4 extends Input = I & I2 & I3,
913
+ I5 extends Input = I & I2 & I3 & I4,
914
+ I6 extends Input = I & I2 & I3 & I4 & I5,
915
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
916
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
917
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
918
+ E2 extends Env = E,
919
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
920
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
921
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
922
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
923
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
924
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
925
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
926
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
927
+ // Middleware
928
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
929
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
930
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
931
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
932
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
933
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
934
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
935
+ M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>,
936
+ >(
937
+ path: P,
938
+ ...handlers: [
939
+ H<E2, MergedPath, I> & M1,
940
+ H<E3, MergedPath, I2> & M2,
941
+ H<E4, MergedPath, I3> & M3,
942
+ H<E5, MergedPath, I4> & M4,
943
+ H<E6, MergedPath, I5> & M5,
944
+ H<E7, MergedPath, I6> & M6,
945
+ H<E8, MergedPath, I7> & M7,
946
+ H<E9, MergedPath, I8> & M8,
947
+ H<E10, MergedPath, I9, R>,
948
+ ]
949
+ ): AppBase<
950
+ E,
951
+ AddSchemaIfHasResponse<
952
+ | MergeTypedResponse<R>
953
+ | MergeMiddlewareResponse<M1>
954
+ | MergeMiddlewareResponse<M2>
955
+ | MergeMiddlewareResponse<M3>
956
+ | MergeMiddlewareResponse<M4>
957
+ | MergeMiddlewareResponse<M5>
958
+ | MergeMiddlewareResponse<M6>
959
+ | MergeMiddlewareResponse<M7>
960
+ | MergeMiddlewareResponse<M8>,
961
+ S,
962
+ M,
963
+ P,
964
+ I9,
965
+ BasePath
966
+ >,
967
+ BasePath,
968
+ MergePath<BasePath, P>
969
+ >
970
+
971
+ // app.get(path, handler x10)
972
+ <
973
+ P extends string,
974
+ MergedPath extends MergePath<BasePath, P>,
975
+ R extends HandlerResponse<any> = any,
976
+ I extends Input = BlankInput,
977
+ I2 extends Input = I,
978
+ I3 extends Input = I & I2,
979
+ I4 extends Input = I & I2 & I3,
980
+ I5 extends Input = I & I2 & I3 & I4,
981
+ I6 extends Input = I & I2 & I3 & I4 & I5,
982
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
983
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
984
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
985
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
986
+ E2 extends Env = E,
987
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
988
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
989
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
990
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
991
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
992
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
993
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
994
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
995
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
996
+ // Middleware
997
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
998
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
999
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1000
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1001
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
1002
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
1003
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
1004
+ M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>,
1005
+ M9 extends H<E10, MergedPath, I9> = H<E10, MergedPath, I9>,
1006
+ >(
1007
+ path: P,
1008
+ ...handlers: [
1009
+ H<E2, MergedPath, I> & M1,
1010
+ H<E3, MergedPath, I2> & M2,
1011
+ H<E4, MergedPath, I3> & M3,
1012
+ H<E5, MergedPath, I4> & M4,
1013
+ H<E6, MergedPath, I5> & M5,
1014
+ H<E7, MergedPath, I6> & M6,
1015
+ H<E8, MergedPath, I7> & M7,
1016
+ H<E9, MergedPath, I8> & M8,
1017
+ H<E10, MergedPath, I9> & M9,
1018
+ H<E11, MergedPath, I10, R>,
1019
+ ]
1020
+ ): AppBase<
1021
+ E,
1022
+ AddSchemaIfHasResponse<
1023
+ | MergeTypedResponse<R>
1024
+ | MergeMiddlewareResponse<M1>
1025
+ | MergeMiddlewareResponse<M2>
1026
+ | MergeMiddlewareResponse<M3>
1027
+ | MergeMiddlewareResponse<M4>
1028
+ | MergeMiddlewareResponse<M5>
1029
+ | MergeMiddlewareResponse<M6>
1030
+ | MergeMiddlewareResponse<M7>
1031
+ | MergeMiddlewareResponse<M8>
1032
+ | MergeMiddlewareResponse<M9>,
1033
+ S,
1034
+ M,
1035
+ P,
1036
+ I10,
1037
+ BasePath
1038
+ >,
1039
+ BasePath,
1040
+ MergePath<BasePath, P>
1041
+ >
1042
+
1043
+ // app.get(...handlers[])
1044
+ <
1045
+ P extends string = CurrentPath,
1046
+ I extends Input = BlankInput,
1047
+ R extends HandlerResponse<any> = any,
1048
+ >(
1049
+ ...handlers: H<E, P, I, R>[]
1050
+ ): AppBase<E, S & ToSchema<M, P, I, MergeTypedResponse<R>>, BasePath, CurrentPath>
1051
+
1052
+ // app.get(path, ...handlers[])
1053
+ <P extends string, I extends Input = BlankInput, R extends HandlerResponse<any> = any>(
1054
+ path: P,
1055
+ ...handlers: [H<E, MergePath<BasePath, P>, I, R>, ...H<E, MergePath<BasePath, P>, I, R>[]]
1056
+ ): AppBase<
1057
+ E,
1058
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1059
+ BasePath,
1060
+ MergePath<BasePath, P>
1061
+ >
1062
+
1063
+ // app.get(path)
1064
+ <P extends string, R extends HandlerResponse<any> = any, I extends Input = BlankInput>(
1065
+ path: P
1066
+ ): AppBase<
1067
+ E,
1068
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1069
+ BasePath,
1070
+ MergePath<BasePath, P>
1071
+ >
1072
+ }
1073
+
1074
+ ////////////////////////////////////////
1075
+ ////// //////
1076
+ ////// MiddlewareHandlerInterface //////
1077
+ ////// //////
1078
+ ////////////////////////////////////////
1079
+
1080
+ export interface MiddlewareHandlerInterface<
1081
+ E extends Env = Env,
1082
+ S extends Schema = BlankSchema,
1083
+ BasePath extends string = '/',
1084
+ > {
1085
+ //// app.use(...handlers[])
1086
+ <E2 extends Env = E>(
1087
+ ...handlers: MiddlewareHandler<E2, MergePath<BasePath, '*'>>[]
1088
+ ): AppBase<IntersectNonAnyTypes<[E, E2]>, S, BasePath, MergePath<BasePath, '*'>>
1089
+
1090
+ // app.use(handler)
1091
+ <E2 extends Env = E>(
1092
+ handler: MiddlewareHandler<E2, MergePath<BasePath, '*'>>
1093
+ ): AppBase<IntersectNonAnyTypes<[E, E2]>, S, BasePath, MergePath<BasePath, '*'>>
1094
+
1095
+ // app.use(handler x2)
1096
+ <
1097
+ E2 extends Env = E,
1098
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1099
+ P extends string = MergePath<BasePath, '*'>,
1100
+ >(
1101
+ ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]
1102
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3]>, S, BasePath, P>
1103
+
1104
+ // app.use(path, handler)
1105
+ <P extends string, MergedPath extends MergePath<BasePath, P>, E2 extends Env = E>(
1106
+ path: P,
1107
+ handler: MiddlewareHandler<E2, MergedPath, any, any>
1108
+ ): AppBase<IntersectNonAnyTypes<[E, E2]>, S, BasePath, MergedPath>
1109
+
1110
+ // app.use(handler x3)
1111
+ <
1112
+ E2 extends Env = E,
1113
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1114
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1115
+ P extends string = MergePath<BasePath, '*'>,
1116
+ >(
1117
+ ...handlers: [
1118
+ MiddlewareHandler<E2, P, any, any>,
1119
+ MiddlewareHandler<E3, P, any, any>,
1120
+ MiddlewareHandler<E4, P, any, any>,
1121
+ ]
1122
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4]>, S, BasePath, P>
1123
+
1124
+ // app.use(path, handler x2)
1125
+ <
1126
+ P extends string,
1127
+ MergedPath extends MergePath<BasePath, P>,
1128
+ E2 extends Env = E,
1129
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1130
+ >(
1131
+ path: P,
1132
+ ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>]
1133
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3]>, S, BasePath, MergedPath>
1134
+
1135
+ // app.use(handler x4)
1136
+ <
1137
+ E2 extends Env = E,
1138
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1139
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1140
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1141
+ P extends string = MergePath<BasePath, '*'>,
1142
+ >(
1143
+ ...handlers: [
1144
+ MiddlewareHandler<E2, P>,
1145
+ MiddlewareHandler<E3, P>,
1146
+ MiddlewareHandler<E4, P>,
1147
+ MiddlewareHandler<E5, P>,
1148
+ ]
1149
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S, BasePath, P>
1150
+
1151
+ // app.use(path, handler x3)
1152
+ <
1153
+ P extends string,
1154
+ MergedPath extends MergePath<BasePath, P>,
1155
+ E2 extends Env = E,
1156
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1157
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1158
+ >(
1159
+ path: P,
1160
+ ...handlers: [MiddlewareHandler<E2, P>, MiddlewareHandler<E3, P>, MiddlewareHandler<E4, P>]
1161
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4]>, S, BasePath, MergedPath>
1162
+
1163
+ // app.use(handler x5)
1164
+ <
1165
+ E2 extends Env = E,
1166
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1167
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1168
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1169
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1170
+ P extends string = MergePath<BasePath, '*'>,
1171
+ >(
1172
+ ...handlers: [
1173
+ MiddlewareHandler<E2, P>,
1174
+ MiddlewareHandler<E3, P>,
1175
+ MiddlewareHandler<E4, P>,
1176
+ MiddlewareHandler<E5, P>,
1177
+ MiddlewareHandler<E6, P>,
1178
+ ]
1179
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S, BasePath, P>
1180
+
1181
+ // app.use(path, handler x4)
1182
+ <
1183
+ P extends string,
1184
+ MergedPath extends MergePath<BasePath, P>,
1185
+ E2 extends Env = E,
1186
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1187
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1188
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1189
+ >(
1190
+ path: P,
1191
+ ...handlers: [
1192
+ MiddlewareHandler<E2, P>,
1193
+ MiddlewareHandler<E3, P>,
1194
+ MiddlewareHandler<E4, P>,
1195
+ MiddlewareHandler<E5, P>,
1196
+ ]
1197
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5]>, S, BasePath, MergedPath>
1198
+
1199
+ // app.use(handler x6)
1200
+ <
1201
+ E2 extends Env = E,
1202
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1203
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1204
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1205
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1206
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1207
+ P extends string = MergePath<BasePath, '*'>,
1208
+ >(
1209
+ ...handlers: [
1210
+ MiddlewareHandler<E2, P>,
1211
+ MiddlewareHandler<E3, P>,
1212
+ MiddlewareHandler<E4, P>,
1213
+ MiddlewareHandler<E5, P>,
1214
+ MiddlewareHandler<E6, P>,
1215
+ MiddlewareHandler<E7, P>,
1216
+ ]
1217
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S, BasePath, P>
1218
+
1219
+ // app.use(path, handler x5)
1220
+ <
1221
+ P extends string,
1222
+ MergedPath extends MergePath<BasePath, P>,
1223
+ E2 extends Env = E,
1224
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1225
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1226
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1227
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1228
+ >(
1229
+ path: P,
1230
+ ...handlers: [
1231
+ MiddlewareHandler<E2, P>,
1232
+ MiddlewareHandler<E3, P>,
1233
+ MiddlewareHandler<E4, P>,
1234
+ MiddlewareHandler<E5, P>,
1235
+ MiddlewareHandler<E6, P>,
1236
+ ]
1237
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>, S, BasePath, MergedPath>
1238
+
1239
+ // app.use(handler x7)
1240
+ <
1241
+ E2 extends Env = E,
1242
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1243
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1244
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1245
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1246
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1247
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1248
+ P extends string = MergePath<BasePath, '*'>,
1249
+ >(
1250
+ ...handlers: [
1251
+ MiddlewareHandler<E2, P>,
1252
+ MiddlewareHandler<E3, P>,
1253
+ MiddlewareHandler<E4, P>,
1254
+ MiddlewareHandler<E5, P>,
1255
+ MiddlewareHandler<E6, P>,
1256
+ MiddlewareHandler<E7, P>,
1257
+ MiddlewareHandler<E8, P>,
1258
+ ]
1259
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S, BasePath, P>
1260
+
1261
+ // app.use(path, handler x6)
1262
+ <
1263
+ P extends string,
1264
+ MergedPath extends MergePath<BasePath, P>,
1265
+ E2 extends Env = E,
1266
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1267
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1268
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1269
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1270
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1271
+ >(
1272
+ path: P,
1273
+ ...handlers: [
1274
+ MiddlewareHandler<E2, P>,
1275
+ MiddlewareHandler<E3, P>,
1276
+ MiddlewareHandler<E4, P>,
1277
+ MiddlewareHandler<E5, P>,
1278
+ MiddlewareHandler<E6, P>,
1279
+ MiddlewareHandler<E7, P>,
1280
+ ]
1281
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>, S, BasePath, MergedPath>
1282
+
1283
+ // app.use(handler x8)
1284
+ <
1285
+ E2 extends Env = E,
1286
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1287
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1288
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1289
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1290
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1291
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1292
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1293
+ P extends string = MergePath<BasePath, '*'>,
1294
+ >(
1295
+ ...handlers: [
1296
+ MiddlewareHandler<E2, P>,
1297
+ MiddlewareHandler<E3, P>,
1298
+ MiddlewareHandler<E4, P>,
1299
+ MiddlewareHandler<E5, P>,
1300
+ MiddlewareHandler<E6, P>,
1301
+ MiddlewareHandler<E7, P>,
1302
+ MiddlewareHandler<E8, P>,
1303
+ MiddlewareHandler<E9, P>,
1304
+ ]
1305
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S, BasePath, P>
1306
+
1307
+ // app.use(path, handler x7)
1308
+ <
1309
+ P extends string,
1310
+ MergedPath extends MergePath<BasePath, P>,
1311
+ E2 extends Env = E,
1312
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1313
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1314
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1315
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1316
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1317
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1318
+ >(
1319
+ path: P,
1320
+ ...handlers: [
1321
+ MiddlewareHandler<E2, P>,
1322
+ MiddlewareHandler<E3, P>,
1323
+ MiddlewareHandler<E4, P>,
1324
+ MiddlewareHandler<E5, P>,
1325
+ MiddlewareHandler<E6, P>,
1326
+ MiddlewareHandler<E7, P>,
1327
+ MiddlewareHandler<E8, P>,
1328
+ ]
1329
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>, S, BasePath, MergedPath>
1330
+
1331
+ // app.use(handler x9)
1332
+ <
1333
+ E2 extends Env = E,
1334
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1335
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1336
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1337
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1338
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1339
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1340
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1341
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1342
+ P extends string = MergePath<BasePath, '*'>,
1343
+ >(
1344
+ ...handlers: [
1345
+ MiddlewareHandler<E2, P>,
1346
+ MiddlewareHandler<E3, P>,
1347
+ MiddlewareHandler<E4, P>,
1348
+ MiddlewareHandler<E5, P>,
1349
+ MiddlewareHandler<E6, P>,
1350
+ MiddlewareHandler<E7, P>,
1351
+ MiddlewareHandler<E8, P>,
1352
+ MiddlewareHandler<E9, P>,
1353
+ MiddlewareHandler<E10, P>,
1354
+ ]
1355
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>, S, BasePath, P>
1356
+
1357
+ // app.use(path, handler x8)
1358
+ <
1359
+ P extends string,
1360
+ MergedPath extends MergePath<BasePath, P>,
1361
+ E2 extends Env = E,
1362
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1363
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1364
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1365
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1366
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1367
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1368
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1369
+ >(
1370
+ path: P,
1371
+ ...handlers: [
1372
+ MiddlewareHandler<E2, P>,
1373
+ MiddlewareHandler<E3, P>,
1374
+ MiddlewareHandler<E4, P>,
1375
+ MiddlewareHandler<E5, P>,
1376
+ MiddlewareHandler<E6, P>,
1377
+ MiddlewareHandler<E7, P>,
1378
+ MiddlewareHandler<E8, P>,
1379
+ MiddlewareHandler<E9, P>,
1380
+ ]
1381
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>, S, BasePath, MergedPath>
1382
+
1383
+ // app.use(handler x10)
1384
+ <
1385
+ E2 extends Env = E,
1386
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1387
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1388
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1389
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1390
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1391
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1392
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1393
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1394
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1395
+ P extends string = MergePath<BasePath, '*'>,
1396
+ >(
1397
+ ...handlers: [
1398
+ MiddlewareHandler<E2, P>,
1399
+ MiddlewareHandler<E3, P>,
1400
+ MiddlewareHandler<E4, P>,
1401
+ MiddlewareHandler<E5, P>,
1402
+ MiddlewareHandler<E6, P>,
1403
+ MiddlewareHandler<E7, P>,
1404
+ MiddlewareHandler<E8, P>,
1405
+ MiddlewareHandler<E9, P>,
1406
+ MiddlewareHandler<E10, P>,
1407
+ MiddlewareHandler<E11, P>,
1408
+ ]
1409
+ ): AppBase<IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>, S, BasePath, P>
1410
+
1411
+ // app.use(path, handler x9)
1412
+ <
1413
+ P extends string,
1414
+ MergedPath extends MergePath<BasePath, P>,
1415
+ E2 extends Env = E,
1416
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1417
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1418
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1419
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1420
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1421
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1422
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1423
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1424
+ >(
1425
+ path: P,
1426
+ ...handlers: [
1427
+ MiddlewareHandler<E2, P>,
1428
+ MiddlewareHandler<E3, P>,
1429
+ MiddlewareHandler<E4, P>,
1430
+ MiddlewareHandler<E5, P>,
1431
+ MiddlewareHandler<E6, P>,
1432
+ MiddlewareHandler<E7, P>,
1433
+ MiddlewareHandler<E8, P>,
1434
+ MiddlewareHandler<E9, P>,
1435
+ MiddlewareHandler<E10, P>,
1436
+ ]
1437
+ ): AppBase<
1438
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1439
+ S,
1440
+ BasePath,
1441
+ MergedPath
1442
+ >
1443
+
1444
+ //// app.use(path, ...handlers[])
1445
+ <P extends string, E2 extends Env = E>(
1446
+ path: P,
1447
+ ...handlers: MiddlewareHandler<E2, MergePath<BasePath, P>>[]
1448
+ ): AppBase<E, S, BasePath, MergePath<BasePath, P>>
1449
+ }
1450
+
1451
+ ////////////////////////////////////////
1452
+ ////// //////
1453
+ ////// OnHandlerInterface //////
1454
+ ////// //////
1455
+ ////////////////////////////////////////
1456
+
1457
+ export interface OnHandlerInterface<
1458
+ E extends Env = Env,
1459
+ S extends Schema = BlankSchema,
1460
+ BasePath extends string = '/',
1461
+ > {
1462
+ // app.on(method, path, handler)
1463
+ <
1464
+ M extends string,
1465
+ P extends string,
1466
+ MergedPath extends MergePath<BasePath, P>,
1467
+ R extends HandlerResponse<any> = any,
1468
+ I extends Input = BlankInput,
1469
+ E2 extends Env = E,
1470
+ >(
1471
+ method: M,
1472
+ path: P,
1473
+ handler: H<E2, MergedPath, I, R>
1474
+ ): AppBase<
1475
+ IntersectNonAnyTypes<[E, E2]>,
1476
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1477
+ BasePath,
1478
+ MergePath<BasePath, P>
1479
+ >
1480
+
1481
+ // app.on(method, path, handler x2)
1482
+ <
1483
+ M extends string,
1484
+ P extends string,
1485
+ MergedPath extends MergePath<BasePath, P>,
1486
+ R extends HandlerResponse<any> = any,
1487
+ I extends Input = BlankInput,
1488
+ I2 extends Input = I,
1489
+ E2 extends Env = E,
1490
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1491
+ // Middleware
1492
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1493
+ >(
1494
+ method: M,
1495
+ path: P,
1496
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2, R>]
1497
+ ): AppBase<
1498
+ IntersectNonAnyTypes<[E, E2, E3]>,
1499
+ S &
1500
+ ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R> | MergeMiddlewareResponse<M1>>,
1501
+ BasePath,
1502
+ MergePath<BasePath, P>
1503
+ >
1504
+
1505
+ // app.on(method, path, handler x3)
1506
+ <
1507
+ M extends string,
1508
+ P extends string,
1509
+ MergedPath extends MergePath<BasePath, P>,
1510
+ R extends HandlerResponse<any> = any,
1511
+ I extends Input = BlankInput,
1512
+ I2 extends Input = I,
1513
+ I3 extends Input = I & I2,
1514
+ E2 extends Env = E,
1515
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1516
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1517
+ // Middleware
1518
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1519
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1520
+ >(
1521
+ method: M,
1522
+ path: P,
1523
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2> & M2, H<E4, MergedPath, I3, R>]
1524
+ ): AppBase<
1525
+ IntersectNonAnyTypes<[E, E2, E3, E4]>,
1526
+ S &
1527
+ ToSchema<
1528
+ M,
1529
+ MergePath<BasePath, P>,
1530
+ I3,
1531
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>
1532
+ >,
1533
+ BasePath,
1534
+ MergePath<BasePath, P>
1535
+ >
1536
+
1537
+ // app.on(method, path, handler x4)
1538
+ <
1539
+ M extends string,
1540
+ P extends string,
1541
+ MergedPath extends MergePath<BasePath, P>,
1542
+ R extends HandlerResponse<any> = any,
1543
+ I extends Input = BlankInput,
1544
+ I2 extends Input = I,
1545
+ I3 extends Input = I & I2,
1546
+ I4 extends Input = I & I2 & I3,
1547
+ E2 extends Env = E,
1548
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1549
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1550
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1551
+ // Middleware
1552
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1553
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1554
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1555
+ >(
1556
+ method: M,
1557
+ path: P,
1558
+ ...handlers: [
1559
+ H<E2, MergedPath, I> & M1,
1560
+ H<E3, MergedPath, I2> & M2,
1561
+ H<E4, MergedPath, I3> & M3,
1562
+ H<E5, MergedPath, I4, R>,
1563
+ ]
1564
+ ): AppBase<
1565
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1566
+ S &
1567
+ ToSchema<
1568
+ M,
1569
+ MergePath<BasePath, P>,
1570
+ I4,
1571
+ | MergeTypedResponse<R>
1572
+ | MergeMiddlewareResponse<M1>
1573
+ | MergeMiddlewareResponse<M2>
1574
+ | MergeMiddlewareResponse<M3>
1575
+ >,
1576
+ BasePath,
1577
+ MergePath<BasePath, P>
1578
+ >
1579
+
1580
+ // app.on(method, path, handler x5)
1581
+ <
1582
+ M extends string,
1583
+ P extends string,
1584
+ MergedPath extends MergePath<BasePath, P>,
1585
+ R extends HandlerResponse<any> = any,
1586
+ I extends Input = BlankInput,
1587
+ I2 extends Input = I,
1588
+ I3 extends Input = I & I2,
1589
+ I4 extends Input = I & I2 & I3,
1590
+ I5 extends Input = I & I2 & I3 & I4,
1591
+ E2 extends Env = E,
1592
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1593
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1594
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1595
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1596
+ // Middleware
1597
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1598
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1599
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1600
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1601
+ >(
1602
+ method: M,
1603
+ path: P,
1604
+ ...handlers: [
1605
+ H<E2, MergedPath, I> & M1,
1606
+ H<E3, MergedPath, I2> & M2,
1607
+ H<E4, MergedPath, I3> & M3,
1608
+ H<E5, MergedPath, I4> & M4,
1609
+ H<E6, MergedPath, I5, R>,
1610
+ ]
1611
+ ): AppBase<
1612
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1613
+ S &
1614
+ ToSchema<
1615
+ M,
1616
+ MergePath<BasePath, P>,
1617
+ I5,
1618
+ | MergeTypedResponse<R>
1619
+ | MergeMiddlewareResponse<M1>
1620
+ | MergeMiddlewareResponse<M2>
1621
+ | MergeMiddlewareResponse<M3>
1622
+ | MergeMiddlewareResponse<M4>
1623
+ >,
1624
+ BasePath,
1625
+ MergePath<BasePath, P>
1626
+ >
1627
+
1628
+ // app.on(method, path, handler x6)
1629
+ <
1630
+ M extends string,
1631
+ P extends string,
1632
+ MergedPath extends MergePath<BasePath, P>,
1633
+ R extends HandlerResponse<any> = any,
1634
+ I extends Input = BlankInput,
1635
+ I2 extends Input = I,
1636
+ I3 extends Input = I & I2,
1637
+ I4 extends Input = I & I2 & I3,
1638
+ I5 extends Input = I & I2 & I3 & I4,
1639
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1640
+ E2 extends Env = E,
1641
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1642
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1643
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1644
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1645
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1646
+ // Middleware
1647
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1648
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1649
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1650
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1651
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
1652
+ >(
1653
+ method: M,
1654
+ path: P,
1655
+ ...handlers: [
1656
+ H<E2, MergedPath, I> & M1,
1657
+ H<E3, MergedPath, I2> & M2,
1658
+ H<E4, MergedPath, I3> & M3,
1659
+ H<E5, MergedPath, I4> & M4,
1660
+ H<E6, MergedPath, I5> & M5,
1661
+ H<E7, MergedPath, I6, R>,
1662
+ ]
1663
+ ): AppBase<
1664
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1665
+ S &
1666
+ ToSchema<
1667
+ M,
1668
+ MergePath<BasePath, P>,
1669
+ I6,
1670
+ | MergeTypedResponse<R>
1671
+ | MergeMiddlewareResponse<M1>
1672
+ | MergeMiddlewareResponse<M2>
1673
+ | MergeMiddlewareResponse<M3>
1674
+ | MergeMiddlewareResponse<M4>
1675
+ | MergeMiddlewareResponse<M5>
1676
+ >,
1677
+ BasePath,
1678
+ MergePath<BasePath, P>
1679
+ >
1680
+
1681
+ // app.on(method, path, handler x7)
1682
+ <
1683
+ M extends string,
1684
+ P extends string,
1685
+ MergedPath extends MergePath<BasePath, P>,
1686
+ R extends HandlerResponse<any> = any,
1687
+ I extends Input = BlankInput,
1688
+ I2 extends Input = I,
1689
+ I3 extends Input = I & I2,
1690
+ I4 extends Input = I & I2 & I3,
1691
+ I5 extends Input = I & I2 & I3 & I4,
1692
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1693
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1694
+ E2 extends Env = E,
1695
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1696
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1697
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1698
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1699
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1700
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1701
+ // Middleware
1702
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1703
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1704
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1705
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1706
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
1707
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
1708
+ >(
1709
+ method: M,
1710
+ path: P,
1711
+ ...handlers: [
1712
+ H<E2, MergedPath, I> & M1,
1713
+ H<E3, MergedPath, I2> & M2,
1714
+ H<E4, MergedPath, I3> & M3,
1715
+ H<E5, MergedPath, I4> & M4,
1716
+ H<E6, MergedPath, I5> & M5,
1717
+ H<E7, MergedPath, I6> & M6,
1718
+ H<E8, MergedPath, I7, R>,
1719
+ ]
1720
+ ): AppBase<
1721
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1722
+ S &
1723
+ ToSchema<
1724
+ M,
1725
+ MergePath<BasePath, P>,
1726
+ I7,
1727
+ | MergeTypedResponse<R>
1728
+ | MergeMiddlewareResponse<M1>
1729
+ | MergeMiddlewareResponse<M2>
1730
+ | MergeMiddlewareResponse<M3>
1731
+ | MergeMiddlewareResponse<M4>
1732
+ | MergeMiddlewareResponse<M5>
1733
+ | MergeMiddlewareResponse<M6>
1734
+ >,
1735
+ BasePath,
1736
+ MergePath<BasePath, P>
1737
+ >
1738
+
1739
+ // app.on(method, path, handler x8)
1740
+ <
1741
+ M extends string,
1742
+ P extends string,
1743
+ MergedPath extends MergePath<BasePath, P>,
1744
+ R extends HandlerResponse<any> = any,
1745
+ I extends Input = BlankInput,
1746
+ I2 extends Input = I,
1747
+ I3 extends Input = I & I2,
1748
+ I4 extends Input = I & I2 & I3,
1749
+ I5 extends Input = I & I2 & I3 & I4,
1750
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1751
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1752
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
1753
+ E2 extends Env = E,
1754
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1755
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1756
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1757
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1758
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1759
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1760
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1761
+ // Middleware
1762
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1763
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1764
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1765
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1766
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
1767
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
1768
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
1769
+ >(
1770
+ method: M,
1771
+ path: P,
1772
+ ...handlers: [
1773
+ H<E2, MergedPath, I> & M1,
1774
+ H<E3, MergedPath, I2> & M2,
1775
+ H<E4, MergedPath, I3> & M3,
1776
+ H<E5, MergedPath, I4> & M4,
1777
+ H<E6, MergedPath, I5> & M5,
1778
+ H<E7, MergedPath, I6> & M6,
1779
+ H<E8, MergedPath, I7> & M7,
1780
+ H<E9, MergedPath, I8, R>,
1781
+ ]
1782
+ ): AppBase<
1783
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1784
+ S &
1785
+ ToSchema<
1786
+ M,
1787
+ MergePath<BasePath, P>,
1788
+ I8,
1789
+ | MergeTypedResponse<R>
1790
+ | MergeMiddlewareResponse<M1>
1791
+ | MergeMiddlewareResponse<M2>
1792
+ | MergeMiddlewareResponse<M3>
1793
+ | MergeMiddlewareResponse<M4>
1794
+ | MergeMiddlewareResponse<M5>
1795
+ | MergeMiddlewareResponse<M6>
1796
+ | MergeMiddlewareResponse<M7>
1797
+ >,
1798
+ BasePath,
1799
+ MergePath<BasePath, P>
1800
+ >
1801
+
1802
+ // app.on(method, path, handler x9)
1803
+ <
1804
+ M extends string,
1805
+ P extends string,
1806
+ MergedPath extends MergePath<BasePath, P>,
1807
+ R extends HandlerResponse<any> = any,
1808
+ I extends Input = BlankInput,
1809
+ I2 extends Input = I,
1810
+ I3 extends Input = I & I2,
1811
+ I4 extends Input = I & I2 & I3,
1812
+ I5 extends Input = I & I2 & I3 & I4,
1813
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1814
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1815
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
1816
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
1817
+ E2 extends Env = E,
1818
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1819
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1820
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1821
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1822
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1823
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1824
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1825
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1826
+ // Middleware
1827
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1828
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1829
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1830
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1831
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
1832
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
1833
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
1834
+ M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>,
1835
+ >(
1836
+ method: M,
1837
+ path: P,
1838
+ ...handlers: [
1839
+ H<E2, MergedPath, I> & M1,
1840
+ H<E3, MergedPath, I2> & M2,
1841
+ H<E4, MergedPath, I3> & M3,
1842
+ H<E5, MergedPath, I4> & M4,
1843
+ H<E6, MergedPath, I5> & M5,
1844
+ H<E7, MergedPath, I6> & M6,
1845
+ H<E8, MergedPath, I7> & M7,
1846
+ H<E9, MergedPath, I8> & M8,
1847
+ H<E10, MergedPath, I9, R>,
1848
+ ]
1849
+ ): AppBase<
1850
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1851
+ S &
1852
+ ToSchema<
1853
+ M,
1854
+ MergePath<BasePath, P>,
1855
+ I9,
1856
+ | MergeTypedResponse<R>
1857
+ | MergeMiddlewareResponse<M1>
1858
+ | MergeMiddlewareResponse<M2>
1859
+ | MergeMiddlewareResponse<M3>
1860
+ | MergeMiddlewareResponse<M4>
1861
+ | MergeMiddlewareResponse<M5>
1862
+ | MergeMiddlewareResponse<M6>
1863
+ | MergeMiddlewareResponse<M7>
1864
+ | MergeMiddlewareResponse<M8>
1865
+ >,
1866
+ BasePath,
1867
+ MergePath<BasePath, P>
1868
+ >
1869
+
1870
+ // app.on(method, path, handler x10)
1871
+ <
1872
+ M extends string,
1873
+ P extends string,
1874
+ MergedPath extends MergePath<BasePath, P>,
1875
+ R extends HandlerResponse<any> = any,
1876
+ I extends Input = BlankInput,
1877
+ I2 extends Input = I,
1878
+ I3 extends Input = I & I2,
1879
+ I4 extends Input = I & I2 & I3,
1880
+ I5 extends Input = I & I2 & I3 & I4,
1881
+ I6 extends Input = I & I2 & I3 & I4 & I5,
1882
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
1883
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
1884
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
1885
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
1886
+ E2 extends Env = E,
1887
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1888
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
1889
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
1890
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
1891
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
1892
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
1893
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
1894
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
1895
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
1896
+ // Middleware
1897
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1898
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
1899
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
1900
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
1901
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
1902
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
1903
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
1904
+ M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>,
1905
+ M9 extends H<E10, MergedPath, I9> = H<E10, MergedPath, I9>,
1906
+ >(
1907
+ method: M,
1908
+ path: P,
1909
+ ...handlers: [
1910
+ H<E2, MergedPath, I> & M1,
1911
+ H<E3, MergedPath, I2> & M2,
1912
+ H<E4, MergedPath, I3> & M3,
1913
+ H<E5, MergedPath, I4> & M4,
1914
+ H<E6, MergedPath, I5> & M5,
1915
+ H<E7, MergedPath, I6> & M6,
1916
+ H<E8, MergedPath, I7> & M7,
1917
+ H<E9, MergedPath, I8> & M8,
1918
+ H<E10, MergedPath, I9> & M9,
1919
+ H<E11, MergedPath, I10, R>,
1920
+ ]
1921
+ ): AppBase<
1922
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>,
1923
+ S &
1924
+ ToSchema<
1925
+ M,
1926
+ MergePath<BasePath, P>,
1927
+ I10,
1928
+ | MergeTypedResponse<R>
1929
+ | MergeMiddlewareResponse<M1>
1930
+ | MergeMiddlewareResponse<M2>
1931
+ | MergeMiddlewareResponse<M3>
1932
+ | MergeMiddlewareResponse<M4>
1933
+ | MergeMiddlewareResponse<M5>
1934
+ | MergeMiddlewareResponse<M6>
1935
+ | MergeMiddlewareResponse<M7>
1936
+ | MergeMiddlewareResponse<M8>
1937
+ | MergeMiddlewareResponse<M9>
1938
+ >,
1939
+ BasePath,
1940
+ MergePath<BasePath, P>
1941
+ >
1942
+
1943
+ // app.on(method, path, ...handler)
1944
+ <
1945
+ M extends string,
1946
+ P extends string,
1947
+ R extends HandlerResponse<any> = any,
1948
+ I extends Input = BlankInput,
1949
+ >(
1950
+ method: M,
1951
+ path: P,
1952
+ ...handlers: [H<E, MergePath<BasePath, P>, I, R>, ...H<E, MergePath<BasePath, P>, I, R>[]]
1953
+ ): AppBase<
1954
+ E,
1955
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1956
+ BasePath,
1957
+ MergePath<BasePath, P>
1958
+ >
1959
+
1960
+ // app.on(method[], path, handler)
1961
+ <
1962
+ M extends string,
1963
+ P extends string,
1964
+ MergedPath extends MergePath<BasePath, P>,
1965
+ R extends HandlerResponse<any> = any,
1966
+ I extends Input = BlankInput,
1967
+ E2 extends Env = E,
1968
+ >(
1969
+ methods: M[],
1970
+ path: P,
1971
+ handler: H<E2, MergedPath, I, R>
1972
+ ): AppBase<
1973
+ IntersectNonAnyTypes<[E, E2]>,
1974
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
1975
+ BasePath,
1976
+ MergePath<BasePath, P>
1977
+ >
1978
+
1979
+ // app.on(method[], path, handler x2)
1980
+ <
1981
+ M extends string,
1982
+ P extends string,
1983
+ MergedPath extends MergePath<BasePath, P>,
1984
+ R extends HandlerResponse<any> = any,
1985
+ I extends Input = BlankInput,
1986
+ I2 extends Input = I,
1987
+ E2 extends Env = E,
1988
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
1989
+ // Middleware
1990
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
1991
+ >(
1992
+ methods: M[],
1993
+ path: P,
1994
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2, R>]
1995
+ ): AppBase<
1996
+ IntersectNonAnyTypes<[E, E2, E3]>,
1997
+ S &
1998
+ ToSchema<M, MergePath<BasePath, P>, I2, MergeTypedResponse<R> | MergeMiddlewareResponse<M1>>,
1999
+ BasePath,
2000
+ MergePath<BasePath, P>
2001
+ >
2002
+
2003
+ // app.on(method[], path, handler x3)
2004
+ <
2005
+ M extends string,
2006
+ P extends string,
2007
+ MergedPath extends MergePath<BasePath, P>,
2008
+ R extends HandlerResponse<any> = any,
2009
+ I extends Input = BlankInput,
2010
+ I2 extends Input = I,
2011
+ I3 extends Input = I & I2,
2012
+ E2 extends Env = E,
2013
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2014
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2015
+ // Middleware
2016
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2017
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2018
+ >(
2019
+ methods: M[],
2020
+ path: P,
2021
+ ...handlers: [H<E2, MergedPath, I> & M1, H<E3, MergedPath, I2> & M2, H<E4, MergedPath, I3, R>]
2022
+ ): AppBase<
2023
+ IntersectNonAnyTypes<[E, E2, E3, E4]>,
2024
+ S &
2025
+ ToSchema<
2026
+ M,
2027
+ MergePath<BasePath, P>,
2028
+ I3,
2029
+ MergeTypedResponse<R> | MergeMiddlewareResponse<M1> | MergeMiddlewareResponse<M2>
2030
+ >,
2031
+ BasePath,
2032
+ MergePath<BasePath, P>
2033
+ >
2034
+
2035
+ // app.on(method[], path, handler x4)
2036
+ <
2037
+ M extends string,
2038
+ P extends string,
2039
+ MergedPath extends MergePath<BasePath, P>,
2040
+ R extends HandlerResponse<any> = any,
2041
+ I extends Input = BlankInput,
2042
+ I2 extends Input = I,
2043
+ I3 extends Input = I & I2,
2044
+ I4 extends Input = I & I2 & I3,
2045
+ E2 extends Env = E,
2046
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2047
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2048
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2049
+ // Middleware
2050
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2051
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2052
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2053
+ >(
2054
+ methods: M[],
2055
+ path: P,
2056
+ ...handlers: [
2057
+ H<E2, MergedPath, I> & M1,
2058
+ H<E3, MergedPath, I2> & M2,
2059
+ H<E4, MergedPath, I3> & M3,
2060
+ H<E5, MergedPath, I4, R>,
2061
+ ]
2062
+ ): AppBase<
2063
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2064
+ S &
2065
+ ToSchema<
2066
+ M,
2067
+ MergePath<BasePath, P>,
2068
+ I4,
2069
+ | MergeTypedResponse<R>
2070
+ | MergeMiddlewareResponse<M1>
2071
+ | MergeMiddlewareResponse<M2>
2072
+ | MergeMiddlewareResponse<M3>
2073
+ >,
2074
+ BasePath,
2075
+ MergePath<BasePath, P>
2076
+ >
2077
+
2078
+ // app.on(method[], path, handler x5)
2079
+ <
2080
+ M extends string,
2081
+ P extends string,
2082
+ MergedPath extends MergePath<BasePath, P>,
2083
+ R extends HandlerResponse<any> = any,
2084
+ I extends Input = BlankInput,
2085
+ I2 extends Input = I,
2086
+ I3 extends Input = I & I2,
2087
+ I4 extends Input = I & I2 & I3,
2088
+ I5 extends Input = I & I2 & I3 & I4,
2089
+ E2 extends Env = E,
2090
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2091
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2092
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2093
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2094
+ // Middleware
2095
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2096
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2097
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2098
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
2099
+ >(
2100
+ methods: M[],
2101
+ path: P,
2102
+ ...handlers: [
2103
+ H<E2, MergedPath, I> & M1,
2104
+ H<E3, MergedPath, I2> & M2,
2105
+ H<E4, MergedPath, I3> & M3,
2106
+ H<E5, MergedPath, I4> & M4,
2107
+ H<E6, MergedPath, I5, R>,
2108
+ ]
2109
+ ): AppBase<
2110
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2111
+ S &
2112
+ ToSchema<
2113
+ M,
2114
+ MergePath<BasePath, P>,
2115
+ I5,
2116
+ | MergeTypedResponse<R>
2117
+ | MergeMiddlewareResponse<M1>
2118
+ | MergeMiddlewareResponse<M2>
2119
+ | MergeMiddlewareResponse<M3>
2120
+ | MergeMiddlewareResponse<M4>
2121
+ >,
2122
+ BasePath,
2123
+ MergePath<BasePath, P>
2124
+ >
2125
+
2126
+ // app.on(method[], path, handler x6)
2127
+ <
2128
+ M extends string,
2129
+ P extends string,
2130
+ MergedPath extends MergePath<BasePath, P>,
2131
+ R extends HandlerResponse<any> = any,
2132
+ I extends Input = BlankInput,
2133
+ I2 extends Input = I,
2134
+ I3 extends Input = I & I2,
2135
+ I4 extends Input = I & I2 & I3,
2136
+ I5 extends Input = I & I2 & I3 & I4,
2137
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2138
+ E2 extends Env = E,
2139
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2140
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2141
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2142
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2143
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2144
+ // Middleware
2145
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2146
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2147
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2148
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
2149
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
2150
+ >(
2151
+ methods: M[],
2152
+ path: P,
2153
+ ...handlers: [
2154
+ H<E2, MergedPath, I> & M1,
2155
+ H<E3, MergedPath, I2> & M2,
2156
+ H<E4, MergedPath, I3> & M3,
2157
+ H<E5, MergedPath, I4> & M4,
2158
+ H<E6, MergedPath, I5> & M5,
2159
+ H<E7, MergedPath, I6, R>,
2160
+ ]
2161
+ ): AppBase<
2162
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2163
+ S &
2164
+ ToSchema<
2165
+ M,
2166
+ MergePath<BasePath, P>,
2167
+ I6,
2168
+ | MergeTypedResponse<R>
2169
+ | MergeMiddlewareResponse<M1>
2170
+ | MergeMiddlewareResponse<M2>
2171
+ | MergeMiddlewareResponse<M3>
2172
+ | MergeMiddlewareResponse<M4>
2173
+ | MergeMiddlewareResponse<M5>
2174
+ >,
2175
+ BasePath,
2176
+ MergePath<BasePath, P>
2177
+ >
2178
+
2179
+ // app.on(method[], path, handler x7)
2180
+ <
2181
+ M extends string,
2182
+ P extends string,
2183
+ MergedPath extends MergePath<BasePath, P>,
2184
+ R extends HandlerResponse<any> = any,
2185
+ I extends Input = BlankInput,
2186
+ I2 extends Input = I,
2187
+ I3 extends Input = I & I2,
2188
+ I4 extends Input = I & I2 & I3,
2189
+ I5 extends Input = I & I2 & I3 & I4,
2190
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2191
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2192
+ E2 extends Env = E,
2193
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2194
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2195
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2196
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2197
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2198
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2199
+ // Middleware
2200
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2201
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2202
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2203
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
2204
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
2205
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
2206
+ >(
2207
+ methods: M[],
2208
+ path: P,
2209
+ ...handlers: [
2210
+ H<E2, MergedPath, I> & M1,
2211
+ H<E3, MergedPath, I2> & M2,
2212
+ H<E4, MergedPath, I3> & M3,
2213
+ H<E5, MergedPath, I4> & M4,
2214
+ H<E6, MergedPath, I5> & M5,
2215
+ H<E7, MergedPath, I6> & M6,
2216
+ H<E8, MergedPath, I7, R>,
2217
+ ]
2218
+ ): AppBase<
2219
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2220
+ S &
2221
+ ToSchema<
2222
+ M,
2223
+ MergePath<BasePath, P>,
2224
+ I7,
2225
+ | MergeTypedResponse<R>
2226
+ | MergeMiddlewareResponse<M1>
2227
+ | MergeMiddlewareResponse<M2>
2228
+ | MergeMiddlewareResponse<M3>
2229
+ | MergeMiddlewareResponse<M4>
2230
+ | MergeMiddlewareResponse<M5>
2231
+ | MergeMiddlewareResponse<M6>
2232
+ >,
2233
+ BasePath,
2234
+ MergePath<BasePath, P>
2235
+ >
2236
+
2237
+ // app.on(method[], path, handler x8)
2238
+ <
2239
+ M extends string,
2240
+ P extends string,
2241
+ MergedPath extends MergePath<BasePath, P>,
2242
+ R extends HandlerResponse<any> = any,
2243
+ I extends Input = BlankInput,
2244
+ I2 extends Input = I,
2245
+ I3 extends Input = I & I2,
2246
+ I4 extends Input = I & I2 & I3,
2247
+ I5 extends Input = I & I2 & I3 & I4,
2248
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2249
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2250
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
2251
+ E2 extends Env = E,
2252
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2253
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2254
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2255
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2256
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2257
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2258
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2259
+ // Middleware
2260
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2261
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2262
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2263
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
2264
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
2265
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
2266
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
2267
+ >(
2268
+ methods: M[],
2269
+ path: P,
2270
+ ...handlers: [
2271
+ H<E2, MergedPath, I> & M1,
2272
+ H<E3, MergedPath, I2> & M2,
2273
+ H<E4, MergedPath, I3> & M3,
2274
+ H<E5, MergedPath, I4> & M4,
2275
+ H<E6, MergedPath, I5> & M5,
2276
+ H<E7, MergedPath, I6> & M6,
2277
+ H<E8, MergedPath, I7> & M7,
2278
+ H<E9, MergedPath, I8, R>,
2279
+ ]
2280
+ ): AppBase<
2281
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
2282
+ S &
2283
+ ToSchema<
2284
+ M,
2285
+ MergePath<BasePath, P>,
2286
+ I8,
2287
+ | MergeTypedResponse<R>
2288
+ | MergeMiddlewareResponse<M1>
2289
+ | MergeMiddlewareResponse<M2>
2290
+ | MergeMiddlewareResponse<M3>
2291
+ | MergeMiddlewareResponse<M4>
2292
+ | MergeMiddlewareResponse<M5>
2293
+ | MergeMiddlewareResponse<M6>
2294
+ | MergeMiddlewareResponse<M7>
2295
+ >,
2296
+ BasePath,
2297
+ MergePath<BasePath, P>
2298
+ >
2299
+
2300
+ // app.on(method[], path, handler x9)
2301
+ <
2302
+ M extends string,
2303
+ P extends string,
2304
+ MergedPath extends MergePath<BasePath, P>,
2305
+ R extends HandlerResponse<any> = any,
2306
+ I extends Input = BlankInput,
2307
+ I2 extends Input = I,
2308
+ I3 extends Input = I & I2,
2309
+ I4 extends Input = I & I2 & I3,
2310
+ I5 extends Input = I & I2 & I3 & I4,
2311
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2312
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2313
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
2314
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
2315
+ E2 extends Env = E,
2316
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2317
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2318
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2319
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2320
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2321
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2322
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2323
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
2324
+ // Middleware
2325
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2326
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2327
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2328
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
2329
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
2330
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
2331
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
2332
+ M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>,
2333
+ >(
2334
+ methods: M[],
2335
+ path: P,
2336
+ ...handlers: [
2337
+ H<E2, MergedPath, I> & M1,
2338
+ H<E3, MergedPath, I2> & M2,
2339
+ H<E4, MergedPath, I3> & M3,
2340
+ H<E5, MergedPath, I4> & M4,
2341
+ H<E6, MergedPath, I5> & M5,
2342
+ H<E7, MergedPath, I6> & M6,
2343
+ H<E8, MergedPath, I7> & M7,
2344
+ H<E9, MergedPath, I8> & M8,
2345
+ H<E10, MergedPath, I9, R>,
2346
+ ]
2347
+ ): AppBase<
2348
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
2349
+ S &
2350
+ ToSchema<
2351
+ M,
2352
+ MergePath<BasePath, P>,
2353
+ I9,
2354
+ | MergeTypedResponse<R>
2355
+ | MergeMiddlewareResponse<M1>
2356
+ | MergeMiddlewareResponse<M2>
2357
+ | MergeMiddlewareResponse<M3>
2358
+ | MergeMiddlewareResponse<M4>
2359
+ | MergeMiddlewareResponse<M5>
2360
+ | MergeMiddlewareResponse<M6>
2361
+ | MergeMiddlewareResponse<M7>
2362
+ | MergeMiddlewareResponse<M8>
2363
+ >,
2364
+ BasePath,
2365
+ MergePath<BasePath, P>
2366
+ >
2367
+
2368
+ // app.on(method[], path, handler x10)
2369
+ <
2370
+ M extends string,
2371
+ P extends string,
2372
+ MergedPath extends MergePath<BasePath, P>,
2373
+ R extends HandlerResponse<any> = any,
2374
+ I extends Input = BlankInput,
2375
+ I2 extends Input = I,
2376
+ I3 extends Input = I & I2,
2377
+ I4 extends Input = I & I2 & I3,
2378
+ I5 extends Input = I & I2 & I3 & I4,
2379
+ I6 extends Input = I & I2 & I3 & I4 & I5,
2380
+ I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
2381
+ I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
2382
+ I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
2383
+ I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
2384
+ E2 extends Env = E,
2385
+ E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
2386
+ E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
2387
+ E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
2388
+ E6 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
2389
+ E7 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6]>,
2390
+ E8 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7]>,
2391
+ E9 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8]>,
2392
+ E10 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9]>,
2393
+ E11 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10]>,
2394
+ // Middleware
2395
+ M1 extends H<E2, MergedPath, I> = H<E2, MergedPath, I>,
2396
+ M2 extends H<E3, MergedPath, I2> = H<E3, MergedPath, I2>,
2397
+ M3 extends H<E4, MergedPath, I3> = H<E4, MergedPath, I3>,
2398
+ M4 extends H<E5, MergedPath, I4> = H<E5, MergedPath, I4>,
2399
+ M5 extends H<E6, MergedPath, I5> = H<E6, MergedPath, I5>,
2400
+ M6 extends H<E7, MergedPath, I6> = H<E7, MergedPath, I6>,
2401
+ M7 extends H<E8, MergedPath, I7> = H<E8, MergedPath, I7>,
2402
+ M8 extends H<E9, MergedPath, I8> = H<E9, MergedPath, I8>,
2403
+ M9 extends H<E10, MergedPath, I9> = H<E10, MergedPath, I9>,
2404
+ >(
2405
+ methods: M[],
2406
+ path: P,
2407
+ ...handlers: [
2408
+ H<E2, MergedPath, I> & M1,
2409
+ H<E3, MergedPath, I2> & M2,
2410
+ H<E4, MergedPath, I3> & M3,
2411
+ H<E5, MergedPath, I4> & M4,
2412
+ H<E6, MergedPath, I5> & M5,
2413
+ H<E7, MergedPath, I6> & M6,
2414
+ H<E8, MergedPath, I7> & M7,
2415
+ H<E9, MergedPath, I8> & M8,
2416
+ H<E10, MergedPath, I9> & M9,
2417
+ H<E11, MergedPath, I10, R>,
2418
+ ]
2419
+ ): AppBase<
2420
+ IntersectNonAnyTypes<[E, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11]>,
2421
+ S &
2422
+ ToSchema<
2423
+ M,
2424
+ MergePath<BasePath, P>,
2425
+ I10,
2426
+ | MergeTypedResponse<R>
2427
+ | MergeMiddlewareResponse<M1>
2428
+ | MergeMiddlewareResponse<M2>
2429
+ | MergeMiddlewareResponse<M3>
2430
+ | MergeMiddlewareResponse<M4>
2431
+ | MergeMiddlewareResponse<M5>
2432
+ | MergeMiddlewareResponse<M6>
2433
+ | MergeMiddlewareResponse<M7>
2434
+ | MergeMiddlewareResponse<M8>
2435
+ | MergeMiddlewareResponse<M9>
2436
+ >,
2437
+ BasePath,
2438
+ MergePath<BasePath, P>
2439
+ >
2440
+
2441
+ // app.on(method[], path, ...handlers[])
2442
+ <
2443
+ M extends string,
2444
+ P extends string,
2445
+ R extends HandlerResponse<any> = any,
2446
+ I extends Input = BlankInput,
2447
+ >(
2448
+ methods: M[],
2449
+ path: P,
2450
+ ...handlers: [H<E, MergePath<BasePath, P>, I, R>, ...H<E, MergePath<BasePath, P>, I, R>[]]
2451
+ ): AppBase<
2452
+ E,
2453
+ S & ToSchema<M, MergePath<BasePath, P>, I, MergeTypedResponse<R>>,
2454
+ BasePath,
2455
+ MergePath<BasePath, P>
2456
+ >
2457
+
2458
+ // app.on(method | method[], path[], ...handlers[])
2459
+ <
2460
+ M extends string,
2461
+ const Ps extends string[],
2462
+ I extends Input = BlankInput,
2463
+ R extends HandlerResponse<any> = any,
2464
+ E2 extends Env = E,
2465
+ >(
2466
+ methods: M | M[],
2467
+ paths: Ps,
2468
+ ...handlers: H<E2, MergePath<BasePath, Ps[number]>, I, R>[]
2469
+ ): AppBase<
2470
+ E,
2471
+ S & ToSchema<M, MergePath<BasePath, Ps[number]>, I, MergeTypedResponse<R>>,
2472
+ BasePath,
2473
+ Ps extends [...string[], infer LastPath extends string] ? MergePath<BasePath, LastPath> : never
2474
+ >
2475
+ }
2476
+
2477
+ ////////////////////////////////////////
2478
+ ////// //////
2479
+ ////// ToSchema //////
2480
+ ////// //////
2481
+ ////////////////////////////////////////
2482
+
2483
+ type ToSchemaOutput<RorO, I extends Input | Input['in']> =
2484
+ RorO extends TypedResponse<infer T, infer U, infer F>
2485
+ ? {
2486
+ output: unknown extends T ? {} : T
2487
+ outputFormat: I extends { outputFormat: string } ? I['outputFormat'] : F
2488
+ status: U
2489
+ }
2490
+ : {
2491
+ output: unknown extends RorO ? {} : RorO
2492
+ outputFormat: unknown extends RorO
2493
+ ? 'json'
2494
+ : I extends { outputFormat: string }
2495
+ ? I['outputFormat']
2496
+ : 'json'
2497
+ status: StatusCode
2498
+ }
2499
+
2500
+ export type ToSchema<
2501
+ M extends string,
2502
+ P extends string,
2503
+ I extends Input | Input['in'],
2504
+ RorO, // Response or Output
2505
+ > =
2506
+ IsAny<RorO> extends true
2507
+ ? {
2508
+ [K in P]: {
2509
+ [K2 in M as AddDollar<K2>]: {
2510
+ input: AddParam<ExtractInput<I>, P>
2511
+ output: {}
2512
+ outputFormat: ResponseFormat
2513
+ status: StatusCode
2514
+ }
2515
+ }
2516
+ }
2517
+ : [RorO] extends [never]
2518
+ ? {}
2519
+ : [RorO] extends [Promise<void>]
2520
+ ? {}
2521
+ : {
2522
+ [K in P]: {
2523
+ [K2 in M as AddDollar<K2>]: Simplify<
2524
+ {
2525
+ input: AddParam<ExtractInput<I>, P>
2526
+ } & ToSchemaOutput<RorO, I>
2527
+ >
2528
+ }
2529
+ }
2530
+
2531
+ export type Schema = {
2532
+ [Path: string]: {
2533
+ [Method: `$${Lowercase<string>}`]: Endpoint
2534
+ }
2535
+ }
2536
+
2537
+ type AddSchemaIfHasResponse<
2538
+ Merged,
2539
+ S extends Schema,
2540
+ M extends string,
2541
+ P extends string,
2542
+ I extends Input | Input['in'],
2543
+ BasePath extends string,
2544
+ > = [Merged] extends [Promise<void>] ? S : S & ToSchema<M, MergePath<BasePath, P>, I, Merged>
2545
+
2546
+ export type Endpoint = {
2547
+ input: any
2548
+ output: any
2549
+ outputFormat: ResponseFormat
2550
+ status: StatusCode
2551
+ }
2552
+
2553
+ type ExtractParams<Path extends string> = string extends Path
2554
+ ? Record<string, string>
2555
+ : Path extends `${infer _Start}:${infer Param}/${infer Rest}`
2556
+ ? { [K in Param | keyof ExtractParams<`/${Rest}`>]: string }
2557
+ : Path extends `${infer _Start}:${infer Param}`
2558
+ ? { [K in Param]: string }
2559
+ : never
2560
+
2561
+ type FlattenIfIntersect<T> = T extends infer O ? { [K in keyof O]: O[K] } : never
2562
+
2563
+ export type MergeSchemaPath<OrigSchema extends Schema, SubPath extends string> = {
2564
+ [P in keyof OrigSchema as MergePath<SubPath, P & string>]: [OrigSchema[P]] extends [
2565
+ Record<string, Endpoint>,
2566
+ ]
2567
+ ? { [M in keyof OrigSchema[P]]: MergeEndpointParamsWithPath<OrigSchema[P][M], SubPath> }
2568
+ : never
2569
+ }
2570
+
2571
+ type MergeEndpointParamsWithPath<T extends Endpoint, SubPath extends string> = T extends unknown
2572
+ ? {
2573
+ input: T['input'] extends { param: infer _ }
2574
+ ? ExtractParams<SubPath> extends never
2575
+ ? T['input']
2576
+ : FlattenIfIntersect<
2577
+ T['input'] & {
2578
+ param: {
2579
+ // Maps extracted keys, stripping braces, to a string-typed record.
2580
+ [
2581
+ K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}`
2582
+ ? Prefix
2583
+ : K
2584
+ ]: string
2585
+ }
2586
+ }
2587
+ >
2588
+ : RemoveBlankRecord<ExtractParams<SubPath>> extends never
2589
+ ? T['input']
2590
+ : T['input'] & {
2591
+ // Maps extracted keys, stripping braces, to a string-typed record.
2592
+ param: {
2593
+ [
2594
+ K in keyof ExtractParams<SubPath> as K extends `${infer Prefix}{${infer _}}`
2595
+ ? Prefix
2596
+ : K
2597
+ ]: string
2598
+ }
2599
+ }
2600
+ output: T['output']
2601
+ outputFormat: T['outputFormat']
2602
+ status: T['status']
2603
+ }
2604
+ : never
2605
+ export type AddParam<I, P extends string> =
2606
+ ParamKeys<P> extends never
2607
+ ? I
2608
+ : I extends { param: infer _ }
2609
+ ? I
2610
+ : I & { param: UnionToIntersection<ParamKeyToRecord<ParamKeys<P>>> }
2611
+
2612
+ type AddDollar<T extends string> = `$${Lowercase<T>}`
2613
+
2614
+ export type MergePath<A extends string, B extends string> = B extends ''
2615
+ ? MergePath<A, '/'>
2616
+ : A extends ''
2617
+ ? B
2618
+ : A extends '/'
2619
+ ? B
2620
+ : A extends `${infer P}/`
2621
+ ? B extends `/${infer Q}`
2622
+ ? `${P}/${Q}`
2623
+ : `${P}/${B}`
2624
+ : B extends `/${infer Q}`
2625
+ ? Q extends ''
2626
+ ? A
2627
+ : `${A}/${Q}`
2628
+ : `${A}/${B}`
2629
+
2630
+ ////////////////////////////////////////
2631
+ ////// //////
2632
+ ////// TypedResponse //////
2633
+ ////// //////
2634
+ ////////////////////////////////////////
2635
+
2636
+ export type KnownResponseFormat = 'json' | 'text' | 'redirect'
2637
+ export type ResponseFormat = KnownResponseFormat | string
2638
+
2639
+ export type TypedResponse<
2640
+ T = unknown,
2641
+ U extends StatusCode = StatusCode,
2642
+ F extends ResponseFormat = T extends string
2643
+ ? 'text'
2644
+ : T extends JSONValue
2645
+ ? 'json'
2646
+ : ResponseFormat,
2647
+ > = {
2648
+ _data: T
2649
+ _status: U
2650
+ _format: F
2651
+ }
2652
+
2653
+ type MergeTypedResponse<T> =
2654
+ T extends Promise<void>
2655
+ ? T
2656
+ : T extends Promise<infer T2>
2657
+ ? T2 extends TypedResponse
2658
+ ? T2
2659
+ : TypedResponse
2660
+ : T extends TypedResponse
2661
+ ? T
2662
+ : TypedResponse
2663
+
2664
+ type ExtractTypedResponseOnly<T> = T extends TypedResponse ? T : never
2665
+
2666
+ type MergeMiddlewareResponse<T> = T extends (c: any, next: any) => Promise<infer R>
2667
+ ? Exclude<R, void> extends never
2668
+ ? never
2669
+ : Exclude<R, void> extends Response | TypedResponse<any, any, any>
2670
+ ? ExtractTypedResponseOnly<Exclude<R, void>>
2671
+ : never
2672
+ : T extends (c: any, next: any) => infer R
2673
+ ? R extends Response | TypedResponse<any, any, any>
2674
+ ? ExtractTypedResponseOnly<R>
2675
+ : never
2676
+ : never
2677
+
2678
+ ////////////////////////////////////////
2679
+ ////// /////
2680
+ ////// ValidationTargets /////
2681
+ ////// /////
2682
+ ////////////////////////////////////////
2683
+
2684
+ export type FormValue = string | Blob
2685
+ export type ParsedFormValue = string | File
2686
+
2687
+ export type ValidationTargets<T extends FormValue = ParsedFormValue, P extends string = string> = {
2688
+ json: any
2689
+ form: Record<string, T | T[]>
2690
+ query: Record<string, string | string[]>
2691
+ param: Record<P, P extends `${infer _}?` ? string | undefined : string>
2692
+ header: Record<RequestHeader | CustomHeader, string>
2693
+ cookie: Record<string, string>
2694
+ }
2695
+
2696
+ ////////////////////////////////////////
2697
+ ////// //////
2698
+ ////// Path parameters //////
2699
+ ////// //////
2700
+ ////////////////////////////////////////
2701
+
2702
+ type ParamKey<Component> = Component extends `:${infer NameWithPattern}`
2703
+ ? NameWithPattern extends `${infer Name}{${infer Rest}`
2704
+ ? Rest extends `${infer _Pattern}?`
2705
+ ? `${Name}?`
2706
+ : Name
2707
+ : NameWithPattern
2708
+ : never
2709
+
2710
+ export type ParamKeys<Path> = Path extends `${infer Component}/${infer Rest}`
2711
+ ? ParamKey<Component> | ParamKeys<Rest>
2712
+ : ParamKey<Path>
2713
+
2714
+ export type ParamKeyToRecord<T extends string> = T extends `${infer R}?`
2715
+ ? Record<R, string | undefined>
2716
+ : { [K in T]: string }
2717
+
2718
+ ////////////////////////////////////////
2719
+ ////// //////
2720
+ ///// For AppRequest //////
2721
+ ////// //////
2722
+ ////////////////////////////////////////
2723
+
2724
+ export type InputToDataByTarget<
2725
+ T extends Input['out'],
2726
+ Target extends keyof ValidationTargets,
2727
+ > = T extends {
2728
+ [K in Target]: infer R
2729
+ }
2730
+ ? R
2731
+ : never
2732
+
2733
+ export type RemoveQuestion<T> = T extends `${infer R}?` ? R : T
2734
+
2735
+ ////////////////////////////////////////
2736
+ ////// //////
2737
+ ////// Utilities //////
2738
+ ////// //////
2739
+ ////////////////////////////////////////
2740
+
2741
+ export type ExtractSchema<T> = UnionToIntersection<
2742
+ T extends AppBase<infer _, infer S, any, any> ? S : never
2743
+ >
2744
+
2745
+ export type ExtractSchemaForStatusCode<T, Status extends number> = {
2746
+ [Path in keyof ExtractSchema<T>]: {
2747
+ [Method in keyof ExtractSchema<T>[Path]]: Extract<
2748
+ ExtractSchema<T>[Path][Method],
2749
+ { status: Status }
2750
+ >
2751
+ }
2752
+ }
2753
+
2754
+ export type ExtractHandlerResponse<T> = T extends (c: any, next: any) => Promise<infer R>
2755
+ ? Exclude<R, void> extends never
2756
+ ? never // Only void in the type → filter out
2757
+ : Exclude<R, void> extends Response | TypedResponse<any, any, any>
2758
+ ? Exclude<R, void> // Return the response type without void
2759
+ : never // Invalid response type → filter out
2760
+ : T extends (c: any, next: any) => infer R
2761
+ ? R extends Response | TypedResponse<any, any, any>
2762
+ ? R
2763
+ : never
2764
+ : never
2765
+
2766
+ type ProcessHead<T> = IfAnyThenEmptyObject<T extends Env ? (Env extends T ? {} : T) : T>
2767
+ export type IntersectNonAnyTypes<T extends any[]> = T extends [infer Head, ...infer Rest]
2768
+ ? ProcessHead<Head> & IntersectNonAnyTypes<Rest>
2769
+ : {}
2770
+
2771
+ ////////////////////////////////////////
2772
+ ////// //////
2773
+ ////// FetchEvent //////
2774
+ ////// //////
2775
+ ////////////////////////////////////////
2776
+
2777
+ export abstract class FetchEventLike {
2778
+ abstract readonly request: Request
2779
+ abstract respondWith(promise: Response | Promise<Response>): void
2780
+ abstract passThroughOnException(): void
2781
+ abstract waitUntil(promise: Promise<void>): void
2782
+ }