fastify 5.0.0-alpha.2 → 5.0.0-alpha.4

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 (290) hide show
  1. package/README.md +2 -2
  2. package/SPONSORS.md +2 -0
  3. package/build/build-validation.js +3 -15
  4. package/docs/Guides/Ecosystem.md +4 -0
  5. package/docs/Guides/Getting-Started.md +0 -2
  6. package/docs/Guides/Migration-Guide-V4.md +48 -0
  7. package/docs/Guides/Recommendations.md +8 -6
  8. package/docs/Reference/Errors.md +0 -2
  9. package/docs/Reference/Hooks.md +5 -9
  10. package/docs/Reference/Logging.md +1 -1
  11. package/docs/Reference/Reply.md +9 -11
  12. package/docs/Reference/Request.md +0 -11
  13. package/docs/Reference/Routes.md +4 -23
  14. package/docs/Reference/Server.md +30 -40
  15. package/docs/Reference/Type-Providers.md +2 -2
  16. package/docs/Reference/TypeScript.md +16 -18
  17. package/docs/Reference/Validation-and-Serialization.md +62 -27
  18. package/docs/Reference/Warnings.md +0 -26
  19. package/eslint.config.js +9 -25
  20. package/fastify.d.ts +10 -23
  21. package/fastify.js +60 -61
  22. package/lib/configValidator.js +130 -182
  23. package/lib/context.js +1 -22
  24. package/lib/decorate.js +2 -2
  25. package/lib/errors.js +0 -6
  26. package/lib/handleRequest.js +5 -5
  27. package/lib/reply.js +34 -74
  28. package/lib/request.js +0 -45
  29. package/lib/route.js +12 -27
  30. package/lib/schemas.js +27 -22
  31. package/lib/server.js +6 -11
  32. package/lib/symbols.js +1 -1
  33. package/lib/validation.js +27 -6
  34. package/lib/warnings.js +1 -92
  35. package/lib/wrapThenable.js +1 -1
  36. package/package.json +14 -15
  37. package/test/decorator.test.js +1 -1
  38. package/test/diagnostics-channel/404.test.js +1 -1
  39. package/test/diagnostics-channel/async-delay-request.test.js +1 -1
  40. package/test/diagnostics-channel/async-request.test.js +1 -1
  41. package/test/diagnostics-channel/error-before-handler.test.js +1 -1
  42. package/test/diagnostics-channel/error-request.test.js +1 -1
  43. package/test/diagnostics-channel/error-status.test.js +1 -1
  44. package/test/diagnostics-channel/init.test.js +2 -2
  45. package/test/diagnostics-channel/sync-delay-request.test.js +1 -1
  46. package/test/diagnostics-channel/sync-request-reply.test.js +1 -1
  47. package/test/diagnostics-channel/sync-request.test.js +1 -1
  48. package/test/{copy.test.js → http-methods/copy.test.js} +2 -1
  49. package/test/http-methods/custom-http-methods.test.js +111 -0
  50. package/test/{get.test.js → http-methods/get.test.js} +1 -1
  51. package/test/{head.test.js → http-methods/head.test.js} +7 -87
  52. package/test/{lock.test.js → http-methods/lock.test.js} +2 -1
  53. package/test/{mkcalendar.test.js → http-methods/mkcalendar.test.js} +2 -1
  54. package/test/{mkcol.test.js → http-methods/mkcol.test.js} +2 -1
  55. package/test/{move.test.js → http-methods/move.test.js} +2 -1
  56. package/test/{propfind.test.js → http-methods/propfind.test.js} +2 -1
  57. package/test/{proppatch.test.js → http-methods/proppatch.test.js} +2 -1
  58. package/test/{report.test.js → http-methods/report.test.js} +2 -1
  59. package/test/{search.test.js → http-methods/search.test.js} +2 -1
  60. package/test/{trace.test.js → http-methods/trace.test.js} +2 -1
  61. package/test/{unlock.test.js → http-methods/unlock.test.js} +2 -1
  62. package/test/internals/all.test.js +3 -3
  63. package/test/internals/decorator.test.js +2 -2
  64. package/test/internals/errors.test.js +7 -17
  65. package/test/internals/initialConfig.test.js +0 -31
  66. package/test/internals/reply-serialize.test.js +25 -10
  67. package/test/internals/reply.test.js +31 -153
  68. package/test/internals/request-validate.test.js +21 -12
  69. package/test/internals/request.test.js +1 -18
  70. package/test/internals/validation.test.js +49 -56
  71. package/test/listen.1.test.js +66 -14
  72. package/test/listen.5.test.js +11 -0
  73. package/test/reply-trailers.test.js +1 -32
  74. package/test/route-shorthand.test.js +3 -1
  75. package/test/route.3.test.js +4 -1
  76. package/test/route.7.test.js +2 -12
  77. package/test/route.8.test.js +34 -5
  78. package/test/router-options.test.js +6 -3
  79. package/test/schema-examples.test.js +15 -6
  80. package/test/schema-feature.test.js +178 -35
  81. package/test/schema-serialization.test.js +125 -21
  82. package/test/schema-validation.test.js +154 -3
  83. package/test/skip-reply-send.test.js +6 -6
  84. package/test/stream-serializers.test.js +37 -0
  85. package/test/throw.test.js +2 -14
  86. package/test/types/errors.test-d.ts +1 -2
  87. package/test/types/fastify.test-d.ts +23 -34
  88. package/test/types/hooks.test-d.ts +56 -56
  89. package/test/types/instance.test-d.ts +3 -3
  90. package/test/types/reply.test-d.ts +7 -8
  91. package/test/types/request.test-d.ts +2 -12
  92. package/test/types/route.test-d.ts +158 -158
  93. package/test/types/schema.test-d.ts +22 -5
  94. package/test/versioned-routes.test.js +0 -90
  95. package/test/web-api.test.js +75 -0
  96. package/types/errors.d.ts +78 -79
  97. package/types/hooks.d.ts +18 -18
  98. package/types/instance.d.ts +1 -1
  99. package/types/logger.d.ts +7 -7
  100. package/types/reply.d.ts +18 -22
  101. package/types/request.d.ts +8 -14
  102. package/types/route.d.ts +5 -6
  103. package/types/type-provider.d.ts +1 -1
  104. package/.tap/processinfo/09002e93-10ad-430c-bc86-c0576928b0ed.json +0 -241
  105. package/.tap/processinfo/ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json +0 -268
  106. package/.tap/test-results/test/404s.test.js.tap +0 -623
  107. package/.tap/test-results/test/500s.test.js.tap +0 -64
  108. package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +0 -36
  109. package/.tap/test-results/test/als.test.js.tap +0 -15
  110. package/.tap/test-results/test/async-await.test.js.tap +0 -184
  111. package/.tap/test-results/test/async-dispose.test.js.tap +0 -8
  112. package/.tap/test-results/test/async_hooks.test.js.tap +0 -10
  113. package/.tap/test-results/test/bodyLimit.test.js.tap +0 -48
  114. package/.tap/test-results/test/buffer.test.js.tap +0 -20
  115. package/.tap/test-results/test/build/error-serializer.test.js.tap +0 -12
  116. package/.tap/test-results/test/build/version.test.js.tap +0 -7
  117. package/.tap/test-results/test/case-insensitive.test.js.tap +0 -36
  118. package/.tap/test-results/test/chainable.test.js.tap +0 -17
  119. package/.tap/test-results/test/check.test.js.tap +0 -10
  120. package/.tap/test-results/test/childLoggerFactory.test.js.tap +0 -23
  121. package/.tap/test-results/test/client-timeout.test.js.tap +0 -7
  122. package/.tap/test-results/test/close-pipelining.test.js.tap +0 -15
  123. package/.tap/test-results/test/close.test.js.tap +0 -172
  124. package/.tap/test-results/test/connectionTimeout.test.js.tap +0 -12
  125. package/.tap/test-results/test/constrained-routes.test.js.tap +0 -173
  126. package/.tap/test-results/test/content-length.test.js.tap +0 -46
  127. package/.tap/test-results/test/content-parser.test.js.tap +0 -266
  128. package/.tap/test-results/test/content-type.test.js.tap +0 -14
  129. package/.tap/test-results/test/context-config.test.js.tap +0 -41
  130. package/.tap/test-results/test/copy.test.js.tap +0 -14
  131. package/.tap/test-results/test/custom-http-server.test.js.tap +0 -30
  132. package/.tap/test-results/test/custom-parser-async.test.js.tap +0 -21
  133. package/.tap/test-results/test/custom-parser.0.test.js.tap +0 -199
  134. package/.tap/test-results/test/custom-parser.1.test.js.tap +0 -90
  135. package/.tap/test-results/test/custom-parser.2.test.js.tap +0 -22
  136. package/.tap/test-results/test/custom-parser.3.test.js.tap +0 -53
  137. package/.tap/test-results/test/custom-parser.4.test.js.tap +0 -45
  138. package/.tap/test-results/test/custom-parser.5.test.js.tap +0 -41
  139. package/.tap/test-results/test/custom-querystring-parser.test.js.tap +0 -46
  140. package/.tap/test-results/test/decorator.test.js.tap +0 -465
  141. package/.tap/test-results/test/delete.test.js.tap +0 -110
  142. package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +0 -15
  143. package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +0 -25
  144. package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +0 -24
  145. package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +0 -9
  146. package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +0 -20
  147. package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +0 -10
  148. package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +0 -14
  149. package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +0 -16
  150. package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +0 -16
  151. package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +0 -19
  152. package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +0 -18
  153. package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +0 -243
  154. package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +0 -9
  155. package/.tap/test-results/test/esm/esm.test.mjs.tap +0 -8
  156. package/.tap/test-results/test/esm/index.test.js.tap +0 -8
  157. package/.tap/test-results/test/fastify-instance.test.js.tap +0 -114
  158. package/.tap/test-results/test/findRoute.test.js.tap +0 -37
  159. package/.tap/test-results/test/fluent-schema.test.js.tap +0 -36
  160. package/.tap/test-results/test/genReqId.test.js.tap +0 -106
  161. package/.tap/test-results/test/get.test.js.tap +0 -151
  162. package/.tap/test-results/test/handler-context.test.js.tap +0 -19
  163. package/.tap/test-results/test/has-route.test.js.tap +0 -30
  164. package/.tap/test-results/test/head.test.js.tap +0 -130
  165. package/.tap/test-results/test/header-overflow.test.js.tap +0 -16
  166. package/.tap/test-results/test/hooks-async.test.js.tap +0 -286
  167. package/.tap/test-results/test/hooks.on-listen.test.js.tap +0 -311
  168. package/.tap/test-results/test/hooks.on-ready.test.js.tap +0 -151
  169. package/.tap/test-results/test/hooks.test.js.tap +0 -966
  170. package/.tap/test-results/test/http2/closing.test.js.tap +0 -35
  171. package/.tap/test-results/test/http2/constraint.test.js.tap +0 -32
  172. package/.tap/test-results/test/http2/head.test.js.tap +0 -9
  173. package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +0 -8
  174. package/.tap/test-results/test/http2/plain.test.js.tap +0 -22
  175. package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +0 -40
  176. package/.tap/test-results/test/http2/secure.test.js.tap +0 -27
  177. package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +0 -9
  178. package/.tap/test-results/test/https/custom-https-server.test.js.tap +0 -10
  179. package/.tap/test-results/test/https/https.test.js.tap +0 -45
  180. package/.tap/test-results/test/imports.test.js.tap +0 -14
  181. package/.tap/test-results/test/inject.test.js.tap +0 -165
  182. package/.tap/test-results/test/internals/all.test.js.tap +0 -42
  183. package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +0 -14
  184. package/.tap/test-results/test/internals/context.test.js.tap +0 -14
  185. package/.tap/test-results/test/internals/decorator.test.js.tap +0 -51
  186. package/.tap/test-results/test/internals/errors.test.js.tap +0 -1212
  187. package/.tap/test-results/test/internals/handleRequest.test.js.tap +0 -69
  188. package/.tap/test-results/test/internals/hookRunner.test.js.tap +0 -143
  189. package/.tap/test-results/test/internals/hooks.test.js.tap +0 -45
  190. package/.tap/test-results/test/internals/initialConfig.test.js.tap +0 -125
  191. package/.tap/test-results/test/internals/logger.test.js.tap +0 -71
  192. package/.tap/test-results/test/internals/plugin.test.js.tap +0 -48
  193. package/.tap/test-results/test/internals/reply-serialize.test.js.tap +0 -166
  194. package/.tap/test-results/test/internals/reply.test.js.tap +0 -688
  195. package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +0 -74
  196. package/.tap/test-results/test/internals/request-validate.test.js.tap +0 -384
  197. package/.tap/test-results/test/internals/request.test.js.tap +0 -163
  198. package/.tap/test-results/test/internals/server.test.js.tap +0 -30
  199. package/.tap/test-results/test/internals/validation.test.js.tap +0 -121
  200. package/.tap/test-results/test/keepAliveTimeout.test.js.tap +0 -12
  201. package/.tap/test-results/test/listen.1.test.js.tap +0 -31
  202. package/.tap/test-results/test/listen.2.test.js.tap +0 -46
  203. package/.tap/test-results/test/listen.3.test.js.tap +0 -25
  204. package/.tap/test-results/test/listen.4.test.js.tap +0 -51
  205. package/.tap/test-results/test/lock.test.js.tap +0 -29
  206. package/.tap/test-results/test/logger/instantiation.test.js.tap +0 -92
  207. package/.tap/test-results/test/logger/logging.test.js.tap +0 -117
  208. package/.tap/test-results/test/logger/options.test.js.tap +0 -165
  209. package/.tap/test-results/test/logger/request.test.js.tap +0 -82
  210. package/.tap/test-results/test/logger/response.test.js.tap +0 -38
  211. package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +0 -44
  212. package/.tap/test-results/test/method-missing.test.js.tap +0 -8
  213. package/.tap/test-results/test/middleware.test.js.tap +0 -17
  214. package/.tap/test-results/test/mkcalendar.test.js.tap +0 -43
  215. package/.tap/test-results/test/mkcol.test.js.tap +0 -14
  216. package/.tap/test-results/test/move.test.js.tap +0 -15
  217. package/.tap/test-results/test/noop-set.test.js.tap +0 -8
  218. package/.tap/test-results/test/nullable-validation.test.js.tap +0 -36
  219. package/.tap/test-results/test/options.error-handler.test.js.tap +0 -186
  220. package/.tap/test-results/test/options.test.js.tap +0 -174
  221. package/.tap/test-results/test/output-validation.test.js.tap +0 -66
  222. package/.tap/test-results/test/patch.error-handler.test.js.tap +0 -206
  223. package/.tap/test-results/test/patch.test.js.tap +0 -182
  224. package/.tap/test-results/test/plugin.1.test.js.tap +0 -78
  225. package/.tap/test-results/test/plugin.2.test.js.tap +0 -102
  226. package/.tap/test-results/test/plugin.3.test.js.tap +0 -58
  227. package/.tap/test-results/test/plugin.4.test.js.tap +0 -164
  228. package/.tap/test-results/test/post-empty-body.test.js.tap +0 -8
  229. package/.tap/test-results/test/pretty-print.test.js.tap +0 -82
  230. package/.tap/test-results/test/promises.test.js.tap +0 -46
  231. package/.tap/test-results/test/propfind.test.js.tap +0 -43
  232. package/.tap/test-results/test/proppatch.test.js.tap +0 -29
  233. package/.tap/test-results/test/proto-poisoning.test.js.tap +0 -47
  234. package/.tap/test-results/test/put.error-handler.test.js.tap +0 -206
  235. package/.tap/test-results/test/put.test.js.tap +0 -182
  236. package/.tap/test-results/test/register.test.js.tap +0 -61
  237. package/.tap/test-results/test/reply-code.test.js.tap +0 -40
  238. package/.tap/test-results/test/reply-earlyHints.test.js.tap +0 -22
  239. package/.tap/test-results/test/reply-error.test.js.tap +0 -643
  240. package/.tap/test-results/test/reply-trailers.test.js.tap +0 -176
  241. package/.tap/test-results/test/report.test.js.tap +0 -43
  242. package/.tap/test-results/test/request-error.test.js.tap +0 -98
  243. package/.tap/test-results/test/request-id.test.js.tap +0 -38
  244. package/.tap/test-results/test/request.deprecated.test.js.tap +0 -13
  245. package/.tap/test-results/test/requestTimeout.test.js.tap +0 -21
  246. package/.tap/test-results/test/route-hooks.test.js.tap +0 -498
  247. package/.tap/test-results/test/route-prefix.test.js.tap +0 -195
  248. package/.tap/test-results/test/route-shorthand.test.js.tap +0 -190
  249. package/.tap/test-results/test/route.1.test.js.tap +0 -93
  250. package/.tap/test-results/test/route.2.test.js.tap +0 -28
  251. package/.tap/test-results/test/route.3.test.js.tap +0 -39
  252. package/.tap/test-results/test/route.4.test.js.tap +0 -32
  253. package/.tap/test-results/test/route.5.test.js.tap +0 -54
  254. package/.tap/test-results/test/route.6.test.js.tap +0 -81
  255. package/.tap/test-results/test/route.7.test.js.tap +0 -93
  256. package/.tap/test-results/test/route.8.test.js.tap +0 -38
  257. package/.tap/test-results/test/router-options.test.js.tap +0 -104
  258. package/.tap/test-results/test/same-shape.test.js.tap +0 -22
  259. package/.tap/test-results/test/schema-examples.test.js.tap +0 -85
  260. package/.tap/test-results/test/schema-feature.test.js.tap +0 -445
  261. package/.tap/test-results/test/schema-serialization.test.js.tap +0 -194
  262. package/.tap/test-results/test/schema-special-usage.test.js.tap +0 -186
  263. package/.tap/test-results/test/schema-validation.test.js.tap +0 -199
  264. package/.tap/test-results/test/search.test.js.tap +0 -77
  265. package/.tap/test-results/test/serialize-response.test.js.tap +0 -26
  266. package/.tap/test-results/test/server.test.js.tap +0 -65
  267. package/.tap/test-results/test/set-error-handler.test.js.tap +0 -7
  268. package/.tap/test-results/test/skip-reply-send.test.js.tap +0 -272
  269. package/.tap/test-results/test/stream.1.test.js.tap +0 -36
  270. package/.tap/test-results/test/stream.2.test.js.tap +0 -20
  271. package/.tap/test-results/test/stream.3.test.js.tap +0 -34
  272. package/.tap/test-results/test/stream.4.test.js.tap +0 -40
  273. package/.tap/test-results/test/stream.5.test.js.tap +0 -37
  274. package/.tap/test-results/test/sync-routes.test.js.tap +0 -19
  275. package/.tap/test-results/test/throw.test.js.tap +0 -116
  276. package/.tap/test-results/test/trace.test.js.tap +0 -7
  277. package/.tap/test-results/test/trust-proxy.test.js.tap +0 -109
  278. package/.tap/test-results/test/type-provider.test.js.tap +0 -12
  279. package/.tap/test-results/test/unlock.test.js.tap +0 -14
  280. package/.tap/test-results/test/upgrade.test.js.tap +0 -8
  281. package/.tap/test-results/test/url-rewriting.test.js.tap +0 -39
  282. package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +0 -33
  283. package/.tap/test-results/test/validation-error-handling.test.js.tap +0 -180
  284. package/.tap/test-results/test/versioned-routes.test.js.tap +0 -151
  285. package/.tap/test-results/test/web-api.test.js.tap +0 -51
  286. package/.tap/test-results/test/wrapThenable.test.js.tap +0 -11
  287. package/EXPENSE_POLICY.md +0 -105
  288. package/lib/httpMethods.js +0 -40
  289. package/test/method-missing.test.js +0 -24
  290. package/test/request.deprecated.test.js +0 -38
@@ -7,7 +7,6 @@ const sget = require('simple-get').concat
7
7
  const http = require('node:http')
8
8
  const split = require('split2')
9
9
  const append = require('vary').append
10
- const proxyquire = require('proxyquire')
11
10
 
12
11
  process.removeAllListeners('warning')
13
12
 
@@ -553,59 +552,6 @@ test('Should register a versioned route with custom versioning strategy', t => {
553
552
  })
554
553
  })
555
554
 
556
- test('Should get error using an invalid a versioned route, using default validation (deprecated versioning option)', t => {
557
- t.plan(3)
558
-
559
- const fastify = Fastify({
560
- versioning: {
561
- storage: function () {
562
- const versions = {}
563
- return {
564
- get: (version) => { return versions[version] || null },
565
- set: (version, store) => { versions[version] = store }
566
- }
567
- },
568
- deriveVersion: (req, ctx) => {
569
- return req.headers.accept
570
- }
571
- }
572
- })
573
-
574
- fastify.route({
575
- method: 'GET',
576
- url: '/',
577
- constraints: { version: 'application/vnd.example.api+json;version=1' },
578
- handler: (req, reply) => {
579
- reply.send({ hello: 'cant match route v1' })
580
- }
581
- })
582
-
583
- try {
584
- fastify.route({
585
- method: 'GET',
586
- url: '/',
587
- // not a string version
588
- constraints: { version: 2 },
589
- handler: (req, reply) => {
590
- reply.send({ hello: 'cant match route v2' })
591
- }
592
- })
593
- } catch (err) {
594
- t.equal(err.message, 'Version constraint should be a string.')
595
- }
596
-
597
- fastify.inject({
598
- method: 'GET',
599
- url: '/',
600
- headers: {
601
- Accept: 'application/vnd.example.api+json;version=2'
602
- }
603
- }, (err, res) => {
604
- t.error(err)
605
- t.equal(res.statusCode, 404)
606
- })
607
- })
608
-
609
555
  test('Vary header check (for documentation example)', t => {
610
556
  t.plan(8)
611
557
  const fastify = Fastify()
@@ -659,39 +605,3 @@ test('Vary header check (for documentation example)', t => {
659
605
  t.equal(res.headers.vary, undefined)
660
606
  })
661
607
  })
662
-
663
- test('Should trigger a warning when a versioned route is registered via version option', t => {
664
- t.plan(4)
665
-
666
- function onWarning () {
667
- t.pass('FSTDEP008 has been emitted')
668
- }
669
-
670
- const route = proxyquire('../lib/route', {
671
- './warnings': {
672
- FSTDEP008: onWarning
673
- }
674
- })
675
- const fastify = proxyquire('..', { './lib/route.js': route })({ exposeHeadRoutes: false })
676
-
677
- fastify.route({
678
- method: 'GET',
679
- url: '/',
680
- version: '1.2.0',
681
- handler: (req, reply) => {
682
- reply.send({ hello: 'world' })
683
- }
684
- })
685
-
686
- fastify.inject({
687
- method: 'GET',
688
- url: '/',
689
- headers: {
690
- 'Accept-Version': '1.x'
691
- }
692
- }, (err, res) => {
693
- t.error(err)
694
- t.same(JSON.parse(res.payload), { hello: 'world' })
695
- t.equal(res.statusCode, 200)
696
- })
697
- })
@@ -56,6 +56,81 @@ test('should response with a Response', async (t) => {
56
56
  t.equal(headers.hello, 'world')
57
57
  })
58
58
 
59
+ test('should response with a Response 204', async (t) => {
60
+ t.plan(3)
61
+
62
+ const fastify = Fastify()
63
+
64
+ fastify.get('/', function (request, reply) {
65
+ reply.send(new Response(null, {
66
+ status: 204,
67
+ headers: {
68
+ hello: 'world'
69
+ }
70
+ }))
71
+ })
72
+
73
+ const {
74
+ statusCode,
75
+ headers,
76
+ body
77
+ } = await fastify.inject({ method: 'GET', path: '/' })
78
+
79
+ t.equal(statusCode, 204)
80
+ t.equal(body, '')
81
+ t.equal(headers.hello, 'world')
82
+ })
83
+
84
+ test('should response with a Response 304', async (t) => {
85
+ t.plan(3)
86
+
87
+ const fastify = Fastify()
88
+
89
+ fastify.get('/', function (request, reply) {
90
+ reply.send(new Response(null, {
91
+ status: 304,
92
+ headers: {
93
+ hello: 'world'
94
+ }
95
+ }))
96
+ })
97
+
98
+ const {
99
+ statusCode,
100
+ headers,
101
+ body
102
+ } = await fastify.inject({ method: 'GET', path: '/' })
103
+
104
+ t.equal(statusCode, 304)
105
+ t.equal(body, '')
106
+ t.equal(headers.hello, 'world')
107
+ })
108
+
109
+ test('should response with a Response without body', async (t) => {
110
+ t.plan(3)
111
+
112
+ const fastify = Fastify()
113
+
114
+ fastify.get('/', function (request, reply) {
115
+ reply.send(new Response(null, {
116
+ status: 200,
117
+ headers: {
118
+ hello: 'world'
119
+ }
120
+ }))
121
+ })
122
+
123
+ const {
124
+ statusCode,
125
+ headers,
126
+ body
127
+ } = await fastify.inject({ method: 'GET', path: '/' })
128
+
129
+ t.equal(statusCode, 200)
130
+ t.equal(body, '')
131
+ t.equal(headers.hello, 'world')
132
+ })
133
+
59
134
  test('able to use in onSend hook - ReadableStream', async (t) => {
60
135
  t.plan(4)
61
136
 
package/types/errors.d.ts CHANGED
@@ -1,82 +1,81 @@
1
1
  import { FastifyErrorConstructor } from '@fastify/error'
2
2
 
3
3
  export type FastifyErrorCodes = Record<
4
- 'FST_ERR_NOT_FOUND' |
5
- 'FST_ERR_OPTIONS_NOT_OBJ' |
6
- 'FST_ERR_QSP_NOT_FN' |
7
- 'FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN' |
8
- 'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN' |
9
- 'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ' |
10
- 'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR' |
11
- 'FST_ERR_VERSION_CONSTRAINT_NOT_STR' |
12
- 'FST_ERR_VALIDATION' |
13
- 'FST_ERR_CTP_ALREADY_PRESENT' |
14
- 'FST_ERR_CTP_INVALID_TYPE' |
15
- 'FST_ERR_CTP_EMPTY_TYPE' |
16
- 'FST_ERR_CTP_INVALID_HANDLER' |
17
- 'FST_ERR_CTP_INVALID_PARSE_TYPE' |
18
- 'FST_ERR_CTP_BODY_TOO_LARGE' |
19
- 'FST_ERR_CTP_INVALID_MEDIA_TYPE' |
20
- 'FST_ERR_CTP_INVALID_CONTENT_LENGTH' |
21
- 'FST_ERR_CTP_EMPTY_JSON_BODY' |
22
- 'FST_ERR_CTP_INSTANCE_ALREADY_STARTED' |
23
- 'FST_ERR_DEC_ALREADY_PRESENT' |
24
- 'FST_ERR_DEC_DEPENDENCY_INVALID_TYPE' |
25
- 'FST_ERR_DEC_MISSING_DEPENDENCY' |
26
- 'FST_ERR_DEC_AFTER_START' |
27
- 'FST_ERR_DEC_REFERENCE_TYPE' |
28
- 'FST_ERR_HOOK_INVALID_TYPE' |
29
- 'FST_ERR_HOOK_INVALID_HANDLER' |
30
- 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER' |
31
- 'FST_ERR_HOOK_NOT_SUPPORTED' |
32
- 'FST_ERR_MISSING_MIDDLEWARE' |
33
- 'FST_ERR_HOOK_TIMEOUT' |
34
- 'FST_ERR_LOG_INVALID_DESTINATION' |
35
- 'FST_ERR_LOG_INVALID_LOGGER' |
36
- 'FST_ERR_REP_INVALID_PAYLOAD_TYPE' |
37
- 'FST_ERR_REP_ALREADY_SENT' |
38
- 'FST_ERR_REP_SENT_VALUE' |
39
- 'FST_ERR_SEND_INSIDE_ONERR' |
40
- 'FST_ERR_SEND_UNDEFINED_ERR' |
41
- 'FST_ERR_BAD_STATUS_CODE' |
42
- 'FST_ERR_BAD_TRAILER_NAME' |
43
- 'FST_ERR_BAD_TRAILER_VALUE' |
44
- 'FST_ERR_FAILED_ERROR_SERIALIZATION' |
45
- 'FST_ERR_MISSING_SERIALIZATION_FN' |
46
- 'FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN' |
47
- 'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION' |
48
- 'FST_ERR_SCH_MISSING_ID' |
49
- 'FST_ERR_SCH_ALREADY_PRESENT' |
50
- 'FST_ERR_SCH_CONTENT_MISSING_SCHEMA' |
51
- 'FST_ERR_SCH_DUPLICATE' |
52
- 'FST_ERR_SCH_VALIDATION_BUILD' |
53
- 'FST_ERR_SCH_SERIALIZATION_BUILD' |
54
- 'FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX' |
55
- 'FST_ERR_HTTP2_INVALID_VERSION' |
56
- 'FST_ERR_INIT_OPTS_INVALID' |
57
- 'FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE' |
58
- 'FST_ERR_DUPLICATED_ROUTE' |
59
- 'FST_ERR_BAD_URL' |
60
- 'FST_ERR_ASYNC_CONSTRAINT' |
61
- 'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE' |
62
- 'FST_ERR_INVALID_URL' |
63
- 'FST_ERR_ROUTE_OPTIONS_NOT_OBJ' |
64
- 'FST_ERR_ROUTE_DUPLICATED_HANDLER' |
65
- 'FST_ERR_ROUTE_HANDLER_NOT_FN' |
66
- 'FST_ERR_ROUTE_MISSING_HANDLER' |
67
- 'FST_ERR_ROUTE_METHOD_INVALID' |
68
- 'FST_ERR_ROUTE_METHOD_NOT_SUPPORTED' |
69
- 'FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED' |
70
- 'FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT' |
71
- 'FST_ERR_ROUTE_REWRITE_NOT_STR' |
72
- 'FST_ERR_REOPENED_CLOSE_SERVER' |
73
- 'FST_ERR_REOPENED_SERVER' |
74
- 'FST_ERR_INSTANCE_ALREADY_LISTENING' |
75
- 'FST_ERR_PLUGIN_VERSION_MISMATCH' |
76
- 'FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE' |
77
- 'FST_ERR_PLUGIN_CALLBACK_NOT_FN' |
78
- 'FST_ERR_PLUGIN_NOT_VALID' |
79
- 'FST_ERR_ROOT_PLG_BOOTED' |
80
- 'FST_ERR_PARENT_PLUGIN_BOOTED' |
81
- 'FST_ERR_PLUGIN_TIMEOUT'
82
- , FastifyErrorConstructor>
4
+ 'FST_ERR_NOT_FOUND' |
5
+ 'FST_ERR_OPTIONS_NOT_OBJ' |
6
+ 'FST_ERR_QSP_NOT_FN' |
7
+ 'FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN' |
8
+ 'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN' |
9
+ 'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ' |
10
+ 'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR' |
11
+ 'FST_ERR_VALIDATION' |
12
+ 'FST_ERR_CTP_ALREADY_PRESENT' |
13
+ 'FST_ERR_CTP_INVALID_TYPE' |
14
+ 'FST_ERR_CTP_EMPTY_TYPE' |
15
+ 'FST_ERR_CTP_INVALID_HANDLER' |
16
+ 'FST_ERR_CTP_INVALID_PARSE_TYPE' |
17
+ 'FST_ERR_CTP_BODY_TOO_LARGE' |
18
+ 'FST_ERR_CTP_INVALID_MEDIA_TYPE' |
19
+ 'FST_ERR_CTP_INVALID_CONTENT_LENGTH' |
20
+ 'FST_ERR_CTP_EMPTY_JSON_BODY' |
21
+ 'FST_ERR_CTP_INSTANCE_ALREADY_STARTED' |
22
+ 'FST_ERR_DEC_ALREADY_PRESENT' |
23
+ 'FST_ERR_DEC_DEPENDENCY_INVALID_TYPE' |
24
+ 'FST_ERR_DEC_MISSING_DEPENDENCY' |
25
+ 'FST_ERR_DEC_AFTER_START' |
26
+ 'FST_ERR_DEC_REFERENCE_TYPE' |
27
+ 'FST_ERR_HOOK_INVALID_TYPE' |
28
+ 'FST_ERR_HOOK_INVALID_HANDLER' |
29
+ 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER' |
30
+ 'FST_ERR_HOOK_NOT_SUPPORTED' |
31
+ 'FST_ERR_MISSING_MIDDLEWARE' |
32
+ 'FST_ERR_HOOK_TIMEOUT' |
33
+ 'FST_ERR_LOG_INVALID_DESTINATION' |
34
+ 'FST_ERR_LOG_INVALID_LOGGER' |
35
+ 'FST_ERR_REP_INVALID_PAYLOAD_TYPE' |
36
+ 'FST_ERR_REP_ALREADY_SENT' |
37
+ 'FST_ERR_REP_SENT_VALUE' |
38
+ 'FST_ERR_SEND_INSIDE_ONERR' |
39
+ 'FST_ERR_SEND_UNDEFINED_ERR' |
40
+ 'FST_ERR_BAD_STATUS_CODE' |
41
+ 'FST_ERR_BAD_TRAILER_NAME' |
42
+ 'FST_ERR_BAD_TRAILER_VALUE' |
43
+ 'FST_ERR_FAILED_ERROR_SERIALIZATION' |
44
+ 'FST_ERR_MISSING_SERIALIZATION_FN' |
45
+ 'FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN' |
46
+ 'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION' |
47
+ 'FST_ERR_SCH_MISSING_ID' |
48
+ 'FST_ERR_SCH_ALREADY_PRESENT' |
49
+ 'FST_ERR_SCH_CONTENT_MISSING_SCHEMA' |
50
+ 'FST_ERR_SCH_DUPLICATE' |
51
+ 'FST_ERR_SCH_VALIDATION_BUILD' |
52
+ 'FST_ERR_SCH_SERIALIZATION_BUILD' |
53
+ 'FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX' |
54
+ 'FST_ERR_HTTP2_INVALID_VERSION' |
55
+ 'FST_ERR_INIT_OPTS_INVALID' |
56
+ 'FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE' |
57
+ 'FST_ERR_DUPLICATED_ROUTE' |
58
+ 'FST_ERR_BAD_URL' |
59
+ 'FST_ERR_ASYNC_CONSTRAINT' |
60
+ 'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE' |
61
+ 'FST_ERR_INVALID_URL' |
62
+ 'FST_ERR_ROUTE_OPTIONS_NOT_OBJ' |
63
+ 'FST_ERR_ROUTE_DUPLICATED_HANDLER' |
64
+ 'FST_ERR_ROUTE_HANDLER_NOT_FN' |
65
+ 'FST_ERR_ROUTE_MISSING_HANDLER' |
66
+ 'FST_ERR_ROUTE_METHOD_INVALID' |
67
+ 'FST_ERR_ROUTE_METHOD_NOT_SUPPORTED' |
68
+ 'FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED' |
69
+ 'FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT' |
70
+ 'FST_ERR_ROUTE_REWRITE_NOT_STR' |
71
+ 'FST_ERR_REOPENED_CLOSE_SERVER' |
72
+ 'FST_ERR_REOPENED_SERVER' |
73
+ 'FST_ERR_INSTANCE_ALREADY_LISTENING' |
74
+ 'FST_ERR_PLUGIN_VERSION_MISMATCH' |
75
+ 'FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE' |
76
+ 'FST_ERR_PLUGIN_CALLBACK_NOT_FN' |
77
+ 'FST_ERR_PLUGIN_NOT_VALID' |
78
+ 'FST_ERR_ROOT_PLG_BOOTED' |
79
+ 'FST_ERR_PARENT_PLUGIN_BOOTED' |
80
+ 'FST_ERR_PLUGIN_TIMEOUT'
81
+ , FastifyErrorConstructor>
package/types/hooks.d.ts CHANGED
@@ -39,7 +39,7 @@ export interface onRequestHookHandler<
39
39
  (
40
40
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
41
41
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
42
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
42
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
43
43
  done: HookHandlerDoneFunction
44
44
  ): void;
45
45
  }
@@ -57,7 +57,7 @@ export interface onRequestAsyncHookHandler<
57
57
  (
58
58
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
59
59
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
60
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
60
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
61
61
  ): Promise<unknown>;
62
62
  }
63
63
 
@@ -96,7 +96,7 @@ export interface preParsingHookHandler<
96
96
  (
97
97
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
98
98
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
99
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
99
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
100
100
  payload: RequestPayload,
101
101
  done: <TError extends Error = FastifyError>(err?: TError | null, res?: RequestPayload) => void
102
102
  ): void;
@@ -115,7 +115,7 @@ export interface preParsingAsyncHookHandler<
115
115
  (
116
116
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
117
117
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
118
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
118
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
119
119
  payload: RequestPayload,
120
120
  ): Promise<RequestPayload | unknown>;
121
121
  }
@@ -154,7 +154,7 @@ export interface preValidationHookHandler<
154
154
  (
155
155
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
156
156
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
157
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
157
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
158
158
  done: HookHandlerDoneFunction
159
159
  ): void;
160
160
  }
@@ -172,7 +172,7 @@ export interface preValidationAsyncHookHandler<
172
172
  (
173
173
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
174
174
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
175
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
175
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
176
176
  ): Promise<unknown>;
177
177
  }
178
178
 
@@ -210,7 +210,7 @@ export interface preHandlerHookHandler<
210
210
  (
211
211
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
212
212
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
213
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
213
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
214
214
  done: HookHandlerDoneFunction
215
215
  ): void;
216
216
  }
@@ -228,7 +228,7 @@ export interface preHandlerAsyncHookHandler<
228
228
  (
229
229
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
230
230
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
231
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
231
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
232
232
  ): Promise<unknown>;
233
233
  }
234
234
 
@@ -275,7 +275,7 @@ export interface preSerializationHookHandler<
275
275
  (
276
276
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
277
277
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
278
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
278
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
279
279
  payload: PreSerializationPayload,
280
280
  done: DoneFuncWithErrOrRes
281
281
  ): void;
@@ -295,7 +295,7 @@ export interface preSerializationAsyncHookHandler<
295
295
  (
296
296
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
297
297
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
298
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
298
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
299
299
  payload: PreSerializationPayload
300
300
  ): Promise<unknown>;
301
301
  }
@@ -337,7 +337,7 @@ export interface onSendHookHandler<
337
337
  (
338
338
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
339
339
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
340
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
340
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
341
341
  payload: OnSendPayload,
342
342
  done: DoneFuncWithErrOrRes
343
343
  ): void;
@@ -357,7 +357,7 @@ export interface onSendAsyncHookHandler<
357
357
  (
358
358
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
359
359
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
360
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
360
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
361
361
  payload: OnSendPayload,
362
362
  ): Promise<unknown>;
363
363
  }
@@ -398,7 +398,7 @@ export interface onResponseHookHandler<
398
398
  (
399
399
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
400
400
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
401
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
401
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
402
402
  done: HookHandlerDoneFunction
403
403
  ): void;
404
404
  }
@@ -416,7 +416,7 @@ export interface onResponseAsyncHookHandler<
416
416
  (
417
417
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
418
418
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
419
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>
419
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>
420
420
  ): Promise<unknown>;
421
421
  }
422
422
 
@@ -455,7 +455,7 @@ export interface onTimeoutHookHandler<
455
455
  (
456
456
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
457
457
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
458
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
458
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
459
459
  done: HookHandlerDoneFunction
460
460
  ): void;
461
461
  }
@@ -473,7 +473,7 @@ export interface onTimeoutAsyncHookHandler<
473
473
  (
474
474
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
475
475
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
476
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>
476
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>
477
477
  ): Promise<unknown>;
478
478
  }
479
479
 
@@ -515,7 +515,7 @@ export interface onErrorHookHandler<
515
515
  (
516
516
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
517
517
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
518
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
518
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
519
519
  error: TError,
520
520
  done: () => void
521
521
  ): void;
@@ -535,7 +535,7 @@ export interface onErrorAsyncHookHandler<
535
535
  (
536
536
  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
537
537
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
538
- reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,
538
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>,
539
539
  error: TError
540
540
  ): Promise<unknown>;
541
541
  }
@@ -467,7 +467,7 @@ export interface FastifyInstance<
467
467
  * Set a function that will be called whenever an error happens
468
468
  */
469
469
  setErrorHandler<TError extends Error = FastifyError, RouteGeneric extends RouteGenericInterface = RouteGenericInterface, SchemaCompiler extends FastifySchema = FastifySchema, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault>(
470
- handler: (this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>, error: TError, request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfigDefault, SchemaCompiler, TypeProvider>) => any | Promise<any>
470
+ handler: (this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>, error: TError, request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfigDefault, SchemaCompiler, TypeProvider>) => any | Promise<any>
471
471
  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
472
472
 
473
473
  /**
package/types/logger.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { FastifyError } from '@fastify/error'
2
- import { RouteGenericInterface } from './route'
3
- import { FastifyRequest } from './request'
2
+ import { FastifyInstance } from './instance'
4
3
  import { FastifyReply } from './reply'
5
- import { RawServerBase, RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, ContextConfigDefault } from './utils'
6
- import { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'
4
+ import { FastifyRequest } from './request'
5
+ import { RouteGenericInterface } from './route'
7
6
  import { FastifySchema } from './schema'
8
- import { FastifyInstance } from './instance'
7
+ import { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'
8
+ import { ContextConfigDefault, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault } from './utils'
9
9
 
10
10
  import pino from 'pino'
11
11
 
@@ -42,7 +42,7 @@ export type PinoLoggerOptions = pino.LoggerOptions
42
42
  */
43
43
  export type ResSerializerReply<
44
44
  RawServer extends RawServerBase,
45
- RawReply extends FastifyReply<RawServer>
45
+ RawReply extends FastifyReply<RouteGenericInterface, RawServer>
46
46
  > = Partial<RawReply> & Pick<RawReply, 'statusCode'>
47
47
 
48
48
  /**
@@ -51,7 +51,7 @@ export type ResSerializerReply<
51
51
  export interface FastifyLoggerOptions<
52
52
  RawServer extends RawServerBase = RawServerDefault,
53
53
  RawRequest extends FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProvider> = FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProviderDefault>,
54
- RawReply extends FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault>
54
+ RawReply extends FastifyReply<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault>
55
55
  > {
56
56
  serializers?: {
57
57
  req?: (req: RawRequest) => {
package/types/reply.d.ts CHANGED
@@ -1,12 +1,11 @@
1
1
  import { Buffer } from 'buffer'
2
- import { FastifyReplyContext } from './context'
3
2
  import { FastifyInstance } from './instance'
4
3
  import { FastifyBaseLogger } from './logger'
5
- import { FastifyRequest } from './request'
4
+ import { FastifyRequest, RequestRouteOptions } from './request'
6
5
  import { RouteGenericInterface } from './route'
7
6
  import { FastifySchema } from './schema'
8
7
  import { CallSerializerTypeProvider, FastifyReplyType, FastifyTypeProvider, FastifyTypeProviderDefault, ResolveFastifyReplyType } from './type-provider'
9
- import { CodeToReplyKey, ContextConfigDefault, HttpKeys, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault, ReplyDefault, ReplyKeysToCodes, HttpHeader } from './utils'
8
+ import { CodeToReplyKey, ContextConfigDefault, HttpHeader, HttpKeys, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault, ReplyDefault, ReplyKeysToCodes } from './utils'
10
9
 
11
10
  export interface ReplyGenericInterface {
12
11
  Reply?: ReplyDefault;
@@ -31,42 +30,39 @@ export type ResolveReplyTypeWithRouteGeneric<RouteGenericReply, Code extends Rep
31
30
  * It defaults to http.ServerResponse, and it also extends the relative reply object.
32
31
  */
33
32
  export interface FastifyReply<
33
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
34
34
  RawServer extends RawServerBase = RawServerDefault,
35
35
  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
36
36
  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
37
- RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
38
37
  ContextConfig = ContextConfigDefault,
39
38
  SchemaCompiler extends FastifySchema = FastifySchema,
40
39
  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
41
40
  ReplyType extends FastifyReplyType = ResolveFastifyReplyType<TypeProvider, SchemaCompiler, RouteGeneric>
42
41
  > {
42
+ readonly routeOptions: Readonly<RequestRouteOptions<ContextConfig, SchemaCompiler>>
43
+
43
44
  raw: RawReply;
44
- context: FastifyReplyContext<ContextConfig>;
45
45
  elapsedTime: number;
46
46
  log: FastifyBaseLogger;
47
47
  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>;
48
48
  server: FastifyInstance;
49
- code<Code extends ReplyKeysToCodes<keyof RouteGeneric['Reply']>>(statusCode: Code): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, ResolveReplyTypeWithRouteGeneric<RouteGeneric['Reply'], Code, SchemaCompiler, TypeProvider>>;
50
- status<Code extends ReplyKeysToCodes<keyof RouteGeneric['Reply']>>(statusCode: Code): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, ResolveReplyTypeWithRouteGeneric<RouteGeneric['Reply'], Code, SchemaCompiler, TypeProvider>>;
49
+ code<Code extends ReplyKeysToCodes<keyof RouteGeneric['Reply']>>(statusCode: Code): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider, ResolveReplyTypeWithRouteGeneric<RouteGeneric['Reply'], Code, SchemaCompiler, TypeProvider>>;
50
+ status<Code extends ReplyKeysToCodes<keyof RouteGeneric['Reply']>>(statusCode: Code): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider, ResolveReplyTypeWithRouteGeneric<RouteGeneric['Reply'], Code, SchemaCompiler, TypeProvider>>;
51
51
  statusCode: number;
52
52
  sent: boolean;
53
- send(payload?: ReplyType): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
54
- header(key: HttpHeader, value: any): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
55
- headers(values: Partial<Record<HttpHeader, number | string | string[] | undefined>>): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
53
+ send(payload?: ReplyType): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
54
+ header(key: HttpHeader, value: any): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
55
+ headers(values: Partial<Record<HttpHeader, number | string | string[] | undefined>>): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
56
56
  getHeader(key: HttpHeader): number | string | string[] | undefined;
57
57
  getHeaders(): Record<HttpHeader, number | string | string[] | undefined>;
58
- removeHeader(key: HttpHeader): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
58
+ removeHeader(key: HttpHeader): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
59
59
  hasHeader(key: HttpHeader): boolean;
60
- /**
61
- * @deprecated The `reply.redirect()` method has a new signature: `reply.reply.redirect(url: string, code?: number)`. It will be enforced in `fastify@v5`'.
62
- */
63
- redirect(statusCode: number, url: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
64
- redirect(url: string, statusCode?: number): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
60
+ redirect(url: string, statusCode?: number): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
65
61
  writeEarlyHints(hints: Record<string, string | string[]>, callback?: () => void): void;
66
- hijack(): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
62
+ hijack(): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
67
63
  callNotFound(): void;
68
- type(contentType: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
69
- serializer(fn: (payload: any) => string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
64
+ type(contentType: string): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
65
+ serializer(fn: (payload: any) => string): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
70
66
  serialize(payload: any): string | ArrayBuffer | Buffer;
71
67
  // Serialization Methods
72
68
  getSerializationFunction(httpStatus: string, contentType?: string): ((payload: { [key: string]: unknown }) => string) | undefined;
@@ -77,8 +73,8 @@ export interface FastifyReply<
77
73
  then(fulfilled: () => void, rejected: (err: Error) => void): void;
78
74
  trailer: (
79
75
  key: string,
80
- fn: ((reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>, payload: string | Buffer | null) => Promise<string>) | ((reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>, payload: string | Buffer | null, done: (err: Error | null, value?: string) => void) => void)
81
- ) => FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
76
+ fn: ((reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>, payload: string | Buffer | null) => Promise<string>) | ((reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>, payload: string | Buffer | null, done: (err: Error | null, value?: string) => void) => void)
77
+ ) => FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
82
78
  hasTrailer(key: string): boolean;
83
- removeTrailer(key: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;
79
+ removeTrailer(key: string): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
84
80
  }