fastify 4.27.0 → 5.0.0-alpha.2

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 (328) hide show
  1. package/.markdownlint-cli2.yaml +1 -1
  2. package/.tap/processinfo/09002e93-10ad-430c-bc86-c0576928b0ed.json +241 -0
  3. package/.tap/processinfo/ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json +268 -0
  4. package/.tap/test-results/test/404s.test.js.tap +623 -0
  5. package/.tap/test-results/test/500s.test.js.tap +64 -0
  6. package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +36 -0
  7. package/.tap/test-results/test/als.test.js.tap +15 -0
  8. package/.tap/test-results/test/async-await.test.js.tap +184 -0
  9. package/.tap/test-results/test/async-dispose.test.js.tap +8 -0
  10. package/.tap/test-results/test/async_hooks.test.js.tap +10 -0
  11. package/.tap/test-results/test/bodyLimit.test.js.tap +48 -0
  12. package/.tap/test-results/test/buffer.test.js.tap +20 -0
  13. package/.tap/test-results/test/build/error-serializer.test.js.tap +12 -0
  14. package/.tap/test-results/test/build/version.test.js.tap +7 -0
  15. package/.tap/test-results/test/case-insensitive.test.js.tap +36 -0
  16. package/.tap/test-results/test/chainable.test.js.tap +17 -0
  17. package/.tap/test-results/test/check.test.js.tap +10 -0
  18. package/.tap/test-results/test/childLoggerFactory.test.js.tap +23 -0
  19. package/.tap/test-results/test/client-timeout.test.js.tap +7 -0
  20. package/.tap/test-results/test/close-pipelining.test.js.tap +15 -0
  21. package/.tap/test-results/test/close.test.js.tap +172 -0
  22. package/.tap/test-results/test/connectionTimeout.test.js.tap +12 -0
  23. package/.tap/test-results/test/constrained-routes.test.js.tap +173 -0
  24. package/.tap/test-results/test/content-length.test.js.tap +46 -0
  25. package/.tap/test-results/test/content-parser.test.js.tap +266 -0
  26. package/.tap/test-results/test/content-type.test.js.tap +14 -0
  27. package/.tap/test-results/test/context-config.test.js.tap +41 -0
  28. package/.tap/test-results/test/copy.test.js.tap +14 -0
  29. package/.tap/test-results/test/custom-http-server.test.js.tap +30 -0
  30. package/.tap/test-results/test/custom-parser-async.test.js.tap +21 -0
  31. package/.tap/test-results/test/custom-parser.0.test.js.tap +199 -0
  32. package/.tap/test-results/test/custom-parser.1.test.js.tap +90 -0
  33. package/.tap/test-results/test/custom-parser.2.test.js.tap +22 -0
  34. package/.tap/test-results/test/custom-parser.3.test.js.tap +53 -0
  35. package/.tap/test-results/test/custom-parser.4.test.js.tap +45 -0
  36. package/.tap/test-results/test/custom-parser.5.test.js.tap +41 -0
  37. package/.tap/test-results/test/custom-querystring-parser.test.js.tap +46 -0
  38. package/.tap/test-results/test/decorator.test.js.tap +465 -0
  39. package/.tap/test-results/test/delete.test.js.tap +110 -0
  40. package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +15 -0
  41. package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +25 -0
  42. package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +24 -0
  43. package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +9 -0
  44. package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +20 -0
  45. package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +10 -0
  46. package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +14 -0
  47. package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +16 -0
  48. package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +16 -0
  49. package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +19 -0
  50. package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +18 -0
  51. package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +243 -0
  52. package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +9 -0
  53. package/.tap/test-results/test/esm/esm.test.mjs.tap +8 -0
  54. package/.tap/test-results/test/esm/index.test.js.tap +8 -0
  55. package/.tap/test-results/test/fastify-instance.test.js.tap +114 -0
  56. package/.tap/test-results/test/findRoute.test.js.tap +37 -0
  57. package/.tap/test-results/test/fluent-schema.test.js.tap +36 -0
  58. package/.tap/test-results/test/genReqId.test.js.tap +106 -0
  59. package/.tap/test-results/test/get.test.js.tap +151 -0
  60. package/.tap/test-results/test/handler-context.test.js.tap +19 -0
  61. package/.tap/test-results/test/has-route.test.js.tap +30 -0
  62. package/.tap/test-results/test/head.test.js.tap +130 -0
  63. package/.tap/test-results/test/header-overflow.test.js.tap +16 -0
  64. package/.tap/test-results/test/hooks-async.test.js.tap +286 -0
  65. package/.tap/test-results/test/hooks.on-listen.test.js.tap +311 -0
  66. package/.tap/test-results/test/hooks.on-ready.test.js.tap +151 -0
  67. package/.tap/test-results/test/hooks.test.js.tap +966 -0
  68. package/.tap/test-results/test/http2/closing.test.js.tap +35 -0
  69. package/.tap/test-results/test/http2/constraint.test.js.tap +32 -0
  70. package/.tap/test-results/test/http2/head.test.js.tap +9 -0
  71. package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +8 -0
  72. package/.tap/test-results/test/http2/plain.test.js.tap +22 -0
  73. package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +40 -0
  74. package/.tap/test-results/test/http2/secure.test.js.tap +27 -0
  75. package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +9 -0
  76. package/.tap/test-results/test/https/custom-https-server.test.js.tap +10 -0
  77. package/.tap/test-results/test/https/https.test.js.tap +45 -0
  78. package/.tap/test-results/test/imports.test.js.tap +14 -0
  79. package/.tap/test-results/test/inject.test.js.tap +165 -0
  80. package/.tap/test-results/test/internals/all.test.js.tap +42 -0
  81. package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +14 -0
  82. package/.tap/test-results/test/internals/context.test.js.tap +14 -0
  83. package/.tap/test-results/test/internals/decorator.test.js.tap +51 -0
  84. package/.tap/test-results/test/internals/errors.test.js.tap +1212 -0
  85. package/.tap/test-results/test/internals/handleRequest.test.js.tap +69 -0
  86. package/.tap/test-results/test/internals/hookRunner.test.js.tap +143 -0
  87. package/.tap/test-results/test/internals/hooks.test.js.tap +45 -0
  88. package/.tap/test-results/test/internals/initialConfig.test.js.tap +125 -0
  89. package/.tap/test-results/test/internals/logger.test.js.tap +71 -0
  90. package/.tap/test-results/test/internals/plugin.test.js.tap +48 -0
  91. package/.tap/test-results/test/internals/reply-serialize.test.js.tap +166 -0
  92. package/.tap/test-results/test/internals/reply.test.js.tap +688 -0
  93. package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +74 -0
  94. package/.tap/test-results/test/internals/request-validate.test.js.tap +384 -0
  95. package/.tap/test-results/test/internals/request.test.js.tap +163 -0
  96. package/.tap/test-results/test/internals/server.test.js.tap +30 -0
  97. package/.tap/test-results/test/internals/validation.test.js.tap +121 -0
  98. package/.tap/test-results/test/keepAliveTimeout.test.js.tap +12 -0
  99. package/.tap/test-results/test/listen.1.test.js.tap +31 -0
  100. package/.tap/test-results/test/listen.2.test.js.tap +46 -0
  101. package/.tap/test-results/test/listen.3.test.js.tap +25 -0
  102. package/.tap/test-results/test/listen.4.test.js.tap +51 -0
  103. package/.tap/test-results/test/lock.test.js.tap +29 -0
  104. package/.tap/test-results/test/logger/instantiation.test.js.tap +92 -0
  105. package/.tap/test-results/test/logger/logging.test.js.tap +117 -0
  106. package/.tap/test-results/test/logger/options.test.js.tap +165 -0
  107. package/.tap/test-results/test/logger/request.test.js.tap +82 -0
  108. package/.tap/test-results/test/logger/response.test.js.tap +38 -0
  109. package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +44 -0
  110. package/.tap/test-results/test/method-missing.test.js.tap +8 -0
  111. package/.tap/test-results/test/middleware.test.js.tap +17 -0
  112. package/.tap/test-results/test/mkcalendar.test.js.tap +43 -0
  113. package/.tap/test-results/test/mkcol.test.js.tap +14 -0
  114. package/.tap/test-results/test/move.test.js.tap +15 -0
  115. package/.tap/test-results/test/noop-set.test.js.tap +8 -0
  116. package/.tap/test-results/test/nullable-validation.test.js.tap +36 -0
  117. package/.tap/test-results/test/options.error-handler.test.js.tap +186 -0
  118. package/.tap/test-results/test/options.test.js.tap +174 -0
  119. package/.tap/test-results/test/output-validation.test.js.tap +66 -0
  120. package/.tap/test-results/test/patch.error-handler.test.js.tap +206 -0
  121. package/.tap/test-results/test/patch.test.js.tap +182 -0
  122. package/.tap/test-results/test/plugin.1.test.js.tap +78 -0
  123. package/.tap/test-results/test/plugin.2.test.js.tap +102 -0
  124. package/.tap/test-results/test/plugin.3.test.js.tap +58 -0
  125. package/.tap/test-results/test/plugin.4.test.js.tap +164 -0
  126. package/.tap/test-results/test/post-empty-body.test.js.tap +8 -0
  127. package/.tap/test-results/test/pretty-print.test.js.tap +82 -0
  128. package/.tap/test-results/test/promises.test.js.tap +46 -0
  129. package/.tap/test-results/test/propfind.test.js.tap +43 -0
  130. package/.tap/test-results/test/proppatch.test.js.tap +29 -0
  131. package/.tap/test-results/test/proto-poisoning.test.js.tap +47 -0
  132. package/.tap/test-results/test/put.error-handler.test.js.tap +206 -0
  133. package/.tap/test-results/test/put.test.js.tap +182 -0
  134. package/.tap/test-results/test/register.test.js.tap +61 -0
  135. package/.tap/test-results/test/reply-code.test.js.tap +40 -0
  136. package/.tap/test-results/test/reply-earlyHints.test.js.tap +22 -0
  137. package/.tap/test-results/test/reply-error.test.js.tap +643 -0
  138. package/.tap/test-results/test/reply-trailers.test.js.tap +176 -0
  139. package/.tap/test-results/test/report.test.js.tap +43 -0
  140. package/.tap/test-results/test/request-error.test.js.tap +98 -0
  141. package/.tap/test-results/test/request-id.test.js.tap +38 -0
  142. package/.tap/test-results/test/request.deprecated.test.js.tap +13 -0
  143. package/.tap/test-results/test/requestTimeout.test.js.tap +21 -0
  144. package/.tap/test-results/test/route-hooks.test.js.tap +498 -0
  145. package/.tap/test-results/test/route-prefix.test.js.tap +195 -0
  146. package/.tap/test-results/test/route-shorthand.test.js.tap +190 -0
  147. package/.tap/test-results/test/route.1.test.js.tap +93 -0
  148. package/.tap/test-results/test/route.2.test.js.tap +28 -0
  149. package/.tap/test-results/test/route.3.test.js.tap +39 -0
  150. package/.tap/test-results/test/route.4.test.js.tap +32 -0
  151. package/.tap/test-results/test/route.5.test.js.tap +54 -0
  152. package/.tap/test-results/test/route.6.test.js.tap +81 -0
  153. package/.tap/test-results/test/route.7.test.js.tap +93 -0
  154. package/.tap/test-results/test/route.8.test.js.tap +38 -0
  155. package/.tap/test-results/test/router-options.test.js.tap +104 -0
  156. package/.tap/test-results/test/same-shape.test.js.tap +22 -0
  157. package/.tap/test-results/test/schema-examples.test.js.tap +85 -0
  158. package/.tap/test-results/test/schema-feature.test.js.tap +445 -0
  159. package/.tap/test-results/test/schema-serialization.test.js.tap +194 -0
  160. package/.tap/test-results/test/schema-special-usage.test.js.tap +186 -0
  161. package/.tap/test-results/test/schema-validation.test.js.tap +199 -0
  162. package/.tap/test-results/test/search.test.js.tap +77 -0
  163. package/.tap/test-results/test/serialize-response.test.js.tap +26 -0
  164. package/.tap/test-results/test/server.test.js.tap +65 -0
  165. package/.tap/test-results/test/set-error-handler.test.js.tap +7 -0
  166. package/.tap/test-results/test/skip-reply-send.test.js.tap +272 -0
  167. package/.tap/test-results/test/stream.1.test.js.tap +36 -0
  168. package/.tap/test-results/test/stream.2.test.js.tap +20 -0
  169. package/.tap/test-results/test/stream.3.test.js.tap +34 -0
  170. package/.tap/test-results/test/stream.4.test.js.tap +40 -0
  171. package/.tap/test-results/test/stream.5.test.js.tap +37 -0
  172. package/.tap/test-results/test/sync-routes.test.js.tap +19 -0
  173. package/.tap/test-results/test/throw.test.js.tap +116 -0
  174. package/.tap/test-results/test/trace.test.js.tap +7 -0
  175. package/.tap/test-results/test/trust-proxy.test.js.tap +109 -0
  176. package/.tap/test-results/test/type-provider.test.js.tap +12 -0
  177. package/.tap/test-results/test/unlock.test.js.tap +14 -0
  178. package/.tap/test-results/test/upgrade.test.js.tap +8 -0
  179. package/.tap/test-results/test/url-rewriting.test.js.tap +39 -0
  180. package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +33 -0
  181. package/.tap/test-results/test/validation-error-handling.test.js.tap +180 -0
  182. package/.tap/test-results/test/versioned-routes.test.js.tap +151 -0
  183. package/.tap/test-results/test/web-api.test.js.tap +51 -0
  184. package/.tap/test-results/test/wrapThenable.test.js.tap +11 -0
  185. package/.taprc +4 -8
  186. package/README.md +3 -6
  187. package/build/build-error-serializer.js +4 -1
  188. package/build/build-validation.js +5 -4
  189. package/docs/Guides/Database.md +1 -1
  190. package/docs/Guides/Delay-Accepting-Requests.md +3 -3
  191. package/docs/Guides/Ecosystem.md +2 -0
  192. package/docs/Guides/Migration-Guide-V5.md +20 -0
  193. package/docs/Guides/Write-Type-Provider.md +4 -2
  194. package/docs/Reference/ContentTypeParser.md +30 -1
  195. package/docs/Reference/Decorators.md +42 -16
  196. package/docs/Reference/Errors.md +10 -2
  197. package/docs/Reference/Hooks.md +48 -14
  198. package/docs/Reference/Logging.md +5 -5
  199. package/docs/Reference/Reply.md +29 -24
  200. package/docs/Reference/Request.md +5 -1
  201. package/docs/Reference/Routes.md +24 -28
  202. package/docs/Reference/Server.md +14 -53
  203. package/docs/Reference/Type-Providers.md +21 -26
  204. package/docs/Reference/TypeScript.md +46 -29
  205. package/docs/Reference/Warnings.md +2 -8
  206. package/eslint.config.js +27 -0
  207. package/examples/typescript-server.ts +14 -14
  208. package/fastify.d.ts +15 -14
  209. package/fastify.js +41 -15
  210. package/lib/configValidator.js +94 -76
  211. package/lib/contentTypeParser.js +54 -88
  212. package/lib/decorate.js +3 -7
  213. package/lib/error-serializer.js +77 -19
  214. package/lib/errors.js +31 -6
  215. package/lib/handleRequest.js +70 -39
  216. package/lib/httpMethods.js +34 -18
  217. package/lib/logger.js +24 -6
  218. package/lib/pluginUtils.js +5 -5
  219. package/lib/reply.js +16 -13
  220. package/lib/request.js +37 -19
  221. package/lib/route.js +7 -31
  222. package/lib/server.js +62 -123
  223. package/lib/warnings.js +28 -27
  224. package/lib/wrapThenable.js +46 -22
  225. package/package.json +38 -58
  226. package/test/404s.test.js +8 -12
  227. package/test/async-await.test.js +46 -2
  228. package/test/build/error-serializer.test.js +4 -2
  229. package/test/check.test.js +225 -0
  230. package/test/close-pipelining.test.js +2 -34
  231. package/test/close.test.js +1 -41
  232. package/test/content-parser.test.js +69 -117
  233. package/test/custom-parser.1.test.js +40 -1
  234. package/test/decorator-namespace.test._js_ +31 -0
  235. package/test/decorator.test.js +92 -43
  236. package/test/delete.test.js +21 -1
  237. package/test/diagnostics-channel/404.test.js +57 -0
  238. package/test/diagnostics-channel/async-delay-request.test.js +74 -0
  239. package/test/diagnostics-channel/async-request.test.js +72 -0
  240. package/test/diagnostics-channel/error-before-handler.test.js +36 -0
  241. package/test/diagnostics-channel/error-request.test.js +61 -0
  242. package/test/diagnostics-channel/error-status.test.js +39 -0
  243. package/test/{diagnostics-channel.test.js → diagnostics-channel/init.test.js} +6 -16
  244. package/test/diagnostics-channel/sync-delay-request.test.js +58 -0
  245. package/test/diagnostics-channel/sync-request-reply.test.js +58 -0
  246. package/test/diagnostics-channel/sync-request.test.js +61 -0
  247. package/test/encapsulated-error-handler.test.js +201 -14
  248. package/test/esm/index.test.js +2 -12
  249. package/test/findRoute.test.js +16 -0
  250. package/test/genReqId.test.js +9 -0
  251. package/test/get.test.js +28 -0
  252. package/test/has-route.test.js +18 -2
  253. package/test/helper.js +1 -5
  254. package/test/hooks.test.js +0 -4
  255. package/test/http2/constraint.test.js +22 -1
  256. package/test/http2/plain.test.js +21 -6
  257. package/test/http2/secure.test.js +12 -1
  258. package/test/https/https.test.js +57 -0
  259. package/test/inject.test.js +1 -2
  260. package/test/internals/decorator.test.js +0 -2
  261. package/test/internals/errors.test.js +57 -17
  262. package/test/internals/handleRequest.test.js +5 -1
  263. package/test/internals/initialConfig.test.js +5 -5
  264. package/test/internals/logger.test.js +31 -2
  265. package/test/internals/reply.test.js +38 -80
  266. package/test/internals/request.test.js +13 -11
  267. package/test/listen.1.test.js +5 -15
  268. package/test/listen.5.test.js +88 -0
  269. package/test/logger/instantiation.test.js +8 -8
  270. package/test/logger/logging.test.js +4 -4
  271. package/test/logger/options.test.js +102 -21
  272. package/test/logger/response.test.js +6 -6
  273. package/test/maxRequestsPerSocket.test.js +2 -5
  274. package/test/method-missing.test.js +24 -0
  275. package/test/plugin.1.test.js +2 -4
  276. package/test/plugin.2.test.js +0 -2
  277. package/test/plugin.3.test.js +0 -2
  278. package/test/plugin.4.test.js +92 -56
  279. package/test/register.test.js +2 -4
  280. package/test/reply-earlyHints.test.js +98 -0
  281. package/test/reply-error.test.js +0 -2
  282. package/test/route-hooks.test.js +0 -1
  283. package/test/route-shorthand.test.js +60 -0
  284. package/test/schema-special-usage.test.js +1 -1
  285. package/test/server.test.js +17 -2
  286. package/test/stream.2.test.js +1 -1
  287. package/test/stream.4.test.js +0 -42
  288. package/test/stream.5.test.js +2 -2
  289. package/test/trust-proxy.test.js +33 -27
  290. package/test/types/errors.test-d.ts +0 -2
  291. package/test/types/fastify.test-d.ts +14 -12
  292. package/test/types/hooks.test-d.ts +1 -0
  293. package/test/types/import.ts +1 -0
  294. package/test/types/instance.test-d.ts +10 -51
  295. package/test/types/logger.test-d.ts +43 -6
  296. package/test/types/plugin.test-d.ts +5 -2
  297. package/test/types/register.test-d.ts +2 -2
  298. package/test/types/reply.test-d.ts +13 -12
  299. package/test/types/request.test-d.ts +19 -8
  300. package/test/types/route.test-d.ts +30 -2
  301. package/test/types/schema.test-d.ts +2 -2
  302. package/test/types/serverFactory.test-d.ts +1 -1
  303. package/test/types/type-provider.test-d.ts +60 -13
  304. package/test/types/using.test-d.ts +4 -1
  305. package/test/url-rewriting.test.js +3 -2
  306. package/test/useSemicolonDelimiter.test.js +3 -6
  307. package/test/versioned-routes.test.js +1 -1
  308. package/test/web-api.test.js +0 -6
  309. package/types/content-type-parser.d.ts +3 -3
  310. package/types/context.d.ts +0 -1
  311. package/types/errors.d.ts +1 -0
  312. package/types/hooks.d.ts +6 -6
  313. package/types/instance.d.ts +28 -41
  314. package/types/logger.d.ts +3 -3
  315. package/types/plugin.d.ts +3 -3
  316. package/types/reply.d.ts +13 -14
  317. package/types/request.d.ts +5 -3
  318. package/types/route.d.ts +29 -29
  319. package/types/schema.d.ts +3 -3
  320. package/types/serverFactory.d.ts +2 -2
  321. package/types/type-provider.d.ts +22 -12
  322. package/types/utils.d.ts +18 -18
  323. package/.c8rc.json +0 -8
  324. package/.eslintrc +0 -4
  325. package/test/default-route.test.js +0 -88
  326. package/test/listen.deprecated.test.js +0 -229
  327. package/test/unsupported-httpversion.test.js +0 -31
  328. package/types/.eslintrc.json +0 -48
package/types/route.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { FastifyError } from '@fastify/error'
2
2
  import { ConstraintStrategy } from 'find-my-way'
3
- import { FastifyRequestContext } from './context'
3
+ import { FastifyContextConfig } from './context'
4
4
  import { onErrorMetaHookHandler, onRequestAbortMetaHookHandler, onRequestMetaHookHandler, onResponseMetaHookHandler, onSendMetaHookHandler, onTimeoutMetaHookHandler, preHandlerMetaHookHandler, preParsingMetaHookHandler, preSerializationMetaHookHandler, preValidationMetaHookHandler } from './hooks'
5
5
  import { FastifyInstance } from './instance'
6
6
  import { FastifyBaseLogger, FastifyChildLoggerFactory, LogLevel } from './logger'
@@ -48,44 +48,44 @@ export interface RouteShorthandOptions<
48
48
  attachValidation?: boolean;
49
49
  exposeHeadRoute?: boolean;
50
50
 
51
- validatorCompiler?: FastifySchemaCompiler<SchemaCompiler>;
52
- serializerCompiler?: FastifySerializerCompiler<SchemaCompiler>;
51
+ validatorCompiler?: FastifySchemaCompiler<NoInfer<SchemaCompiler>>;
52
+ serializerCompiler?: FastifySerializerCompiler<NoInfer<SchemaCompiler>>;
53
53
  bodyLimit?: number;
54
54
  logLevel?: LogLevel;
55
- config?: Omit<FastifyRequestContext<ContextConfig>['config'], 'url' | 'method'>;
55
+ config?: FastifyContextConfig & ContextConfig;
56
56
  version?: string;
57
57
  constraints?: RouteConstraint,
58
- prefixTrailingSlash?: 'slash'|'no-slash'|'both';
58
+ prefixTrailingSlash?: 'slash' | 'no-slash' | 'both';
59
59
  errorHandler?: (
60
60
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
61
61
  error: FastifyError,
62
- request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
63
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>
62
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, NoInfer<SchemaCompiler>, TypeProvider, ContextConfig, Logger>,
63
+ reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider>
64
64
  ) => void;
65
65
  childLoggerFactory?: FastifyChildLoggerFactory<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
66
66
  schemaErrorFormatter?: SchemaErrorFormatter;
67
67
 
68
68
  // hooks
69
- onRequest?: onRequestMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
70
- | onRequestMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
71
- preParsing?: preParsingMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
72
- | preParsingMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
73
- preValidation?: preValidationMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
74
- | preValidationMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
75
- preHandler?: preHandlerMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
76
- | preHandlerMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
77
- preSerialization?: preSerializationMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
78
- | preSerializationMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
79
- onSend?: onSendMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
80
- | onSendMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
81
- onResponse?: onResponseMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
82
- | onResponseMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
83
- onTimeout?: onTimeoutMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
84
- | onTimeoutMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
85
- onError?: onErrorMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, SchemaCompiler, TypeProvider, Logger>
86
- | onErrorMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, SchemaCompiler, TypeProvider, Logger>[];
87
- onRequestAbort?: onRequestAbortMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
88
- | onRequestAbortMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];
69
+ onRequest?: onRequestMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
70
+ | onRequestMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
71
+ preParsing?: preParsingMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
72
+ | preParsingMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
73
+ preValidation?: preValidationMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
74
+ | preValidationMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
75
+ preHandler?: preHandlerMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
76
+ | preHandlerMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
77
+ preSerialization?: preSerializationMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
78
+ | preSerializationMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
79
+ onSend?: onSendMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
80
+ | onSendMetaHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
81
+ onResponse?: onResponseMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
82
+ | onResponseMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
83
+ onTimeout?: onTimeoutMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
84
+ | onTimeoutMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
85
+ onError?: onErrorMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, NoInfer<SchemaCompiler>, TypeProvider, Logger>
86
+ | onErrorMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
87
+ onRequestAbort?: onRequestAbortMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>
88
+ | onRequestAbortMetaHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>[];
89
89
  }
90
90
  /**
91
91
  * Route handler method declaration.
@@ -119,7 +119,7 @@ export interface RouteShorthandOptionsWithHandler<
119
119
  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
120
120
  Logger extends FastifyBaseLogger = FastifyBaseLogger
121
121
  > extends RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> {
122
- handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>;
122
+ handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>;
123
123
  }
124
124
 
125
125
  /**
@@ -183,4 +183,4 @@ export type RouteHandler<
183
183
  export type DefaultRoute<Request, Reply> = (
184
184
  req: Request,
185
185
  res: Reply,
186
- ) => void;
186
+ ) => void
package/types/schema.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ValidatorFactory } from '@fastify/ajv-compiler'
2
2
  import { SerializerFactory } from '@fastify/fast-json-stringify-compiler'
3
- import { FastifyInstance } from '../fastify'
3
+ import { FastifyInstance, SafePromiseLike } from '../fastify'
4
4
  /**
5
5
  * Schemas in Fastify follow the JSON-Schema standard. For this reason
6
6
  * we have opted to not ship strict schema based types. Instead we provide
@@ -33,7 +33,7 @@ export interface FastifySchemaValidationError {
33
33
  }
34
34
 
35
35
  export interface FastifyValidationResult {
36
- (data: any): boolean | PromiseLike<any> | { error?: Error, value?: any }
36
+ (data: any): boolean | SafePromiseLike<any> | { error?: Error, value?: any }
37
37
  errors?: FastifySchemaValidationError[] | null;
38
38
  }
39
39
 
@@ -44,7 +44,7 @@ export type FastifySchemaCompiler<T> = (routeSchema: FastifyRouteSchemaDef<T>) =
44
44
 
45
45
  export type FastifySerializerCompiler<T> = (routeSchema: FastifyRouteSchemaDef<T>) => (data: any) => string
46
46
 
47
- export interface FastifySchemaControllerOptions{
47
+ export interface FastifySchemaControllerOptions {
48
48
  bucket?: (parentSchemas?: unknown) => {
49
49
  add(schema: unknown): FastifyInstance;
50
50
  getSchema(schemaId: string): unknown;
@@ -9,8 +9,8 @@ export type FastifyServerFactoryHandler<
9
9
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>
10
10
  > =
11
11
  RawServer extends http.Server | https.Server ?
12
- (request: http.IncomingMessage & RawRequest, response: http.ServerResponse & RawReply) => void :
13
- (request: http2.Http2ServerRequest & RawRequest, response: http2.Http2ServerResponse & RawReply) => void
12
+ (request: http.IncomingMessage & RawRequest, response: http.ServerResponse & RawReply) => void :
13
+ (request: http2.Http2ServerRequest & RawRequest, response: http2.Http2ServerResponse & RawReply) => void
14
14
 
15
15
  export interface FastifyServerFactory<
16
16
  RawServer extends RawServerBase = RawServerDefault
@@ -7,14 +7,15 @@ import { RecordKeysToLowercase } from './utils'
7
7
  // -----------------------------------------------------------------------------------------------
8
8
 
9
9
  export interface FastifyTypeProvider {
10
- readonly input: unknown,
11
- readonly output: unknown,
10
+ readonly schema: unknown,
11
+ readonly validator: unknown,
12
+ readonly serializer: unknown,
12
13
  }
13
14
 
14
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
15
15
  export interface FastifyTypeProviderDefault extends FastifyTypeProvider {}
16
16
 
17
- export type CallTypeProvider<F extends FastifyTypeProvider, I> = (F & { input: I })['output']
17
+ export type CallValidatorTypeProvider<F extends FastifyTypeProvider, S> = (F & { schema: S })['validator']
18
+ export type CallSerializerTypeProvider<F extends FastifyTypeProvider, S> = (F & { schema: S })['serializer']
18
19
 
19
20
  // -----------------------------------------------------------------------------------------------
20
21
  // FastifyRequestType
@@ -32,13 +33,13 @@ type KeysOf<T> = T extends any ? keyof T : never
32
33
 
33
34
  // Resolves Request types either from generic argument or Type Provider.
34
35
  type ResolveRequestParams<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
35
- UndefinedToUnknown<KeysOf<RouteGeneric['Params']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['params']> : RouteGeneric['Params']>
36
+ UndefinedToUnknown<KeysOf<RouteGeneric['Params']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['params']> : RouteGeneric['Params']>
36
37
  type ResolveRequestQuerystring<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
37
- UndefinedToUnknown<KeysOf<RouteGeneric['Querystring']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['querystring']> : RouteGeneric['Querystring']>
38
+ UndefinedToUnknown<KeysOf<RouteGeneric['Querystring']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['querystring']> : RouteGeneric['Querystring']>
38
39
  type ResolveRequestHeaders<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
39
- UndefinedToUnknown<KeysOf<RouteGeneric['Headers']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['headers']> : RouteGeneric['Headers']>
40
+ UndefinedToUnknown<KeysOf<RouteGeneric['Headers']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['headers']> : RouteGeneric['Headers']>
40
41
  type ResolveRequestBody<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =
41
- UndefinedToUnknown<KeysOf<RouteGeneric['Body']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['body']> : RouteGeneric['Body']>
42
+ UndefinedToUnknown<KeysOf<RouteGeneric['Body']> extends never ? CallValidatorTypeProvider<TypeProvider, SchemaCompiler['body']> : RouteGeneric['Body']>
42
43
 
43
44
  // The target request type. This type is inferenced on fastify 'requests' via generic argument assignment
44
45
  export interface FastifyRequestType<Params = unknown, Querystring = unknown, Headers = unknown, Body = unknown> {
@@ -63,8 +64,8 @@ export interface ResolveFastifyRequestType<TypeProvider extends FastifyTypeProvi
63
64
  // Resolves the Reply type by taking a union of response status codes and content-types
64
65
  type ResolveReplyFromSchemaCompiler<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema> = {
65
66
  [K1 in keyof SchemaCompiler['response']]: SchemaCompiler['response'][K1] extends { content: { [keyof: string]: { schema: unknown } } } ? ({
66
- [K2 in keyof SchemaCompiler['response'][K1]['content']]: CallTypeProvider<TypeProvider, SchemaCompiler['response'][K1]['content'][K2]['schema']>
67
- } extends infer Result ? Result[keyof Result] : unknown) : CallTypeProvider<TypeProvider, SchemaCompiler['response'][K1]>
67
+ [K2 in keyof SchemaCompiler['response'][K1]['content']]: CallSerializerTypeProvider<TypeProvider, SchemaCompiler['response'][K1]['content'][K2]['schema']>
68
+ } extends infer Result ? Result[keyof Result] : unknown) : CallSerializerTypeProvider<TypeProvider, SchemaCompiler['response'][K1]>
68
69
  } extends infer Result ? Result[keyof Result] : unknown;
69
70
 
70
71
  // The target reply type. This type is inferenced on fastify 'replies' via generic argument assignment
@@ -83,13 +84,22 @@ export type ResolveFastifyReplyType<TypeProvider extends FastifyTypeProvider, Sc
83
84
  export type ResolveFastifyReplyReturnType<
84
85
  TypeProvider extends FastifyTypeProvider,
85
86
  SchemaCompiler extends FastifySchema,
86
- RouteGeneric extends RouteGenericInterface,
87
+ RouteGeneric extends RouteGenericInterface
87
88
  > = ResolveFastifyReplyType<
88
89
  TypeProvider,
89
90
  SchemaCompiler,
90
91
  RouteGeneric
91
92
  > extends infer Return ?
92
- (Return | void | Promise<Return | void>)
93
+ (Return | void | Promise<Return | void>)
93
94
  // review: support both async and sync return types
94
95
  // (Promise<Return> | Return | Promise<void> | void)
95
96
  : unknown
97
+
98
+ /**
99
+ * This branded type is needed to indicate APIs that return Promise-likes which can
100
+ * safely "float" (not have rejections handled by calling code).
101
+ *
102
+ * Please refer to the following Github issue for more info:
103
+ * https://github.com/fastify/fastify/issues/5498
104
+ */
105
+ export type SafePromiseLike<T> = PromiseLike<T> & { __linterBrands: 'SafePromiseLike' }
package/types/utils.d.ts CHANGED
@@ -24,7 +24,7 @@ export type RawServerDefault = http.Server
24
24
  * The default request type based on the server type. Utilizes generic constraining.
25
25
  */
26
26
  export type RawRequestDefaultExpression<
27
- RawServer extends RawServerBase = RawServerDefault,
27
+ RawServer extends RawServerBase = RawServerDefault
28
28
  > = RawServer extends http.Server | https.Server ? http.IncomingMessage
29
29
  : RawServer extends http2.Http2Server | http2.Http2SecureServer ? http2.Http2ServerRequest
30
30
  : never
@@ -50,41 +50,41 @@ export type ReplyDefault = unknown
50
50
  * Helpers for determining the type of the response payload based on the code
51
51
  */
52
52
 
53
- type StringAsNumber<T extends string> = T extends `${infer N extends number}` ? N : never;
54
- type CodeClasses = 1 | 2 | 3 | 4 | 5;
55
- type Digit = 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
56
- type HttpCodes = StringAsNumber<`${CodeClasses}${Digit}${Digit}`>;
57
- type HttpKeys = HttpCodes | `${Digit}xx`;
53
+ type StringAsNumber<T extends string> = T extends `${infer N extends number}` ? N : never
54
+ type CodeClasses = 1 | 2 | 3 | 4 | 5
55
+ type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
56
+ type HttpCodes = StringAsNumber<`${CodeClasses}${Digit}${Digit}`>
57
+ type HttpKeys = HttpCodes | `${Digit}xx`
58
58
  export type StatusCodeReply = {
59
- // eslint-disable-next-line no-unused-vars
59
+
60
60
  [Key in HttpKeys]?: unknown;
61
- };
61
+ }
62
62
 
63
63
  // weird TS quirk: https://stackoverflow.com/questions/58977876/generic-conditional-type-resolves-to-never-when-the-generic-type-is-set-to-never
64
64
  export type ReplyKeysToCodes<Key> = [Key] extends [never] ? number :
65
65
  Key extends HttpCodes ? Key :
66
66
  Key extends `${infer X extends CodeClasses}xx` ?
67
- StringAsNumber<`${X}${Digit}${Digit}`> : number;
67
+ StringAsNumber<`${X}${Digit}${Digit}`> : number
68
68
 
69
69
  export type CodeToReplyKey<Code extends number> = `${Code}` extends `${infer FirstDigit extends CodeClasses}${number}`
70
70
  ? `${FirstDigit}xx`
71
- : never;
71
+ : never
72
72
 
73
73
  export type RecordKeysToLowercase<Input> = Input extends Record<string, unknown>
74
74
  ? {
75
- [Key in keyof Input as Key extends string
76
- ? Lowercase<Key>
77
- : Key
78
- ]: Input[Key];
79
- }
80
- : Input;
75
+ [Key in keyof Input as Key extends string
76
+ ? Lowercase<Key>
77
+ : Key
78
+ ]: Input[Key];
79
+ }
80
+ : Input
81
81
 
82
82
  type OmitIndexSignature<T> = {
83
83
  [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
84
- };
84
+ }
85
85
 
86
86
  /**
87
87
  * HTTP header strings
88
88
  * Use this type only for input values, not for output values.
89
89
  */
90
- export type HttpHeader = keyof OmitIndexSignature<http.OutgoingHttpHeaders> | (string & Record<never, never>);
90
+ export type HttpHeader = keyof OmitIndexSignature<http.OutgoingHttpHeaders> | (string & Record<never, never>)
package/.c8rc.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "exclude": [
3
- "lib/configValidator.js",
4
- "lib/error-serializer.js",
5
- "build/build-error-serializer.js",
6
- "test/*"
7
- ]
8
- }
package/.eslintrc DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "root": true,
3
- "extends": "standard"
4
- }
@@ -1,88 +0,0 @@
1
- 'use strict'
2
-
3
- const t = require('tap')
4
- const test = t.test
5
- const Fastify = require('..')
6
- const { FSTDEP014 } = require('../lib/warnings')
7
-
8
- // Silence the standard warning logs. We will test the messages explicitly.
9
- process.removeAllListeners('warning')
10
-
11
- test('setDefaultRoute should emit a deprecation warning', t => {
12
- t.plan(2)
13
-
14
- const fastify = Fastify()
15
- const defaultRoute = (req, res) => {
16
- res.end('hello from defaultRoute')
17
- }
18
-
19
- process.on('warning', onWarning)
20
- function onWarning (warning) {
21
- t.equal(warning.name, 'DeprecationWarning')
22
- t.equal(warning.code, FSTDEP014.code)
23
- }
24
-
25
- t.teardown(() => {
26
- process.removeListener('warning', onWarning)
27
- FSTDEP014.emitted = false
28
- })
29
-
30
- fastify.setDefaultRoute(defaultRoute)
31
- })
32
-
33
- test('getDefaultRoute should emit a deprecation warning', t => {
34
- t.plan(2)
35
-
36
- const fastify = Fastify()
37
-
38
- process.on('warning', onWarning)
39
- function onWarning (warning) {
40
- t.equal(warning.name, 'DeprecationWarning')
41
- t.equal(warning.code, FSTDEP014.code)
42
- }
43
-
44
- t.teardown(() => {
45
- process.removeListener('warning', onWarning)
46
- FSTDEP014.emitted = false
47
- })
48
-
49
- fastify.getDefaultRoute()
50
- })
51
-
52
- test('should fail if defaultRoute is not a function', t => {
53
- t.plan(1)
54
-
55
- const fastify = Fastify()
56
- const defaultRoute = {}
57
-
58
- fastify.get('/', () => {})
59
-
60
- try {
61
- fastify.setDefaultRoute(defaultRoute)
62
- } catch (error) {
63
- t.equal(error.code, 'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE')
64
- }
65
- })
66
-
67
- test('correctly sets, returns, and calls defaultRoute', t => {
68
- t.plan(3)
69
-
70
- const fastify = Fastify()
71
- const defaultRoute = (req, res) => {
72
- res.end('hello from defaultRoute')
73
- }
74
-
75
- fastify.setDefaultRoute(defaultRoute)
76
- const returnedDefaultRoute = fastify.getDefaultRoute()
77
- t.equal(returnedDefaultRoute, defaultRoute)
78
-
79
- fastify.get('/', () => {})
80
-
81
- fastify.inject({
82
- method: 'GET',
83
- url: '/random'
84
- }, (err, res) => {
85
- t.error(err)
86
- t.equal(res.body, 'hello from defaultRoute')
87
- })
88
- })
@@ -1,229 +0,0 @@
1
- 'use strict'
2
-
3
- // Tests for deprecated `.listen` signature. This file should be
4
- // removed when the deprecation is complete.
5
-
6
- const { test, before } = require('tap')
7
- const Fastify = require('..')
8
- const helper = require('./helper')
9
-
10
- let localhost
11
- let localhostForURL
12
-
13
- process.removeAllListeners('warning')
14
-
15
- before(async () => {
16
- [localhost, localhostForURL] = await helper.getLoopbackHost()
17
- })
18
-
19
- test('listen accepts a port and a callback', t => {
20
- t.plan(2)
21
- const fastify = Fastify()
22
- t.teardown(fastify.close.bind(fastify))
23
- fastify.listen(0, (err) => {
24
- t.equal(fastify.server.address().address, localhost)
25
- t.error(err)
26
- })
27
- })
28
-
29
- test('listen accepts a port and a callback with (err, address)', t => {
30
- t.plan(2)
31
- const fastify = Fastify()
32
- t.teardown(fastify.close.bind(fastify))
33
- fastify.listen(0, (err, address) => {
34
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
35
- t.error(err)
36
- })
37
- })
38
-
39
- test('listen accepts a port, address, and callback', t => {
40
- t.plan(1)
41
- const fastify = Fastify()
42
- t.teardown(fastify.close.bind(fastify))
43
- fastify.listen(0, localhost, (err) => {
44
- t.error(err)
45
- })
46
- })
47
-
48
- test('listen accepts options, backlog and a callback', t => {
49
- t.plan(1)
50
- const fastify = Fastify()
51
- t.teardown(fastify.close.bind(fastify))
52
- fastify.listen({
53
- port: 0,
54
- host: 'localhost'
55
- }, 511, (err) => {
56
- t.error(err)
57
- })
58
- })
59
-
60
- test('listen accepts options (no port), backlog and a callback', t => {
61
- t.plan(1)
62
- const fastify = Fastify()
63
- t.teardown(fastify.close.bind(fastify))
64
- fastify.listen({
65
- host: 'localhost'
66
- }, 511, (err) => {
67
- t.error(err)
68
- })
69
- })
70
-
71
- test('listen accepts options (no host), backlog and a callback', t => {
72
- t.plan(1)
73
- const fastify = Fastify()
74
- t.teardown(fastify.close.bind(fastify))
75
- fastify.listen({
76
- port: 0
77
- }, 511, (err) => {
78
- t.error(err)
79
- })
80
- })
81
-
82
- test('listen accepts options (no port, no host), backlog and a callback', t => {
83
- t.plan(1)
84
- const fastify = Fastify()
85
- t.teardown(fastify.close.bind(fastify))
86
- fastify.listen({
87
- ipv6Only: false
88
- }, 511, (err) => {
89
- t.error(err)
90
- })
91
- })
92
-
93
- test('listen accepts a port, address and a callback with (err, address)', t => {
94
- t.plan(2)
95
- const fastify = Fastify()
96
- t.teardown(fastify.close.bind(fastify))
97
- fastify.listen(0, localhost, (err, address) => {
98
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
99
- t.error(err)
100
- })
101
- })
102
-
103
- test('listen accepts a port, address, backlog and callback', t => {
104
- t.plan(1)
105
- const fastify = Fastify()
106
- t.teardown(fastify.close.bind(fastify))
107
- fastify.listen(0, localhost, 511, (err) => {
108
- t.error(err)
109
- })
110
- })
111
-
112
- test('listen accepts a port, address, backlog and callback with (err, address)', t => {
113
- t.plan(2)
114
- const fastify = Fastify()
115
- t.teardown(fastify.close.bind(fastify))
116
- fastify.listen(0, localhost, 511, (err, address) => {
117
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
118
- t.error(err)
119
- })
120
- })
121
-
122
- test('listen without callback (port zero)', t => {
123
- t.plan(1)
124
- const fastify = Fastify()
125
- t.teardown(fastify.close.bind(fastify))
126
- fastify.listen(0)
127
- .then(() => {
128
- t.equal(fastify.server.address().address, localhost)
129
- })
130
- })
131
-
132
- test('listen without callback (port not given)', t => {
133
- t.plan(1)
134
- const fastify = Fastify()
135
- t.teardown(fastify.close.bind(fastify))
136
- fastify.listen()
137
- .then(() => {
138
- t.equal(fastify.server.address().address, localhost)
139
- })
140
- })
141
-
142
- test('listen null without callback with (address)', t => {
143
- t.plan(1)
144
- const fastify = Fastify()
145
- t.teardown(fastify.close.bind(fastify))
146
- fastify.listen(null)
147
- .then(address => {
148
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
149
- })
150
- })
151
-
152
- test('listen without port without callback with (address)', t => {
153
- t.plan(1)
154
- const fastify = Fastify()
155
- t.teardown(fastify.close.bind(fastify))
156
- fastify.listen()
157
- .then(address => {
158
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
159
- })
160
- })
161
-
162
- test('listen with undefined without callback with (address)', t => {
163
- t.plan(1)
164
- const fastify = Fastify()
165
- t.teardown(fastify.close.bind(fastify))
166
- fastify.listen(undefined)
167
- .then(address => {
168
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
169
- })
170
- })
171
-
172
- test('listen when firstArg is string(pipe) and without backlog', async t => {
173
- t.plan(1)
174
- const fastify = Fastify()
175
- t.teardown(fastify.close.bind(fastify))
176
- const address = await fastify.listen('\\\\.\\pipe\\testPipe')
177
- t.equal(address, '\\\\.\\pipe\\testPipe')
178
- })
179
-
180
- test('listen when firstArg is string(pipe) and with backlog', async t => {
181
- t.plan(1)
182
- const fastify = Fastify()
183
- t.teardown(fastify.close.bind(fastify))
184
- const address = await fastify.listen('\\\\.\\pipe\\testPipe2', 511)
185
- t.equal(address, '\\\\.\\pipe\\testPipe2')
186
- })
187
-
188
- test('listen when firstArg is { path: string(pipe) } and with backlog and callback', t => {
189
- t.plan(2)
190
- const fastify = Fastify()
191
- t.teardown(fastify.close.bind(fastify))
192
- fastify.listen({ path: '\\\\.\\pipe\\testPipe3' }, 511, (err, address) => {
193
- t.error(err)
194
- t.equal(address, '\\\\.\\pipe\\testPipe3')
195
- })
196
- })
197
-
198
- test('listen accepts a port as string, and callback', t => {
199
- t.plan(2)
200
- const fastify = Fastify()
201
- t.teardown(fastify.close.bind(fastify))
202
- const port = 3000
203
- fastify.listen(port.toString(), localhost, (err) => {
204
- t.equal(fastify.server.address().port, port)
205
- t.error(err)
206
- })
207
- })
208
-
209
- test('listen accepts a port as string, address and callback', t => {
210
- t.plan(3)
211
- const fastify = Fastify()
212
- t.teardown(fastify.close.bind(fastify))
213
- const port = 3000
214
- fastify.listen(port.toString(), localhost, (err) => {
215
- t.equal(fastify.server.address().port, port)
216
- t.equal(fastify.server.address().address, localhost)
217
- t.error(err)
218
- })
219
- })
220
-
221
- test('listen with invalid port string without callback with (address)', t => {
222
- t.plan(1)
223
- const fastify = Fastify()
224
- t.teardown(fastify.close.bind(fastify))
225
- fastify.listen('-1')
226
- .then(address => {
227
- t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)
228
- })
229
- })
@@ -1,31 +0,0 @@
1
- 'use strict'
2
-
3
- const net = require('node:net')
4
- const t = require('tap')
5
- const Fastify = require('../fastify')
6
-
7
- t.test('Will return 505 HTTP error if HTTP version (2.0 when server is 1.1) is not supported', t => {
8
- const fastify = Fastify()
9
-
10
- t.teardown(fastify.close.bind(fastify))
11
-
12
- fastify.get('/', (req, reply) => {
13
- reply.send({ hello: 'world' })
14
- })
15
-
16
- fastify.listen({ port: 0 }, err => {
17
- t.error(err)
18
-
19
- const port = fastify.server.address().port
20
- const client = net.createConnection({ port }, () => {
21
- client.write('GET / HTTP/2.0\r\nHost: example.com\r\n\r\n')
22
-
23
- client.once('data', data => {
24
- t.match(data.toString(), /505 HTTP Version Not Supported/i)
25
- client.end(() => {
26
- t.end()
27
- })
28
- })
29
- })
30
- })
31
- })