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
@@ -59,8 +59,6 @@ expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_FORCE_CLOSE_CONNECT
59
59
  expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_DUPLICATED_ROUTE)
60
60
  expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_BAD_URL)
61
61
  expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ASYNC_CONSTRAINT)
62
- expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_DEFAULT_ROUTE_INVALID_TYPE)
63
- expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_INVALID_URL)
64
62
  expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ROUTE_OPTIONS_NOT_OBJ)
65
63
  expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ROUTE_DUPLICATED_HANDLER)
66
64
  expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ROUTE_HANDLER_NOT_FN)
@@ -11,30 +11,32 @@ import fastify, {
11
11
  RawRequestDefaultExpression,
12
12
  RouteGenericInterface,
13
13
  FastifyErrorCodes,
14
- FastifyError
14
+ FastifyError,
15
+ SafePromiseLike
15
16
  } from '../../fastify'
16
17
  import { ErrorObject as AjvErrorObject } from 'ajv'
17
18
  import * as http from 'http'
18
19
  import * as https from 'https'
19
20
  import * as http2 from 'http2'
20
21
  import { expectType, expectError, expectAssignable, expectNotAssignable } from 'tsd'
21
- import { FastifyLoggerInstance } from '../../types/logger'
22
22
  import { Socket } from 'net'
23
23
 
24
24
  // FastifyInstance
25
25
  // http server
26
- expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
27
- expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({}))
28
- expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ http: {} }))
26
+ expectError<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & Promise<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
27
+ expectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
28
+ expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
29
+ expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({}))
30
+ expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ http: {} }))
29
31
  // https server
30
- expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: {} }))
31
- expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: null }))
32
+ expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: {} }))
33
+ expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: null }))
32
34
  // http2 server
33
- expectType<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse> & PromiseLike<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, http2SessionTimeout: 1000 }))
34
- expectType<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse> & PromiseLike<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, https: {}, http2SessionTimeout: 1000 }))
35
+ expectType<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse> & SafePromiseLike<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, http2SessionTimeout: 1000 }))
36
+ expectType<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse> & SafePromiseLike<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, https: {}, http2SessionTimeout: 1000 }))
35
37
  expectType<LightMyRequestChain>(fastify({ http2: true, https: {} }).inject())
36
- expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ schemaController: {} }))
37
- expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(
38
+ expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ schemaController: {} }))
39
+ expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(
38
40
  fastify({
39
41
  schemaController: {
40
42
  compilersFactory: {}
@@ -92,7 +94,7 @@ expectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerR
92
94
  method: 'GET',
93
95
  url: '/',
94
96
  version: '1.0.0',
95
- hostname: 'localhost',
97
+ host: 'localhost',
96
98
  remoteAddress: '127.0.0.1',
97
99
  remotePort: 3000
98
100
  }
@@ -14,6 +14,7 @@ import fastify, {
14
14
  RegisterOptions,
15
15
  RouteOptions,
16
16
  // preClose hook types should be exported correctly https://github.com/fastify/fastify/pull/5335
17
+ /* eslint-disable @typescript-eslint/no-unused-vars */
17
18
  preCloseAsyncHookHandler,
18
19
  preCloseHookHandler
19
20
  } from '../../fastify'
@@ -1 +1,2 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
1
2
  import { FastifyListenOptions, FastifyLogFn } from '../../fastify'
@@ -1,4 +1,4 @@
1
- import { expectAssignable, expectDeprecated, expectError, expectNotDeprecated, expectType } from 'tsd'
1
+ import { expectAssignable, expectError, expectNotDeprecated, expectType } from 'tsd'
2
2
  import fastify, {
3
3
  FastifyBaseLogger,
4
4
  FastifyBodyParser,
@@ -12,7 +12,6 @@ import fastify, {
12
12
  import { HookHandlerDoneFunction } from '../../types/hooks'
13
13
  import { FastifyReply } from '../../types/reply'
14
14
  import { FastifyRequest } from '../../types/request'
15
- import { DefaultRoute } from '../../types/route'
16
15
  import { FastifySchemaControllerOptions, FastifySchemaCompiler, FastifySerializerCompiler } from '../../types/schema'
17
16
  import { AddressInfo } from 'net'
18
17
  import { Bindings, ChildLoggerOptions } from '../../types/logger'
@@ -194,48 +193,6 @@ function invalidSchemaErrorFormatter (err: Error) {
194
193
  }
195
194
  expectError(server.setSchemaErrorFormatter(invalidSchemaErrorFormatter))
196
195
 
197
- // test listen method callback
198
- expectAssignable<void>(server.listen(3000, '', 0, (err, address) => {
199
- expectType<Error | null>(err)
200
- }))
201
- expectAssignable<void>(server.listen('3000', '', 0, (err, address) => {
202
- expectType<Error | null>(err)
203
- }))
204
- expectAssignable<void>(server.listen(3000, '', (err, address) => {
205
- expectType<Error | null>(err)
206
- }))
207
- expectAssignable<void>(server.listen('3000', '', (err, address) => {
208
- expectType<Error | null>(err)
209
- }))
210
- expectAssignable<void>(server.listen(3000, (err, address) => {
211
- expectType<Error | null>(err)
212
- }))
213
- expectAssignable<void>(server.listen('3000', (err, address) => {
214
- expectType<Error | null>(err)
215
- }))
216
-
217
- // test listen method callback types
218
- expectAssignable<void>(server.listen('3000', (err, address) => {
219
- expectAssignable<Error|null>(err)
220
- expectAssignable<string>(address)
221
- }))
222
-
223
- // test listen method promise
224
- expectAssignable<PromiseLike<string>>(server.listen(3000))
225
- expectAssignable<PromiseLike<string>>(server.listen('3000'))
226
- expectAssignable<PromiseLike<string>>(server.listen(3000, '', 0))
227
- expectAssignable<PromiseLike<string>>(server.listen('3000', '', 0))
228
- expectAssignable<PromiseLike<string>>(server.listen(3000, ''))
229
- expectAssignable<PromiseLike<string>>(server.listen('3000', ''))
230
-
231
- // Test variadic listen signatures Typescript deprecation
232
- expectDeprecated(server.listen(3000))
233
- expectDeprecated(server.listen('3000'))
234
- expectDeprecated(server.listen(3000, '', 0))
235
- expectDeprecated(server.listen('3000', '', 0))
236
- expectDeprecated(server.listen(3000, ''))
237
- expectDeprecated(server.listen('3000', ''))
238
-
239
196
  // test listen opts objects
240
197
  expectAssignable<PromiseLike<string>>(server.listen())
241
198
  expectAssignable<PromiseLike<string>>(server.listen({ port: 3000 }))
@@ -279,6 +236,12 @@ expectAssignable<FastifyInstance>(server.ready())
279
236
  expectAssignable<FastifyInstance>(server.ready((err) => {
280
237
  expectType<Error | null>(err)
281
238
  }))
239
+ expectAssignable<FastifyInstance>(server.ready(async (err) => {
240
+ expectType<Error | null>(err)
241
+ }))
242
+ expectAssignable<Parameters<typeof server.ready>[0]>(async (err) => {
243
+ expectType<Error | null>(err)
244
+ })
282
245
 
283
246
  expectAssignable<void>(server.routing({} as RawRequestDefaultExpression, {} as RawReplyDefaultExpression))
284
247
 
@@ -453,7 +416,7 @@ server.decorate('typedTestProperty', {
453
416
  })
454
417
  server.decorate('typedTestProperty')
455
418
  server.decorate('typedTestProperty', null, ['foo'])
456
- server.decorate('typedTestProperty', null)
419
+ expectError(server.decorate('typedTestProperty', null))
457
420
  expectError(server.decorate('typedTestProperty', 'foo'))
458
421
  expectError(server.decorate('typedTestProperty', {
459
422
  getter () {
@@ -493,7 +456,7 @@ server.decorateRequest('typedTestRequestProperty', {
493
456
  })
494
457
  server.decorateRequest('typedTestRequestProperty')
495
458
  server.decorateRequest('typedTestRequestProperty', null, ['foo'])
496
- server.decorateRequest('typedTestRequestProperty', null)
459
+ expectError(server.decorateRequest('typedTestRequestProperty', null))
497
460
  expectError(server.decorateRequest('typedTestRequestProperty', 'foo'))
498
461
  expectError(server.decorateRequest('typedTestRequestProperty', {
499
462
  getter () {
@@ -533,7 +496,7 @@ server.decorateReply('typedTestReplyProperty', {
533
496
  })
534
497
  server.decorateReply('typedTestReplyProperty')
535
498
  server.decorateReply('typedTestReplyProperty', null, ['foo'])
536
- server.decorateReply('typedTestReplyProperty', null)
499
+ expectError(server.decorateReply('typedTestReplyProperty', null))
537
500
  expectError(server.decorateReply('typedTestReplyProperty', 'foo'))
538
501
  expectError(server.decorateReply('typedTestReplyProperty', {
539
502
  getter () {
@@ -570,9 +533,5 @@ const versionConstraintStrategy = {
570
533
  expectType<void>(server.addConstraintStrategy(versionConstraintStrategy))
571
534
  expectType<boolean>(server.hasConstraintStrategy(versionConstraintStrategy.name))
572
535
 
573
- expectType<boolean>(server.hasPlugin(''))
574
-
575
- expectAssignable<DefaultRoute<RawRequestDefaultExpression, RawReplyDefaultExpression>>(server.getDefaultRoute())
576
-
577
536
  expectType<FastifySchemaCompiler<any> | undefined>(server.validatorCompiler)
578
537
  expectType<FastifySerializerCompiler<any> | undefined>(server.serializerCompiler)
@@ -5,8 +5,7 @@ import fastify, {
5
5
  FastifyLoggerInstance,
6
6
  FastifyRequest,
7
7
  FastifyReply,
8
- FastifyBaseLogger,
9
- FastifyInstance
8
+ FastifyBaseLogger
10
9
  } from '../../fastify'
11
10
  import { Server, IncomingMessage, ServerResponse } from 'http'
12
11
  import * as fs from 'fs'
@@ -121,14 +120,52 @@ const serverAutoInferringTypes = fastify({
121
120
 
122
121
  expectType<FastifyBaseLogger>(serverAutoInferringTypes.log)
123
122
 
124
- const serverWithAutoInferredPino = fastify({
125
- logger: P({
123
+ const serverWithLoggerInstance = fastify({
124
+ loggerInstance: P({
126
125
  level: 'info',
127
126
  redact: ['x-userinfo']
128
127
  })
129
128
  })
130
129
 
131
- expectType<P.Logger>(serverWithAutoInferredPino.log)
130
+ expectType<P.Logger>(serverWithLoggerInstance.log)
131
+
132
+ const serverWithPinoConfig = fastify({
133
+ logger: {
134
+ level: 'info',
135
+ serializers: {
136
+ req (IncomingMessage) {
137
+ expectType<FastifyRequest>(IncomingMessage)
138
+ return {
139
+ method: 'method',
140
+ url: 'url',
141
+ version: 'version',
142
+ host: 'hostname',
143
+ remoteAddress: 'remoteAddress',
144
+ remotePort: 80,
145
+ other: ''
146
+ }
147
+ },
148
+ res (ServerResponse) {
149
+ expectType<ResSerializerReply<Server, FastifyReply>>(ServerResponse)
150
+ expectAssignable<Partial<FastifyReply> & Pick<FastifyReply, 'statusCode'>>(ServerResponse)
151
+ expectNotAssignable<FastifyReply>(ServerResponse)
152
+ return {
153
+ statusCode: 'statusCode'
154
+ }
155
+ },
156
+ err (FastifyError) {
157
+ return {
158
+ other: '',
159
+ type: 'type',
160
+ message: 'msg',
161
+ stack: 'stack'
162
+ }
163
+ }
164
+ }
165
+ }
166
+ })
167
+
168
+ expectType<FastifyBaseLogger>(serverWithPinoConfig.log)
132
169
 
133
170
  const serverAutoInferredFileOption = fastify({
134
171
  logger: {
@@ -165,7 +202,7 @@ const serverAutoInferredSerializerObjectOption = fastify({
165
202
  method: 'method',
166
203
  url: 'url',
167
204
  version: 'version',
168
- hostname: 'hostname',
205
+ host: 'hostname',
169
206
  remoteAddress: 'remoteAddress',
170
207
  remotePort: 80,
171
208
  other: ''
@@ -1,4 +1,4 @@
1
- import fastify, { FastifyInstance, FastifyPluginOptions } from '../../fastify'
1
+ import fastify, { FastifyInstance, FastifyPluginOptions, SafePromiseLike } from '../../fastify'
2
2
  import * as http from 'http'
3
3
  import * as https from 'https'
4
4
  import { expectType, expectError, expectAssignable } from 'tsd'
@@ -42,7 +42,9 @@ expectAssignable<FastifyInstance>(fastify().register(async function (instance, o
42
42
  expectError(fastify().register(function (instance, opts, done) { }, { logLevel: '' })) // must use a valid logLevel
43
43
 
44
44
  const httpsServer = fastify({ https: {} })
45
- expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
45
+ expectError<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & Promise<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
46
+ expectAssignable<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
47
+ expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
46
48
 
47
49
  // Chainable
48
50
  httpsServer
@@ -61,6 +63,7 @@ expectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWith
61
63
  expectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithType, { prefix: '/test' }))
62
64
  expectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithTypeAsync, { prefix: '/test' }))
63
65
 
66
+ /* eslint-disable @typescript-eslint/no-unused-vars */
64
67
  async function testAsync (): Promise<void> {
65
68
  await httpsServer
66
69
  .register(testPluginOpts)
@@ -72,7 +72,7 @@ expectAssignable<ServerWithHttp2>(serverWithHttp2.register(async (instance: Serv
72
72
  }))
73
73
 
74
74
  // With Type Provider
75
- type TestTypeProvider = { input: 'test', output: 'test' }
75
+ type TestTypeProvider = { schema: 'test', validator: 'test', serializer: 'test' }
76
76
  const serverWithTypeProvider = fastify().withTypeProvider<TestTypeProvider>()
77
77
  type ServerWithTypeProvider = FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance, TestTypeProvider>
78
78
  const testPluginWithTypeProvider: FastifyPluginCallback<TestOptions, RawServerDefault, TestTypeProvider> = function (instance, opts, done) { }
@@ -115,7 +115,7 @@ const customLogger = {
115
115
  silent: () => { }
116
116
  }
117
117
  const serverWithTypeProviderAndLogger = fastify({
118
- logger: customLogger
118
+ loggerInstance: customLogger
119
119
  }).withTypeProvider<TestTypeProvider>()
120
120
  type ServerWithTypeProviderAndLogger = FastifyInstance<Server, IncomingMessage, ServerResponse, typeof customLogger, TestTypeProvider>
121
121
  const testPluginWithTypeProviderAndLogger: FastifyPluginCallback<TestOptions, RawServerDefault, TestTypeProvider, typeof customLogger> = function (instance, opts, done) { }
@@ -1,6 +1,6 @@
1
1
  import { Buffer } from 'buffer'
2
- import { expectAssignable, expectDeprecated, expectError, expectType } from 'tsd'
3
- import fastify, { FastifyReplyContext, FastifyReply, FastifyRequest, FastifySchema, FastifySchemaCompiler, FastifyTypeProviderDefault, RawRequestDefaultExpression, RouteHandler, RouteHandlerMethod } from '../../fastify'
2
+ import { expectAssignable, expectError, expectType } from 'tsd'
3
+ import fastify, { FastifyReplyContext, FastifyReply, FastifyRequest, FastifySchema, FastifyTypeProviderDefault, RawRequestDefaultExpression, RouteHandler, RouteHandlerMethod } from '../../fastify'
4
4
  import { FastifyInstance } from '../../types/instance'
5
5
  import { FastifyLoggerInstance } from '../../types/logger'
6
6
  import { ResolveReplyTypeWithRouteGeneric } from '../../types/reply'
@@ -22,18 +22,17 @@ const getHandler: RouteHandlerMethod = function (_request, reply) {
22
22
  expectType<number>(reply.elapsedTime)
23
23
  expectType<number>(reply.statusCode)
24
24
  expectType<boolean>(reply.sent)
25
+ expectType<(hints: Record<string, string | string[]>, callback?: (() => void) | undefined) => void>(reply.writeEarlyHints)
25
26
  expectType<((payload?: unknown) => FastifyReply)>(reply.send)
26
27
  expectAssignable<(key: string, value: any) => FastifyReply>(reply.header)
27
- expectAssignable<(values: {[key: string]: any}) => FastifyReply>(reply.headers)
28
+ expectAssignable<(values: { [key: string]: any }) => FastifyReply>(reply.headers)
28
29
  expectAssignable<(key: string) => number | string | string[] | undefined>(reply.getHeader)
29
30
  expectAssignable<() => { [key: string]: number | string | string[] | undefined }>(reply.getHeaders)
30
31
  expectAssignable<(key: string) => FastifyReply>(reply.removeHeader)
31
32
  expectAssignable<(key: string) => boolean>(reply.hasHeader)
32
- expectType<{(statusCode: number, url: string): FastifyReply; (url: string): FastifyReply }>(reply.redirect)
33
+ expectType<{ (statusCode: number, url: string): FastifyReply;(url: string, statusCode?: number): FastifyReply; }>(reply.redirect)
33
34
  expectType<() => FastifyReply>(reply.hijack)
34
35
  expectType<() => void>(reply.callNotFound)
35
- // Test reply.getResponseTime() deprecation
36
- expectDeprecated(reply.getResponseTime)
37
36
  expectType<(contentType: string) => FastifyReply>(reply.type)
38
37
  expectType<(fn: (payload: any) => string) => FastifyReply>(reply.serializer)
39
38
  expectType<(payload: any) => string | ArrayBuffer | Buffer>(reply.serialize)
@@ -43,10 +42,10 @@ const getHandler: RouteHandlerMethod = function (_request, reply) {
43
42
  expectType<(key: string) => FastifyReply>(reply.removeTrailer)
44
43
  expectType<FastifyInstance>(reply.server)
45
44
  expectAssignable<((httpStatus: string) => DefaultSerializationFunction | undefined)>(reply.getSerializationFunction)
46
- expectAssignable<((schema: {[key: string]: unknown}) => DefaultSerializationFunction | undefined)>(reply.getSerializationFunction)
47
- expectAssignable<((schema: {[key: string]: unknown}, httpStatus?: string) => DefaultSerializationFunction)>(reply.compileSerializationSchema)
48
- expectAssignable<((input: {[key: string]: unknown}, schema: {[key: string]: unknown}, httpStatus?: string) => unknown)>(reply.serializeInput)
49
- expectAssignable<((input: {[key: string]: unknown}, httpStatus: string) => unknown)>(reply.serializeInput)
45
+ expectAssignable<((schema: { [key: string]: unknown }) => DefaultSerializationFunction | undefined)>(reply.getSerializationFunction)
46
+ expectAssignable<((schema: { [key: string]: unknown }, httpStatus?: string) => DefaultSerializationFunction)>(reply.compileSerializationSchema)
47
+ expectAssignable<((input: { [key: string]: unknown }, schema: { [key: string]: unknown }, httpStatus?: string) => unknown)>(reply.serializeInput)
48
+ expectAssignable<((input: { [key: string]: unknown }, httpStatus: string) => unknown)>(reply.serializeInput)
50
49
  }
51
50
 
52
51
  interface ReplyPayload {
@@ -165,10 +164,12 @@ server.get<InvalidReplyHttpCodes>('get-invalid-http-codes-reply-error', async fu
165
164
  })
166
165
  })
167
166
 
167
+ /* eslint-disable @typescript-eslint/no-unused-vars */
168
168
  const httpHeaderHandler: RouteHandlerMethod = function (_request, reply) {
169
169
  // accept is a header provided by @types/node
170
170
  reply.getHeader('accept')
171
- reply.getHeaders().accept // eslint-disable-line no-unused-expressions
171
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
172
+ reply.getHeaders().accept
172
173
  reply.hasHeader('accept')
173
174
  reply.header('accept', 'test')
174
175
  reply.headers({ accept: 'test' })
@@ -177,7 +178,7 @@ const httpHeaderHandler: RouteHandlerMethod = function (_request, reply) {
177
178
  // x-fastify-test is not a header provided by @types/node
178
179
  // and should not result in a typing error
179
180
  reply.getHeader('x-fastify-test')
180
- reply.getHeaders()['x-fastify-test'] // eslint-disable-line no-unused-expressions
181
+ reply.getHeaders()['x-fastify-test']
181
182
  reply.hasHeader('x-fastify-test')
182
183
  reply.header('x-fastify-test', 'test')
183
184
  reply.headers({ 'x-fastify-test': 'test' })
@@ -1,4 +1,4 @@
1
- import { expectAssignable, expectType } from 'tsd'
1
+ import { expectAssignable, expectError, expectType } from 'tsd'
2
2
  import fastify, {
3
3
  ContextConfigDefault,
4
4
  FastifyRequestContext,
@@ -12,7 +12,8 @@ import fastify, {
12
12
  RequestBodyDefault,
13
13
  RequestGenericInterface,
14
14
  RouteHandler,
15
- RouteHandlerMethod
15
+ RouteHandlerMethod,
16
+ SafePromiseLike
16
17
  } from '../../fastify'
17
18
  import { FastifyInstance } from '../../types/instance'
18
19
  import { FastifyLoggerInstance } from '../../types/logger'
@@ -54,7 +55,7 @@ type CustomRequest = FastifyRequest<{
54
55
  }>
55
56
 
56
57
  type HTTPRequestPart = 'body' | 'query' | 'querystring' | 'params' | 'headers'
57
- type ExpectedGetValidationFunction = (input: {[key: string]: unknown}) => boolean
58
+ type ExpectedGetValidationFunction = (input: { [key: string]: unknown }) => boolean
58
59
 
59
60
  interface CustomLoggerInterface extends FastifyLoggerInstance {
60
61
  foo: FastifyLogFn; // custom severity logger method
@@ -69,6 +70,8 @@ const getHandler: RouteHandler = function (request, _reply) {
69
70
  expectType<Readonly<RequestRouteOptions>>(request.routeOptions)
70
71
  expectType<boolean>(request.is404)
71
72
  expectType<string>(request.hostname)
73
+ expectType<string>(request.host)
74
+ expectType<number>(request.port)
72
75
  expectType<string>(request.ip)
73
76
  expectType<string[] | undefined>(request.ips)
74
77
  expectType<RawRequestDefaultExpression>(request.raw)
@@ -94,9 +97,9 @@ const getHandler: RouteHandler = function (request, _reply) {
94
97
  expectType<Error & { validation: any; validationContext: string } | undefined>(request.validationError)
95
98
  expectType<FastifyInstance>(request.server)
96
99
  expectAssignable<(httpPart: HTTPRequestPart) => ExpectedGetValidationFunction>(request.getValidationFunction)
97
- expectAssignable<(schema: {[key: string]: unknown}) => ExpectedGetValidationFunction>(request.getValidationFunction)
98
- expectAssignable<(input: {[key: string]: unknown}, schema: {[key: string]: unknown}, httpPart?: HTTPRequestPart) => boolean>(request.validateInput)
99
- expectAssignable<(input: {[key: string]: unknown}, httpPart?: HTTPRequestPart) => boolean>(request.validateInput)
100
+ expectAssignable<(schema: { [key: string]: unknown }) => ExpectedGetValidationFunction>(request.getValidationFunction)
101
+ expectAssignable<(input: { [key: string]: unknown }, schema: { [key: string]: unknown }, httpPart?: HTTPRequestPart) => boolean>(request.validateInput)
102
+ expectAssignable<(input: { [key: string]: unknown }, httpPart?: HTTPRequestPart) => boolean>(request.validateInput)
100
103
  }
101
104
 
102
105
  const getHandlerWithCustomLogger: RouteHandlerMethod<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault, CustomLoggerInterface> = function (request, _reply) {
@@ -153,10 +156,18 @@ const customLogger: CustomLoggerInterface = {
153
156
  child: () => customLogger
154
157
  }
155
158
 
156
- const serverWithCustomLogger = fastify({ logger: customLogger })
157
- expectType<
159
+ const serverWithCustomLogger = fastify({ loggerInstance: customLogger })
160
+ expectError<
161
+ FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>
162
+ & Promise<FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>>
163
+ >(serverWithCustomLogger)
164
+ expectAssignable<
158
165
  FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>
159
166
  & PromiseLike<FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>>
160
167
  >(serverWithCustomLogger)
168
+ expectType<
169
+ FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>
170
+ & SafePromiseLike<FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>>
171
+ >(serverWithCustomLogger)
161
172
 
162
173
  serverWithCustomLogger.get('/get', getHandlerWithCustomLogger)
@@ -19,6 +19,14 @@ declare module '../../fastify' {
19
19
  interface FastifyContextConfig {
20
20
  foo: string;
21
21
  bar: number;
22
+ includeMessage?: boolean;
23
+ }
24
+
25
+ /* eslint-disable @typescript-eslint/no-unused-vars */
26
+ interface FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger, RequestType> {
27
+ message: ContextConfig extends { includeMessage: true }
28
+ ? string
29
+ : null;
22
30
  }
23
31
  }
24
32
 
@@ -36,9 +44,29 @@ const routeHandlerWithReturnValue: RouteHandlerMethod = function (request, reply
36
44
  return reply.send()
37
45
  }
38
46
 
39
- type LowerCaseHTTPMethods = 'get' | 'post' | 'put' | 'patch' | 'head' | 'delete' | 'options';
47
+ fastify().get(
48
+ '/',
49
+ { config: { foo: 'bar', bar: 100, includeMessage: true } },
50
+ (req) => {
51
+ expectType<string>(req.message)
52
+ }
53
+ )
54
+
55
+ fastify().get(
56
+ '/',
57
+ { config: { foo: 'bar', bar: 100, includeMessage: false } },
58
+ (req) => {
59
+ expectType<null>(req.message)
60
+ }
61
+ )
62
+
63
+ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put' |
64
+ 'options' | 'propfind' | 'proppatch' | 'mkcol' | 'copy' | 'move' | 'lock' |
65
+ 'unlock' | 'trace' | 'search' | 'mkcalendar' | 'report'
40
66
 
41
- ['GET', 'POST', 'PUT', 'PATCH', 'HEAD', 'DELETE', 'OPTIONS'].forEach(method => {
67
+ ;['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT', 'OPTIONS', 'PROPFIND',
68
+ 'PROPPATCH', 'MKCOL', 'COPY', 'MOVE', 'LOCK', 'UNLOCK', 'TRACE', 'SEARCH', 'MKCALENDAR', 'REPORT'
69
+ ].forEach(method => {
42
70
  // route method
43
71
  expectType<FastifyInstance>(fastify().route({
44
72
  method: method as HTTPMethods,
@@ -70,7 +70,7 @@ expectAssignable<FastifyInstance>(server.setSerializerCompiler<FastifySchema & {
70
70
  storeFunction (routeOpts, schemaValidationCode) { }
71
71
  })
72
72
 
73
- const app = fastify({
73
+ fastify({
74
74
  jsonShorthand: false,
75
75
  schemaController: {
76
76
  compilersFactory: {
@@ -86,7 +86,7 @@ expectAssignable<FastifyInstance>(server.setSerializerCompiler<FastifySchema & {
86
86
  storeFunction (routeOpts, schemaValidationCode) { }
87
87
  })
88
88
 
89
- const app = fastify({
89
+ fastify({
90
90
  jsonShorthand: false,
91
91
  schemaController: {
92
92
  compilersFactory: {
@@ -3,7 +3,7 @@ import * as http from 'http'
3
3
  import { expectType } from 'tsd'
4
4
 
5
5
  // Custom Server
6
- type CustomType = void;
6
+ type CustomType = void
7
7
  interface CustomIncomingMessage extends http.IncomingMessage {
8
8
  fakeMethod?: () => CustomType;
9
9
  }