fastify 4.28.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/{86b9786f-4a98-43b8-882a-5f936b876f08.json → 09002e93-10ad-430c-bc86-c0576928b0ed.json} +60 -60
  3. package/.tap/processinfo/{70168912-9bb2-4334-bb89-041f1764cddf.json → ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json} +71 -71
  4. package/.tap/test-results/test/build/error-serializer.test.js.tap +6 -2
  5. package/.tap/test-results/test/build/version.test.js.tap +1 -1
  6. package/.taprc +4 -8
  7. package/README.md +3 -6
  8. package/build/build-error-serializer.js +4 -1
  9. package/build/build-validation.js +5 -4
  10. package/docs/Guides/Database.md +1 -1
  11. package/docs/Guides/Delay-Accepting-Requests.md +3 -3
  12. package/docs/Guides/Ecosystem.md +2 -0
  13. package/docs/Guides/Migration-Guide-V5.md +20 -0
  14. package/docs/Guides/Write-Type-Provider.md +4 -2
  15. package/docs/Reference/ContentTypeParser.md +30 -1
  16. package/docs/Reference/Decorators.md +42 -16
  17. package/docs/Reference/Errors.md +10 -2
  18. package/docs/Reference/Hooks.md +48 -14
  19. package/docs/Reference/Logging.md +5 -5
  20. package/docs/Reference/Reply.md +23 -18
  21. package/docs/Reference/Request.md +5 -1
  22. package/docs/Reference/Routes.md +24 -28
  23. package/docs/Reference/Server.md +14 -53
  24. package/docs/Reference/Type-Providers.md +21 -26
  25. package/docs/Reference/TypeScript.md +46 -29
  26. package/docs/Reference/Warnings.md +0 -8
  27. package/eslint.config.js +27 -0
  28. package/examples/typescript-server.ts +14 -14
  29. package/fastify.d.ts +15 -14
  30. package/fastify.js +41 -15
  31. package/lib/configValidator.js +94 -76
  32. package/lib/contentTypeParser.js +54 -88
  33. package/lib/decorate.js +3 -7
  34. package/lib/error-serializer.js +2 -1
  35. package/lib/errors.js +31 -6
  36. package/lib/handleRequest.js +70 -39
  37. package/lib/httpMethods.js +34 -18
  38. package/lib/logger.js +24 -6
  39. package/lib/pluginUtils.js +5 -5
  40. package/lib/reply.js +7 -10
  41. package/lib/request.js +37 -19
  42. package/lib/route.js +6 -34
  43. package/lib/server.js +62 -123
  44. package/lib/warnings.js +24 -29
  45. package/lib/wrapThenable.js +46 -22
  46. package/package.json +38 -58
  47. package/test/404s.test.js +8 -12
  48. package/test/async-await.test.js +46 -2
  49. package/test/build/error-serializer.test.js +4 -2
  50. package/test/check.test.js +225 -0
  51. package/test/close-pipelining.test.js +2 -41
  52. package/test/close.test.js +1 -41
  53. package/test/content-parser.test.js +69 -117
  54. package/test/custom-parser.1.test.js +40 -1
  55. package/test/decorator-namespace.test._js_ +31 -0
  56. package/test/decorator.test.js +92 -43
  57. package/test/delete.test.js +21 -1
  58. package/test/diagnostics-channel/404.test.js +57 -0
  59. package/test/diagnostics-channel/async-delay-request.test.js +74 -0
  60. package/test/diagnostics-channel/async-request.test.js +72 -0
  61. package/test/diagnostics-channel/error-before-handler.test.js +36 -0
  62. package/test/diagnostics-channel/error-request.test.js +61 -0
  63. package/test/diagnostics-channel/error-status.test.js +39 -0
  64. package/test/{diagnostics-channel.test.js → diagnostics-channel/init.test.js} +6 -16
  65. package/test/diagnostics-channel/sync-delay-request.test.js +58 -0
  66. package/test/diagnostics-channel/sync-request-reply.test.js +58 -0
  67. package/test/diagnostics-channel/sync-request.test.js +61 -0
  68. package/test/encapsulated-error-handler.test.js +201 -14
  69. package/test/esm/index.test.js +2 -12
  70. package/test/findRoute.test.js +16 -0
  71. package/test/genReqId.test.js +9 -0
  72. package/test/get.test.js +28 -0
  73. package/test/has-route.test.js +1 -1
  74. package/test/helper.js +1 -5
  75. package/test/hooks.test.js +0 -4
  76. package/test/http2/constraint.test.js +22 -1
  77. package/test/http2/plain.test.js +21 -6
  78. package/test/http2/secure.test.js +12 -1
  79. package/test/https/https.test.js +57 -0
  80. package/test/inject.test.js +1 -2
  81. package/test/internals/decorator.test.js +0 -2
  82. package/test/internals/errors.test.js +57 -17
  83. package/test/internals/handleRequest.test.js +5 -1
  84. package/test/internals/initialConfig.test.js +5 -5
  85. package/test/internals/logger.test.js +31 -2
  86. package/test/internals/reply.test.js +6 -78
  87. package/test/internals/request.test.js +13 -11
  88. package/test/listen.1.test.js +5 -15
  89. package/test/listen.5.test.js +88 -0
  90. package/test/logger/instantiation.test.js +8 -8
  91. package/test/logger/logging.test.js +4 -4
  92. package/test/logger/options.test.js +102 -21
  93. package/test/logger/response.test.js +6 -6
  94. package/test/maxRequestsPerSocket.test.js +2 -5
  95. package/test/method-missing.test.js +24 -0
  96. package/test/plugin.1.test.js +2 -4
  97. package/test/plugin.2.test.js +0 -2
  98. package/test/plugin.3.test.js +0 -2
  99. package/test/plugin.4.test.js +92 -56
  100. package/test/register.test.js +2 -4
  101. package/test/reply-earlyHints.test.js +98 -0
  102. package/test/reply-error.test.js +0 -2
  103. package/test/route-hooks.test.js +0 -1
  104. package/test/route-shorthand.test.js +60 -0
  105. package/test/schema-special-usage.test.js +1 -1
  106. package/test/server.test.js +17 -2
  107. package/test/stream.2.test.js +1 -1
  108. package/test/stream.4.test.js +0 -42
  109. package/test/stream.5.test.js +2 -2
  110. package/test/trust-proxy.test.js +33 -27
  111. package/test/types/errors.test-d.ts +0 -2
  112. package/test/types/fastify.test-d.ts +14 -12
  113. package/test/types/hooks.test-d.ts +1 -0
  114. package/test/types/import.ts +1 -0
  115. package/test/types/instance.test-d.ts +10 -51
  116. package/test/types/logger.test-d.ts +43 -6
  117. package/test/types/plugin.test-d.ts +5 -2
  118. package/test/types/register.test-d.ts +2 -2
  119. package/test/types/reply.test-d.ts +13 -12
  120. package/test/types/request.test-d.ts +19 -8
  121. package/test/types/route.test-d.ts +30 -2
  122. package/test/types/schema.test-d.ts +2 -2
  123. package/test/types/serverFactory.test-d.ts +1 -1
  124. package/test/types/type-provider.test-d.ts +59 -12
  125. package/test/types/using.test-d.ts +4 -1
  126. package/test/url-rewriting.test.js +3 -2
  127. package/test/useSemicolonDelimiter.test.js +3 -6
  128. package/test/versioned-routes.test.js +1 -1
  129. package/test/web-api.test.js +0 -6
  130. package/types/content-type-parser.d.ts +3 -3
  131. package/types/context.d.ts +0 -1
  132. package/types/errors.d.ts +1 -0
  133. package/types/hooks.d.ts +6 -6
  134. package/types/instance.d.ts +28 -41
  135. package/types/logger.d.ts +3 -3
  136. package/types/plugin.d.ts +3 -3
  137. package/types/reply.d.ts +9 -12
  138. package/types/request.d.ts +5 -3
  139. package/types/route.d.ts +31 -31
  140. package/types/schema.d.ts +3 -3
  141. package/types/serverFactory.d.ts +2 -2
  142. package/types/type-provider.d.ts +22 -12
  143. package/types/utils.d.ts +18 -23
  144. package/.c8rc.json +0 -8
  145. package/.eslintrc +0 -4
  146. package/.tap/processinfo/029eb7a1-1942-40bc-98e2-cef3b7a14b5e.json +0 -268
  147. package/.tap/processinfo/03c196c6-01c3-4268-a9b5-298dff18a873.json +0 -269
  148. package/.tap/processinfo/04bbabba-8611-4908-9092-dfa9fcc13327.json +0 -268
  149. package/.tap/processinfo/05d8a743-3edf-4e2d-ae5a-dc99d0855ba5.json +0 -272
  150. package/.tap/processinfo/07718963-36a8-4d87-82ad-366c877a5247.json +0 -268
  151. package/.tap/processinfo/08fe3bde-5814-4308-9158-cdf1e47391b7.json +0 -268
  152. package/.tap/processinfo/0a3e3fb0-eabf-4532-ae80-20434da22678.json +0 -268
  153. package/.tap/processinfo/0caf2a75-4b3a-46c4-9b41-c7e450e5e15f.json +0 -268
  154. package/.tap/processinfo/0cf35d52-e5b2-4884-bcf0-b0ab3017b689.json +0 -268
  155. package/.tap/processinfo/0e666134-5013-4ecd-9ee6-59b22716c39c.json +0 -268
  156. package/.tap/processinfo/1087b811-4ec4-4f91-92b4-a78a51a437de.json +0 -268
  157. package/.tap/processinfo/13709ed3-b68c-42cf-8472-b0c4b8a89d2b.json +0 -268
  158. package/.tap/processinfo/13ac2f18-d0e0-439f-bc86-2ff0119af857.json +0 -268
  159. package/.tap/processinfo/13e47e0e-f6e8-4381-8a42-923b661f4a4f.json +0 -268
  160. package/.tap/processinfo/143f7d43-b8e8-4666-b482-f28fb37160ee.json +0 -268
  161. package/.tap/processinfo/14f3801d-03ab-4db3-9df5-c5d47e0a8cf0.json +0 -270
  162. package/.tap/processinfo/15a07dad-4bcd-442c-95e0-30c31f2b9818.json +0 -273
  163. package/.tap/processinfo/191ad3ad-04d8-4fb9-b119-ad2811f9b925.json +0 -243
  164. package/.tap/processinfo/1b25d54b-62d3-44cd-b581-31e705522fae.json +0 -268
  165. package/.tap/processinfo/1b7cb260-f04b-4135-a4fe-093081c4706f.json +0 -268
  166. package/.tap/processinfo/1e395d63-4815-4c77-aa47-df3709cc0ef9.json +0 -268
  167. package/.tap/processinfo/1e7f6a54-3abf-4771-863a-585cba110aec.json +0 -268
  168. package/.tap/processinfo/21a15e1d-0b41-47d8-b03d-0ba130969034.json +0 -244
  169. package/.tap/processinfo/21e02016-9ecd-4983-8417-9c74d224644f.json +0 -269
  170. package/.tap/processinfo/2327d941-d0d5-4762-b386-02a9a27ad28e.json +0 -268
  171. package/.tap/processinfo/23d39204-eac9-4f57-8db4-ffa996227fbd.json +0 -268
  172. package/.tap/processinfo/2493875a-0ac6-4d53-993c-f44471fd0678.json +0 -268
  173. package/.tap/processinfo/2698669f-f1e7-4a12-a687-8d58177be2b0.json +0 -269
  174. package/.tap/processinfo/2862b053-0a3d-46d7-9381-ffcb06287609.json +0 -268
  175. package/.tap/processinfo/2ac1b8d6-ac92-40e2-a59a-7681069f487c.json +0 -268
  176. package/.tap/processinfo/2c75e5f7-c4ef-47e4-a1c4-105eef6c0fab.json +0 -242
  177. package/.tap/processinfo/2e2c45cd-718b-4e5a-bf88-f801630f2803.json +0 -268
  178. package/.tap/processinfo/2f9ca478-3e03-4cce-a0bc-fcdc86d7c316.json +0 -268
  179. package/.tap/processinfo/30e3117f-fb74-456f-8f02-527e9eb9fcc3.json +0 -268
  180. package/.tap/processinfo/332be679-63c7-4b49-8b87-ef55995ada2d.json +0 -268
  181. package/.tap/processinfo/37c36f95-07f9-4ef0-8ab4-9e107d51b605.json +0 -269
  182. package/.tap/processinfo/3874eae2-f3db-44ef-9a9f-c8169d4b2b76.json +0 -268
  183. package/.tap/processinfo/38a7c3da-a411-41d0-8993-9deefd23500d.json +0 -268
  184. package/.tap/processinfo/3a7b6dbd-e153-4ce5-b557-21fb82009983.json +0 -269
  185. package/.tap/processinfo/3c6731ec-936d-470f-b7b0-0c87b54be051.json +0 -268
  186. package/.tap/processinfo/3c850ea9-4ef0-4044-a3fd-fbadfa9d543e.json +0 -268
  187. package/.tap/processinfo/3e4e15e0-a325-46f0-be57-5fd374560b7a.json +0 -269
  188. package/.tap/processinfo/3ed868e0-887c-402a-9f22-b1fdb74b4da0.json +0 -268
  189. package/.tap/processinfo/405498d7-5854-4ce1-a7dc-06920932f26d.json +0 -268
  190. package/.tap/processinfo/40b7eb19-ae35-4490-8a11-eb91a573c590.json +0 -268
  191. package/.tap/processinfo/40bb1260-d856-4248-8939-a0a05e322041.json +0 -268
  192. package/.tap/processinfo/41252e0b-7f69-44cc-b356-dd94bcbfdb29.json +0 -268
  193. package/.tap/processinfo/418fa710-e2fd-4508-b533-c179958da464.json +0 -269
  194. package/.tap/processinfo/433ef009-63aa-48fe-8e5d-c725228fa2fc.json +0 -268
  195. package/.tap/processinfo/44bf577c-9c01-4197-bd29-2e1ae888c4d4.json +0 -268
  196. package/.tap/processinfo/458fb7f2-20b9-48a2-8853-403c9851f605.json +0 -268
  197. package/.tap/processinfo/46b9892b-bb23-4b86-b0fa-9297f08c611a.json +0 -268
  198. package/.tap/processinfo/46bd9aaf-6cf3-4bd5-b90d-e136a7299a8e.json +0 -268
  199. package/.tap/processinfo/4779aa5f-e57a-4fcc-87e2-7d0bd4fca27f.json +0 -268
  200. package/.tap/processinfo/47b73f4b-ab31-49e1-97fd-8436dbe4bdf3.json +0 -269
  201. package/.tap/processinfo/49dba52e-e0c9-445d-8e9d-6d9ebe3ce6c4.json +0 -268
  202. package/.tap/processinfo/4b1dbc61-4e65-4c56-9784-2036f369038a.json +0 -268
  203. package/.tap/processinfo/4b6f0b40-43ef-4668-83a0-e07e28509df5.json +0 -268
  204. package/.tap/processinfo/4c236f70-f532-460b-8f7a-dd973301d493.json +0 -268
  205. package/.tap/processinfo/4d92b707-a268-48b8-885b-004d3a288c41.json +0 -269
  206. package/.tap/processinfo/4ff10bae-7c97-4c0a-b712-6c0d2f8c0e8e.json +0 -270
  207. package/.tap/processinfo/50f95bd5-ae12-4d83-99f4-ae9b0690c6a8.json +0 -268
  208. package/.tap/processinfo/557e4a49-d99c-4a63-b2f2-f33d897ab874.json +0 -268
  209. package/.tap/processinfo/589fd21a-8319-4abf-8cf7-82cb4a463a4b.json +0 -269
  210. package/.tap/processinfo/5a872f3a-949f-40be-8004-d739d034255c.json +0 -272
  211. package/.tap/processinfo/5abc301a-23da-424d-891e-3afbaff9156c.json +0 -269
  212. package/.tap/processinfo/5c31614c-a766-4837-ab59-dd6977166f72.json +0 -253
  213. package/.tap/processinfo/5d1e90c8-d819-4901-b022-f9ea4cd81978.json +0 -268
  214. package/.tap/processinfo/5d283e67-f31d-4fa8-a559-a1d8e82ee046.json +0 -269
  215. package/.tap/processinfo/5df505bc-6a4b-4c41-822f-51e2d7111de8.json +0 -268
  216. package/.tap/processinfo/5eaf64a2-fbfd-40e7-b391-c30f744b2bf1.json +0 -269
  217. package/.tap/processinfo/5ef5ede0-6436-4938-8401-d32ad4bffd5d.json +0 -268
  218. package/.tap/processinfo/606f05c0-8293-41db-bc92-eea82123697f.json +0 -269
  219. package/.tap/processinfo/6446806d-6cab-4c1d-a9ed-6bccaf3c4ea9.json +0 -268
  220. package/.tap/processinfo/64da7e08-925d-444d-98de-6568c6115d8d.json +0 -269
  221. package/.tap/processinfo/6917da6d-d2dc-466a-a893-7fb7412dde96.json +0 -268
  222. package/.tap/processinfo/69bbeee0-c398-4ccf-98b3-fb625a63bab4.json +0 -268
  223. package/.tap/processinfo/6da6ea8f-3370-4703-b230-90159531f766.json +0 -268
  224. package/.tap/processinfo/6ecffe1f-3016-4c11-9294-b488baced99f.json +0 -268
  225. package/.tap/processinfo/6f23f41f-ccbd-48cb-9ab6-311db0cfb65c.json +0 -270
  226. package/.tap/processinfo/713a674e-40e1-46b4-866e-949d57c1a9f9.json +0 -270
  227. package/.tap/processinfo/730254d4-eacb-4cdf-80f4-8da22341cde5.json +0 -268
  228. package/.tap/processinfo/7344e559-c546-416f-8f1b-0f9fe12c6f02.json +0 -268
  229. package/.tap/processinfo/7556217a-0155-448f-b4d4-bec1bb0f6040.json +0 -269
  230. package/.tap/processinfo/7572079c-166c-4c4c-85ff-89b9430b214f.json +0 -268
  231. package/.tap/processinfo/7808180f-1974-47cd-bba2-2d6b8b711d65.json +0 -273
  232. package/.tap/processinfo/796dde83-da66-4db2-8d27-d45a3627c9c7.json +0 -268
  233. package/.tap/processinfo/7979819f-3723-48be-9f55-be700e689441.json +0 -270
  234. package/.tap/processinfo/7a664d39-d7f5-42f9-89df-15563048fab6.json +0 -268
  235. package/.tap/processinfo/7b047b72-01d9-4217-857c-93341651b4b3.json +0 -269
  236. package/.tap/processinfo/7ce41af6-7961-45ae-8c6f-b6e1c5692a48.json +0 -268
  237. package/.tap/processinfo/7e1de1c6-127e-463d-9357-081ee33ef5ce.json +0 -269
  238. package/.tap/processinfo/81ac7a7f-b0c0-4ef6-82cb-c718ea84e152.json +0 -268
  239. package/.tap/processinfo/851a058f-a497-4b10-a0b7-c9182d9c4d5a.json +0 -268
  240. package/.tap/processinfo/86502974-c245-4194-ade4-d9c6fdbb757e.json +0 -268
  241. package/.tap/processinfo/8a3fe726-86ab-4300-8d73-7eacbbc02a05.json +0 -268
  242. package/.tap/processinfo/8adf928b-c963-4ba0-9c35-606fcbd8a2aa.json +0 -272
  243. package/.tap/processinfo/8b31a6d8-1a33-4a27-93ca-1c5b364be068.json +0 -240
  244. package/.tap/processinfo/8ec12773-6b18-49a2-8e52-874c797df965.json +0 -833
  245. package/.tap/processinfo/8edb9502-3420-42fb-a602-e5de93be2df1.json +0 -268
  246. package/.tap/processinfo/8fc572e6-9828-4f98-a49c-9e081b2193c4.json +0 -242
  247. package/.tap/processinfo/8fee2d30-c5dd-4fae-9cf2-2ef8dd0f90de.json +0 -834
  248. package/.tap/processinfo/92cc0496-5f26-4370-8212-18136b972f99.json +0 -268
  249. package/.tap/processinfo/93a3f064-3f6e-4f49-becb-f7925f2961a9.json +0 -268
  250. package/.tap/processinfo/967e3697-8310-4a19-8dd5-927ac8bd6c79.json +0 -269
  251. package/.tap/processinfo/97225e23-9d30-4287-b3f5-72bccebec50b.json +0 -268
  252. package/.tap/processinfo/9a363bc6-4e65-47e8-94ca-26a9db428fb4.json +0 -268
  253. package/.tap/processinfo/9d2fe462-57fa-43f1-b02c-d188f15de30b.json +0 -270
  254. package/.tap/processinfo/a00b6cda-feb7-4b8a-8179-4c43bc29d670.json +0 -269
  255. package/.tap/processinfo/a017cbd5-4ac7-49e1-8c77-1bf4f6e7f2a6.json +0 -271
  256. package/.tap/processinfo/a1277309-1984-48f8-b60b-f5e8639736be.json +0 -271
  257. package/.tap/processinfo/a16bf53e-4337-48ff-88fa-67f55738e0f5.json +0 -268
  258. package/.tap/processinfo/a3a9848f-440e-41bb-9b0b-568bcfee0ddc.json +0 -268
  259. package/.tap/processinfo/a468c11f-f2f1-4e92-9ba0-6d28b6569b72.json +0 -268
  260. package/.tap/processinfo/a5880465-68f1-46b3-84a5-0da389d0bc67.json +0 -268
  261. package/.tap/processinfo/a666f394-39b4-44ad-8e74-abebf74dde3b.json +0 -270
  262. package/.tap/processinfo/af09d8ca-7053-4410-b514-b22c47f5979f.json +0 -268
  263. package/.tap/processinfo/af203309-28aa-459d-a56e-d88833695521.json +0 -268
  264. package/.tap/processinfo/afa2f7b6-dcd2-4d90-bf3c-54ba8b6800eb.json +0 -268
  265. package/.tap/processinfo/b231291d-ef14-4ff0-85f9-38a73a5408f8.json +0 -268
  266. package/.tap/processinfo/b3d3f2a1-a9fc-4d88-b122-fae90248cd59.json +0 -268
  267. package/.tap/processinfo/b834bf83-26c4-403a-8e91-eb15fe4b0b5d.json +0 -268
  268. package/.tap/processinfo/b8786fd7-47df-4ac1-8d6f-2d4c7623c681.json +0 -268
  269. package/.tap/processinfo/b9758f53-7f5a-4b03-8684-8a42ad644e5a.json +0 -268
  270. package/.tap/processinfo/bd194ea2-a21a-4604-b225-ee48abf1e607.json +0 -242
  271. package/.tap/processinfo/bd7ced53-3872-43b7-ad73-3352e50b728b.json +0 -268
  272. package/.tap/processinfo/be50295b-7e50-46cd-8bf1-637bf222699c.json +0 -268
  273. package/.tap/processinfo/bec61dd9-aa52-4e6c-8e37-5c9c10e935fd.json +0 -268
  274. package/.tap/processinfo/c015adf9-1d60-447e-87b5-b2031fe55bba.json +0 -268
  275. package/.tap/processinfo/c0666afa-7f64-45bd-97fb-145df1380157.json +0 -268
  276. package/.tap/processinfo/c2c0c012-c1c0-4457-84d6-dadba8396c94.json +0 -268
  277. package/.tap/processinfo/c3dd3ecd-737b-47ce-a917-54341c7bbed3.json +0 -268
  278. package/.tap/processinfo/c41ac06d-64b8-4bb3-bf56-0551f5a48f4b.json +0 -268
  279. package/.tap/processinfo/c4235bfb-a2aa-4271-9c6b-3ceb370219b1.json +0 -268
  280. package/.tap/processinfo/c4e6f24f-288c-493c-b6f0-02924aeb6758.json +0 -270
  281. package/.tap/processinfo/c54227bb-4a7b-40bb-bfe6-b54fe55078f3.json +0 -268
  282. package/.tap/processinfo/c699de91-3b0b-4466-9418-6910a3eb640a.json +0 -269
  283. package/.tap/processinfo/c74e2f37-451a-4577-ac18-e597fbd9a1d4.json +0 -269
  284. package/.tap/processinfo/c90cccec-5b4b-445f-a935-ac22859675d0.json +0 -252
  285. package/.tap/processinfo/c9dd6c7d-0d16-45e5-87ae-117388bf2994.json +0 -268
  286. package/.tap/processinfo/ca2e48fb-58c5-47fc-ad2e-263838aea42c.json +0 -272
  287. package/.tap/processinfo/ca87351d-c710-45c1-838a-16bccac59874.json +0 -273
  288. package/.tap/processinfo/cdb4a671-5776-4944-91b9-c456c58841ef.json +0 -268
  289. package/.tap/processinfo/cf10fdc8-6a87-447a-9e12-45f447af61f3.json +0 -244
  290. package/.tap/processinfo/cf3f1f08-643e-4f24-82ca-40f7a349c3d1.json +0 -268
  291. package/.tap/processinfo/d091172a-06a5-469b-82a9-8fefe3dd99da.json +0 -240
  292. package/.tap/processinfo/d1675431-61d6-45f8-a010-6e654112a00a.json +0 -272
  293. package/.tap/processinfo/d2d54aa2-c221-4ad4-b6b7-0c58e3c3679c.json +0 -269
  294. package/.tap/processinfo/d4f3c95a-ddbe-419d-bce0-dd6acceee21f.json +0 -268
  295. package/.tap/processinfo/d54ed8f1-43c3-478a-90d3-2c8aced723f2.json +0 -269
  296. package/.tap/processinfo/d6e5a2a6-4647-4d98-916c-aec4ace54a65.json +0 -268
  297. package/.tap/processinfo/d7280c64-45e6-4b12-affc-3ac9a5d4014a.json +0 -268
  298. package/.tap/processinfo/d82c8367-d825-4405-88df-07298f6ef840.json +0 -269
  299. package/.tap/processinfo/d8f97e53-e921-4d33-9c8d-2f7e807a9425.json +0 -268
  300. package/.tap/processinfo/da546a73-9714-4f8c-bdbb-e42730edbcfa.json +0 -268
  301. package/.tap/processinfo/da7fb7fb-1da4-49f8-a3ee-d4ea623c01a5.json +0 -268
  302. package/.tap/processinfo/daa6a016-4f0c-4050-923c-2022e0bb21d8.json +0 -268
  303. package/.tap/processinfo/db9a251d-8540-4719-b464-e7d5febd97d1.json +0 -240
  304. package/.tap/processinfo/dc10c603-8e58-4611-baa3-44da2578d07a.json +0 -268
  305. package/.tap/processinfo/dde56c1a-858c-47cc-b0bb-61279620ac17.json +0 -268
  306. package/.tap/processinfo/e0d9c4ea-f7c7-4c64-8ced-66dc6f0ac5d2.json +0 -271
  307. package/.tap/processinfo/e121454f-5dfa-4209-ba15-4c39840871f2.json +0 -831
  308. package/.tap/processinfo/e1f43e40-c3fe-4eb8-a713-d5910cc6b25a.json +0 -268
  309. package/.tap/processinfo/e4575e7a-f00e-488b-94e1-8f877b54725e.json +0 -268
  310. package/.tap/processinfo/e9ad667e-8603-4488-af64-449cc9532803.json +0 -268
  311. package/.tap/processinfo/eb26a697-e5e2-4730-aeea-bcb9c49afd4d.json +0 -268
  312. package/.tap/processinfo/eb29d1c3-feaf-4744-9d84-cf257e8269b0.json +0 -268
  313. package/.tap/processinfo/ee720c0a-ed64-4e7e-8c0a-139c7b9725d2.json +0 -268
  314. package/.tap/processinfo/ef88c13a-87b2-49e4-a683-7b812505cd6f.json +0 -268
  315. package/.tap/processinfo/f4ed6948-dac0-4128-9f86-d083b6918ea7.json +0 -268
  316. package/.tap/processinfo/f7544c01-8ac7-4e42-8ad5-c4d62e094d1f.json +0 -270
  317. package/.tap/processinfo/f7cee4b3-7bcc-4591-a628-5629b0b41c9e.json +0 -268
  318. package/.tap/processinfo/f9c0a1f7-c1a4-44d3-ae3f-8c1eb42cd746.json +0 -269
  319. package/.tap/processinfo/fc46b4da-79db-4201-af7e-34bb17f92d69.json +0 -270
  320. package/.tap/processinfo/fccc0056-03c4-40cb-9d0b-2db4bbe573c1.json +0 -268
  321. package/.tap/processinfo/fd2df572-54d7-4ce7-b7aa-a2b4b00d4127.json +0 -254
  322. package/.tap/processinfo/fea9377f-b473-484d-bee6-ac7f49e50937.json +0 -269
  323. package/.tap/processinfo/feb516dc-abda-46e6-9b42-d37adfc63366.json +0 -268
  324. package/.tap/processinfo/ff0fda4c-aa2e-4236-906e-fdfb6bd6632e.json +0 -269
  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
@@ -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, statusCode?: number): 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
  }
@@ -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: this['input'] }
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 {
@@ -1069,3 +1079,40 @@ expectAssignable(server.withTypeProvider<AuxiliaryHandlerProvider>().get(
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>,