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
@@ -4,7 +4,8 @@ import fastify, {
4
4
  FastifyRequest,
5
5
  FastifyReply,
6
6
  FastifyInstance,
7
- FastifyError
7
+ FastifyError,
8
+ SafePromiseLike
8
9
  } from '../../fastify'
9
10
  import { expectAssignable, expectError, expectType } from 'tsd'
10
11
  import { IncomingHttpHeaders } from 'http'
@@ -23,7 +24,10 @@ expectAssignable(server.get('/', (req) => expectType<unknown>(req.body)))
23
24
  // Remapping
24
25
  // -------------------------------------------------------------------
25
26
 
26
- interface NumberProvider extends FastifyTypeProvider { output: number } // remap all schemas to numbers
27
+ interface NumberProvider extends FastifyTypeProvider {
28
+ validator: number
29
+ serializer: number
30
+ } // remap all schemas to numbers
27
31
 
28
32
  expectAssignable(server.withTypeProvider<NumberProvider>().get(
29
33
  '/',
@@ -47,7 +51,7 @@ expectAssignable(server.withTypeProvider<NumberProvider>().get(
47
51
  // Override
48
52
  // -------------------------------------------------------------------
49
53
 
50
- interface OverriddenProvider extends FastifyTypeProvider { output: 'inferenced' }
54
+ interface OverriddenProvider extends FastifyTypeProvider { validator: 'inferenced' }
51
55
 
52
56
  expectAssignable(server.withTypeProvider<OverriddenProvider>().get<{ Body: 'override' }>(
53
57
  '/',
@@ -69,7 +73,10 @@ expectAssignable(server.withTypeProvider<OverriddenProvider>().get<{ Body: 'over
69
73
  // TypeBox
70
74
  // -------------------------------------------------------------------
71
75
 
72
- interface TypeBoxProvider extends FastifyTypeProvider { output: this['input'] extends TSchema ? Static<this['input']> : unknown }
76
+ interface TypeBoxProvider extends FastifyTypeProvider {
77
+ validator: this['schema'] extends TSchema ? Static<this['schema']> : unknown
78
+ serializer: this['schema'] extends TSchema ? Static<this['schema']> : unknown
79
+ }
73
80
 
74
81
  expectAssignable(server.withTypeProvider<TypeBoxProvider>().get(
75
82
  '/',
@@ -103,7 +110,10 @@ expectAssignable<FastifyInstance>(server.withTypeProvider<TypeBoxProvider>())
103
110
  // JsonSchemaToTs
104
111
  // -------------------------------------------------------------------
105
112
 
106
- interface JsonSchemaToTsProvider extends FastifyTypeProvider { output: this['input'] extends JSONSchema ? FromSchema<this['input']> : unknown }
113
+ interface JsonSchemaToTsProvider extends FastifyTypeProvider {
114
+ validator: this['schema'] extends JSONSchema ? FromSchema<this['schema']> : unknown
115
+ serializer: this['schema'] extends JSONSchema ? FromSchema<this['schema']> : unknown
116
+ }
107
117
 
108
118
  // explicitly setting schema `as const`
109
119
 
@@ -907,7 +917,7 @@ expectError(server.withTypeProvider<JsonSchemaToTsProvider>().get(
907
917
  // Reply Type Override
908
918
  // -------------------------------------------------------------------
909
919
 
910
- expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(
920
+ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{ Reply: boolean }>(
911
921
  '/',
912
922
  {
913
923
  schema: {
@@ -927,7 +937,7 @@ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: b
927
937
  // Reply Type Override (Different Content-types)
928
938
  // -------------------------------------------------------------------
929
939
 
930
- expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(
940
+ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{ Reply: boolean }>(
931
941
  '/',
932
942
  {
933
943
  schema: {
@@ -955,7 +965,7 @@ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: b
955
965
  // Reply Type Return Override
956
966
  // -------------------------------------------------------------------
957
967
 
958
- expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(
968
+ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{ Reply: boolean }>(
959
969
  '/',
960
970
  {
961
971
  schema: {
@@ -975,7 +985,7 @@ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: b
975
985
  // Reply Type Return Override (Different Content-types)
976
986
  // -------------------------------------------------------------------
977
987
 
978
- expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(
988
+ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{ Reply: boolean }>(
979
989
  '/',
980
990
  {
981
991
  schema: {
@@ -1003,7 +1013,7 @@ expectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: b
1003
1013
  // FastifyPlugin: Auxiliary
1004
1014
  // -------------------------------------------------------------------
1005
1015
 
1006
- interface AuxiliaryPluginProvider extends FastifyTypeProvider { output: 'plugin-auxiliary' }
1016
+ interface AuxiliaryPluginProvider extends FastifyTypeProvider { validator: 'plugin-auxiliary' }
1007
1017
 
1008
1018
  // Auxiliary plugins may have varying server types per application. Recommendation would be to explicitly remap instance provider context within plugin if required.
1009
1019
  function plugin<T extends FastifyInstance> (instance: T) {
@@ -1032,7 +1042,7 @@ expectAssignable(server.withTypeProvider<AuxiliaryPluginProvider>().register(plu
1032
1042
  // Handlers: Inline
1033
1043
  // -------------------------------------------------------------------
1034
1044
 
1035
- interface InlineHandlerProvider extends FastifyTypeProvider { output: 'handler-inline' }
1045
+ interface InlineHandlerProvider extends FastifyTypeProvider { validator: 'handler-inline' }
1036
1046
 
1037
1047
  // Inline handlers should infer for the request parameters (non-shared)
1038
1048
  expectAssignable(server.withTypeProvider<InlineHandlerProvider>().get(
@@ -1052,7 +1062,7 @@ expectAssignable(server.withTypeProvider<InlineHandlerProvider>().get(
1052
1062
  // Handlers: Auxiliary
1053
1063
  // -------------------------------------------------------------------
1054
1064
 
1055
- interface AuxiliaryHandlerProvider extends FastifyTypeProvider { output: 'handler-auxiliary' }
1065
+ interface AuxiliaryHandlerProvider extends FastifyTypeProvider { validator: 'handler-auxiliary' }
1056
1066
 
1057
1067
  // Auxiliary handlers are likely shared for multiple routes and thus should infer as unknown due to potential varying parameters
1058
1068
  function auxiliaryHandler (request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction): void {
@@ -1063,9 +1073,46 @@ expectAssignable(server.withTypeProvider<AuxiliaryHandlerProvider>().get(
1063
1073
  '/',
1064
1074
  {
1065
1075
  onRequest: auxiliaryHandler,
1066
- schema: { body: null }
1076
+ schema: { body: 'handler-auxiliary' }
1067
1077
  },
1068
1078
  (req) => {
1069
1079
  expectType<'handler-auxiliary'>(req.body)
1070
1080
  }
1071
1081
  ))
1082
+
1083
+ // -------------------------------------------------------------------
1084
+ // SafePromiseLike
1085
+ // -------------------------------------------------------------------
1086
+ const safePromiseLike = {
1087
+ then: new Promise<string>(resolve => resolve('')).then,
1088
+ __linterBrands: 'SafePromiseLike' as const
1089
+ }
1090
+ expectAssignable<SafePromiseLike<string>>(safePromiseLike)
1091
+ expectAssignable<PromiseLike<string>>(safePromiseLike)
1092
+ expectError<Promise<string>>(safePromiseLike)
1093
+
1094
+ // -------------------------------------------------------------------
1095
+ // Separate Providers
1096
+ // -------------------------------------------------------------------
1097
+
1098
+ interface SeparateProvider extends FastifyTypeProvider {
1099
+ validator: string
1100
+ serializer: Date
1101
+ }
1102
+
1103
+ expectAssignable(server.withTypeProvider<SeparateProvider>().get(
1104
+ '/',
1105
+ {
1106
+ schema: {
1107
+ body: null,
1108
+ response: {
1109
+ 200: { type: 'string' }
1110
+ }
1111
+ }
1112
+ },
1113
+ (req, res) => {
1114
+ expectType<string>(req.body)
1115
+
1116
+ res.send(new Date())
1117
+ }
1118
+ ))
@@ -1,4 +1,4 @@
1
- import { expectAssignable, expectType } from 'tsd'
1
+ import { expectAssignable } from 'tsd'
2
2
  import fastify, { FastifyInstance } from '../../fastify'
3
3
 
4
4
  async function hasSymbolDisposeWithUsing () {
@@ -12,3 +12,6 @@ async function hasSymbolDispose () {
12
12
  expectAssignable<FastifyInstance>(app)
13
13
  expectAssignable<FastifyInstance[typeof Symbol.asyncDispose]>(app.close)
14
14
  }
15
+
16
+ hasSymbolDisposeWithUsing()
17
+ hasSymbolDispose()
@@ -119,8 +119,8 @@ test('Should rewrite url but keep originalUrl unchanged', t => {
119
119
  method: 'GET',
120
120
  url: '/',
121
121
  handler: (req, reply) => {
122
+ reply.send({ hello: 'world', hostname: req.hostname, port: req.port })
122
123
  t.equal(req.originalUrl, '/this-would-404-without-url-rewrite')
123
- reply.send({ hello: 'world' })
124
124
  }
125
125
  })
126
126
 
@@ -132,7 +132,8 @@ test('Should rewrite url but keep originalUrl unchanged', t => {
132
132
  url: 'http://localhost:' + fastify.server.address().port + '/this-would-404-without-url-rewrite'
133
133
  }, (err, response, body) => {
134
134
  t.error(err)
135
- t.same(JSON.parse(body), { hello: 'world' })
135
+ const parsedBody = JSON.parse(body)
136
+ t.same(parsedBody, { hello: 'world', hostname: 'localhost', port: fastify.server.address().port })
136
137
  t.equal(response.statusCode, 200)
137
138
  })
138
139
  })
@@ -5,30 +5,27 @@ const test = t.test
5
5
  const Fastify = require('..')
6
6
  const sget = require('simple-get').concat
7
7
 
8
- test('use semicolon delimiter default true', t => {
8
+ test('use semicolon delimiter default false', t => {
9
9
  t.plan(4)
10
10
 
11
11
  const fastify = Fastify({})
12
12
 
13
13
  t.teardown(fastify.close.bind(fastify))
14
14
 
15
- fastify.get('/1234', (req, reply) => {
15
+ fastify.get('/1234;foo=bar', (req, reply) => {
16
16
  reply.send(req.query)
17
17
  })
18
18
 
19
19
  fastify.listen({ port: 0 }, err => {
20
20
  t.error(err)
21
21
 
22
- console.log('http://localhost:' + fastify.server.address().port + '/1234;foo=bar')
23
22
  sget({
24
23
  method: 'GET',
25
24
  url: 'http://localhost:' + fastify.server.address().port + '/1234;foo=bar'
26
25
  }, (err, response, body) => {
27
26
  t.error(err)
28
27
  t.equal(response.statusCode, 200)
29
- t.same(JSON.parse(body), {
30
- foo: 'bar'
31
- })
28
+ t.same(JSON.parse(body), {})
32
29
  })
33
30
  })
34
31
  })
@@ -454,7 +454,7 @@ test('test log stream', t => {
454
454
  t.teardown(() => { fastify.close() })
455
455
 
456
456
  http.get({
457
- hostname: fastify.server.address().hostname,
457
+ host: fastify.server.address().hostname,
458
458
  port: fastify.server.address().port,
459
459
  path: '/',
460
460
  method: 'GET',
@@ -4,15 +4,9 @@ const t = require('tap')
4
4
  const test = t.test
5
5
  const Fastify = require('../fastify')
6
6
  const fs = require('node:fs')
7
- const semver = require('semver')
8
7
  const { Readable } = require('node:stream')
9
8
  const { fetch: undiciFetch } = require('undici')
10
9
 
11
- if (semver.lt(process.versions.node, '18.0.0')) {
12
- t.skip('Response or ReadableStream not available, skipping test')
13
- process.exit(0)
14
- }
15
-
16
10
  test('should response with a ReadableStream', async (t) => {
17
11
  t.plan(2)
18
12
 
@@ -15,7 +15,7 @@ export type FastifyBodyParser<
15
15
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
16
16
  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
17
17
  SchemaCompiler extends FastifySchema = FastifySchema,
18
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
18
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
19
19
  > = ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, rawBody: RawBody, done: ContentTypeParserDoneFunction) => void)
20
20
  | ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, rawBody: RawBody) => Promise<any>)
21
21
 
@@ -27,7 +27,7 @@ export type FastifyContentTypeParser<
27
27
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
28
28
  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
29
29
  SchemaCompiler extends FastifySchema = FastifySchema,
30
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
30
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
31
31
  > = ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, payload: RawRequest) => Promise<any>)
32
32
  | ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, payload: RawRequest, done: ContentTypeParserDoneFunction) => void)
33
33
 
@@ -39,7 +39,7 @@ export interface AddContentTypeParser<
39
39
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
40
40
  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
41
41
  SchemaCompiler extends FastifySchema = FastifySchema,
42
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
42
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
43
43
  > {
44
44
  (
45
45
  contentType: string | string[] | RegExp,
@@ -1,7 +1,6 @@
1
1
  import { FastifyRouteConfig } from './route'
2
2
  import { ContextConfigDefault } from './utils'
3
3
 
4
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
5
4
  export interface FastifyContextConfig {
6
5
  }
7
6
 
package/types/errors.d.ts CHANGED
@@ -24,6 +24,7 @@ export type FastifyErrorCodes = Record<
24
24
  'FST_ERR_DEC_DEPENDENCY_INVALID_TYPE' |
25
25
  'FST_ERR_DEC_MISSING_DEPENDENCY' |
26
26
  'FST_ERR_DEC_AFTER_START' |
27
+ 'FST_ERR_DEC_REFERENCE_TYPE' |
27
28
  'FST_ERR_HOOK_INVALID_TYPE' |
28
29
  'FST_ERR_HOOK_INVALID_HANDLER' |
29
30
  'FST_ERR_HOOK_INVALID_ASYNC_HANDLER' |
package/types/hooks.d.ts CHANGED
@@ -724,7 +724,7 @@ export interface onReadyHookHandler<
724
724
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
725
725
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
726
726
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
727
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
727
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
728
728
  > {
729
729
  (
730
730
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
@@ -737,7 +737,7 @@ export interface onReadyAsyncHookHandler<
737
737
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
738
738
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
739
739
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
740
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
740
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
741
741
  > {
742
742
  (
743
743
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
@@ -752,7 +752,7 @@ export interface onListenHookHandler<
752
752
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
753
753
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
754
754
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
755
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
755
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
756
756
  > {
757
757
  (
758
758
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
@@ -765,7 +765,7 @@ export interface onListenAsyncHookHandler<
765
765
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
766
766
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
767
767
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
768
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
768
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
769
769
  > {
770
770
  (
771
771
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
@@ -779,7 +779,7 @@ export interface onCloseHookHandler<
779
779
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
780
780
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
781
781
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
782
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
782
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
783
783
  > {
784
784
  (
785
785
  instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
@@ -807,7 +807,7 @@ export interface preCloseHookHandler<
807
807
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
808
808
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
809
809
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
810
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
810
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
811
811
  > {
812
812
  (
813
813
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
@@ -9,7 +9,7 @@ import { FastifyBaseLogger, FastifyChildLoggerFactory } from './logger'
9
9
  import { FastifyRegister } from './register'
10
10
  import { FastifyReply } from './reply'
11
11
  import { FastifyRequest } from './request'
12
- import { DefaultRoute, RouteGenericInterface, RouteHandlerMethod, RouteOptions, RouteShorthandMethod } from './route'
12
+ import { RouteGenericInterface, RouteHandlerMethod, RouteOptions, RouteShorthandMethod } from './route'
13
13
  import {
14
14
  FastifySchema,
15
15
  FastifySchemaCompiler,
@@ -19,7 +19,8 @@ import {
19
19
  } from './schema'
20
20
  import {
21
21
  FastifyTypeProvider,
22
- FastifyTypeProviderDefault
22
+ FastifyTypeProviderDefault,
23
+ SafePromiseLike
23
24
  } from './type-provider'
24
25
  import { ContextConfigDefault, HTTPMethods, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault } from './utils'
25
26
 
@@ -30,7 +31,7 @@ export interface PrintRoutesOptions {
30
31
  includeHooks?: boolean
31
32
  }
32
33
 
33
- type AsyncFunction = (...args: any) => Promise<any>;
34
+ type AsyncFunction = (...args: any) => Promise<any>
34
35
 
35
36
  export interface FastifyListenOptions {
36
37
  /**
@@ -96,7 +97,7 @@ type GetterSetter<This, T> = T | {
96
97
  type DecorationMethod<This, Return = This> = {
97
98
  <
98
99
  // Need to disable "no-use-before-define" to maintain backwards compatibility, as else decorate<Foo> would suddenly mean something new
99
- // eslint-disable-next-line no-use-before-define
100
+
100
101
  T extends (P extends keyof This ? This[P] : unknown),
101
102
  P extends string | symbol = string | symbol
102
103
  >(property: P,
@@ -109,9 +110,7 @@ type DecorationMethod<This, Return = This> = {
109
110
 
110
111
  (property: string | symbol): Return;
111
112
 
112
- (property: string | symbol, value: null): Return;
113
-
114
- (property: string | symbol, value: null|undefined, dependencies: string[]): Return;
113
+ (property: string | symbol, value: null | undefined, dependencies: string[]): Return;
115
114
  }
116
115
 
117
116
  /**
@@ -122,7 +121,7 @@ export interface FastifyInstance<
122
121
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
123
122
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
124
123
  Logger extends FastifyBaseLogger = FastifyBaseLogger,
125
- TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
124
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
126
125
  > {
127
126
  server: RawServer;
128
127
  pluginName: string;
@@ -137,14 +136,14 @@ export interface FastifyInstance<
137
136
  getSchema(schemaId: string): unknown;
138
137
  getSchemas(): Record<string, unknown>;
139
138
 
140
- after(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & PromiseLike<undefined>;
139
+ after(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & SafePromiseLike<undefined>;
141
140
  after(afterListener: (err: Error | null) => void): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
142
141
 
143
142
  close(): Promise<undefined>;
144
143
  close(closeListener: () => void): undefined;
145
144
 
146
145
  /** Alias for {@linkcode FastifyInstance.close()} */
147
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
146
+
148
147
  // @ts-ignore - type only available for @types/node >=17 or typescript >= 5.2
149
148
  [Symbol.asyncDispose](): Promise<undefined>;
150
149
 
@@ -169,61 +168,49 @@ export interface FastifyInstance<
169
168
  listen(opts?: FastifyListenOptions): Promise<string>;
170
169
  listen(callback: (err: Error | null, address: string) => void): void;
171
170
 
172
- /**
173
- * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject, callback)` instead. The variadic signature will be removed in `fastify@5`
174
- * @see https://github.com/fastify/fastify/pull/3712
175
- */
176
- listen(port: number | string, address: string, backlog: number, callback: (err: Error|null, address: string) => void): void;
177
- /**
178
- * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject, callback)` instead. The variadic signature will be removed in `fastify@5`
179
- * @see https://github.com/fastify/fastify/pull/3712
180
- */
181
- listen(port: number | string, address: string, callback: (err: Error|null, address: string) => void): void;
182
- /**
183
- * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject, callback)` instead. The variadic signature will be removed in `fastify@5`
184
- * @see https://github.com/fastify/fastify/pull/3712
185
- */
186
- listen(port: number | string, callback: (err: Error|null, address: string) => void): void;
187
- /**
188
- * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject)` instead. The variadic signature will be removed in `fastify@5`
189
- * @see https://github.com/fastify/fastify/pull/3712
190
- */
191
- listen(port: number | string, address?: string, backlog?: number): Promise<string>;
192
-
193
- ready(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & PromiseLike<undefined>;
194
- ready(readyListener: (err: Error | null) => void): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
171
+ ready(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & SafePromiseLike<undefined>;
172
+ ready(readyListener: (err: Error | null) => void | Promise<void>): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
195
173
 
196
- register: FastifyRegister<FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & PromiseLike<undefined>>;
174
+ register: FastifyRegister<FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & SafePromiseLike<undefined>>;
197
175
 
198
176
  routing(req: RawRequest, res: RawReply): void;
199
- getDefaultRoute(): DefaultRoute<RawRequest, RawReply>;
200
- setDefaultRoute(defaultRoute: DefaultRoute<RawRequest, RawReply>): void;
201
177
 
202
178
  route<
203
179
  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
204
180
  ContextConfig = ContextConfigDefault,
205
- const SchemaCompiler extends FastifySchema = FastifySchema,
181
+ const SchemaCompiler extends FastifySchema = FastifySchema
206
182
  >(opts: RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
207
183
 
184
+ delete: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
208
185
  get: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
209
186
  head: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
187
+ patch: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
210
188
  post: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
211
189
  put: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
212
- delete: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
213
190
  options: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
214
- patch: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
191
+ propfind: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
192
+ proppatch: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
193
+ mkcalendar: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
194
+ mkcol: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
195
+ copy: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
196
+ move: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
197
+ lock: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
198
+ unlock: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
199
+ trace: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
200
+ report: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
201
+ search: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
215
202
  all: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider, Logger>;
216
203
 
217
204
  hasRoute<
218
205
  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
219
206
  ContextConfig = ContextConfigDefault,
220
- SchemaCompiler extends FastifySchema = FastifySchema,
207
+ SchemaCompiler extends FastifySchema = FastifySchema
221
208
  >(opts: Pick<RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>, 'method' | 'url' | 'constraints'>): boolean;
222
209
 
223
210
  findRoute<
224
211
  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
225
212
  ContextConfig = ContextConfigDefault,
226
- SchemaCompiler extends FastifySchema = FastifySchema,
213
+ SchemaCompiler extends FastifySchema = FastifySchema
227
214
  >(opts: Pick<RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>, 'method' | 'url' | 'constraints'>): Omit<FindMyWayFindResult<RawServer>, 'store'>;
228
215
 
229
216
  // addHook: overloads
package/types/logger.d.ts CHANGED
@@ -43,7 +43,7 @@ export type PinoLoggerOptions = pino.LoggerOptions
43
43
  export type ResSerializerReply<
44
44
  RawServer extends RawServerBase,
45
45
  RawReply extends FastifyReply<RawServer>
46
- > = Partial<RawReply> & Pick<RawReply, 'statusCode'>;
46
+ > = Partial<RawReply> & Pick<RawReply, 'statusCode'>
47
47
 
48
48
  /**
49
49
  * Fastify Custom Logger options.
@@ -51,14 +51,14 @@ export type ResSerializerReply<
51
51
  export interface FastifyLoggerOptions<
52
52
  RawServer extends RawServerBase = RawServerDefault,
53
53
  RawRequest extends FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProvider> = FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProviderDefault>,
54
- RawReply extends FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault>,
54
+ RawReply extends FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault>
55
55
  > {
56
56
  serializers?: {
57
57
  req?: (req: RawRequest) => {
58
58
  method?: string;
59
59
  url?: string;
60
60
  version?: string;
61
- hostname?: string;
61
+ host?: string;
62
62
  remoteAddress?: string;
63
63
  remotePort?: number;
64
64
  [key: string]: unknown;
package/types/plugin.d.ts CHANGED
@@ -14,7 +14,7 @@ export type FastifyPluginCallback<
14
14
  Options extends FastifyPluginOptions = Record<never, never>,
15
15
  Server extends RawServerBase = RawServerDefault,
16
16
  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
17
- Logger extends FastifyBaseLogger = FastifyBaseLogger,
17
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
18
18
  > = (
19
19
  instance: FastifyInstance<Server, RawRequestDefaultExpression<Server>, RawReplyDefaultExpression<Server>, Logger, TypeProvider>,
20
20
  opts: Options,
@@ -30,11 +30,11 @@ export type FastifyPluginAsync<
30
30
  Options extends FastifyPluginOptions = Record<never, never>,
31
31
  Server extends RawServerBase = RawServerDefault,
32
32
  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
33
- Logger extends FastifyBaseLogger = FastifyBaseLogger,
33
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
34
34
  > = (
35
35
  instance: FastifyInstance<Server, RawRequestDefaultExpression<Server>, RawReplyDefaultExpression<Server>, Logger, TypeProvider>,
36
36
  opts: Options
37
- ) => Promise<void>;
37
+ ) => Promise<void>
38
38
 
39
39
  /**
40
40
  * Generic plugin type.
package/types/reply.d.ts CHANGED
@@ -5,7 +5,7 @@ import { FastifyBaseLogger } from './logger'
5
5
  import { FastifyRequest } from './request'
6
6
  import { RouteGenericInterface } from './route'
7
7
  import { FastifySchema } from './schema'
8
- import { FastifyReplyType, FastifyTypeProvider, FastifyTypeProviderDefault, ResolveFastifyReplyType, CallTypeProvider } from './type-provider'
8
+ import { CallSerializerTypeProvider, FastifyReplyType, FastifyTypeProvider, FastifyTypeProviderDefault, ResolveFastifyReplyType } from './type-provider'
9
9
  import { CodeToReplyKey, ContextConfigDefault, HttpKeys, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault, ReplyDefault, ReplyKeysToCodes, HttpHeader } from './utils'
10
10
 
11
11
  export interface ReplyGenericInterface {
@@ -18,13 +18,13 @@ type ReplyTypeConstrainer<RouteGenericReply, Code extends ReplyKeysToCodes<keyof
18
18
  RouteGenericReply extends HttpCodesReplyType & Record<Exclude<keyof RouteGenericReply, keyof HttpCodesReplyType>, never> ?
19
19
  Code extends keyof RouteGenericReply ? RouteGenericReply[Code] :
20
20
  CodeToReplyKey<Code> extends keyof RouteGenericReply ? RouteGenericReply[CodeToReplyKey<Code>] : unknown :
21
- RouteGenericReply;
21
+ RouteGenericReply
22
22
 
23
23
  export type ResolveReplyTypeWithRouteGeneric<RouteGenericReply, Code extends ReplyKeysToCodes<keyof RouteGenericReply>,
24
24
  SchemaCompiler extends FastifySchema = FastifySchema,
25
25
  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault> =
26
26
  Code extends keyof SchemaCompiler['response'] ?
27
- CallTypeProvider<TypeProvider, SchemaCompiler['response'][Code]> :
27
+ CallSerializerTypeProvider<TypeProvider, SchemaCompiler['response'][Code]> :
28
28
  ResolveFastifyReplyType<TypeProvider, SchemaCompiler, { Reply: ReplyTypeConstrainer<RouteGenericReply, Code> }>
29
29
  /**
30
30
  * FastifyReply is an instance of the standard http or http2 reply types.
@@ -57,24 +57,23 @@ export interface FastifyReply<
57
57
  getHeaders(): Record<HttpHeader, number | string | string[] | undefined>;
58
58
  removeHeader(key: HttpHeader): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
59
59
  hasHeader(key: HttpHeader): boolean;
60
- // Note: should consider refactoring the argument order for redirect. statusCode is optional so it should be after the required url param
60
+ /**
61
+ * @deprecated The `reply.redirect()` method has a new signature: `reply.reply.redirect(url: string, code?: number)`. It will be enforced in `fastify@v5`'.
62
+ */
61
63
  redirect(statusCode: number, url: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
62
- redirect(url: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
64
+ redirect(url: string, statusCode?: number): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
65
+ writeEarlyHints(hints: Record<string, string | string[]>, callback?: () => void): void;
63
66
  hijack(): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
64
67
  callNotFound(): void;
65
- /**
66
- * @deprecated Use the Reply#elapsedTime property instead
67
- */
68
- getResponseTime(): number;
69
68
  type(contentType: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
70
69
  serializer(fn: (payload: any) => string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
71
70
  serialize(payload: any): string | ArrayBuffer | Buffer;
72
71
  // Serialization Methods
73
- getSerializationFunction(httpStatus: string, contentType?: string): ((payload: {[key: string]: unknown}) => string) | undefined;
74
- getSerializationFunction(schema: {[key: string]: unknown}): ((payload: {[key: string]: unknown}) => string) | undefined;
75
- compileSerializationSchema(schema: {[key: string]: unknown}, httpStatus?: string, contentType?: string): (payload: {[key: string]: unknown}) => string;
76
- serializeInput(input: {[key: string]: unknown}, schema: {[key: string]: unknown}, httpStatus?: string, contentType?: string): string;
77
- serializeInput(input: {[key: string]: unknown}, httpStatus: string, contentType?: string): unknown;
72
+ getSerializationFunction(httpStatus: string, contentType?: string): ((payload: { [key: string]: unknown }) => string) | undefined;
73
+ getSerializationFunction(schema: { [key: string]: unknown }): ((payload: { [key: string]: unknown }) => string) | undefined;
74
+ compileSerializationSchema(schema: { [key: string]: unknown }, httpStatus?: string, contentType?: string): (payload: { [key: string]: unknown }) => string;
75
+ serializeInput(input: { [key: string]: unknown }, schema: { [key: string]: unknown }, httpStatus?: string, contentType?: string): string;
76
+ serializeInput(input: { [key: string]: unknown }, httpStatus: string, contentType?: string): unknown;
78
77
  then(fulfilled: () => void, rejected: (err: Error) => void): void;
79
78
  trailer: (
80
79
  key: string,
@@ -75,6 +75,8 @@ export interface FastifyRequest<RouteGeneric extends RouteGenericInterface = Rou
75
75
  readonly req: RawRequest & RouteGeneric['Headers']; // this enables the developer to extend the existing http(s|2) headers list
76
76
  readonly ip: string;
77
77
  readonly ips?: string[];
78
+ readonly host: string;
79
+ readonly port: number;
78
80
  readonly hostname: string;
79
81
  readonly url: string;
80
82
  readonly originalUrl: string;
@@ -87,9 +89,9 @@ export interface FastifyRequest<RouteGeneric extends RouteGenericInterface = Rou
87
89
  readonly socket: RawRequest['socket'];
88
90
 
89
91
  getValidationFunction(httpPart: HTTPRequestPart): ValidationFunction
90
- getValidationFunction(schema: {[key: string]: any}): ValidationFunction
91
- compileValidationSchema(schema: {[key: string]: any}, httpPart?: HTTPRequestPart): ValidationFunction
92
- validateInput(input: any, schema: {[key: string]: any}, httpPart?: HTTPRequestPart): boolean
92
+ getValidationFunction(schema: { [key: string]: any }): ValidationFunction
93
+ compileValidationSchema(schema: { [key: string]: any }, httpPart?: HTTPRequestPart): ValidationFunction
94
+ validateInput(input: any, schema: { [key: string]: any }, httpPart?: HTTPRequestPart): boolean
93
95
  validateInput(input: any, httpPart?: HTTPRequestPart): boolean
94
96
 
95
97
  // Prefer `socket` over deprecated `connection` property in node 13.0.0 or higher