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
@@ -1,19 +1,17 @@
1
1
  import { Buffer } from 'buffer'
2
2
  import { expectAssignable, expectError, expectType } from 'tsd'
3
- import fastify, { FastifyReplyContext, FastifyReply, FastifyRequest, FastifySchema, FastifyTypeProviderDefault, RawRequestDefaultExpression, RouteHandler, RouteHandlerMethod } from '../../fastify'
3
+ import fastify, { FastifyContextConfig, 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'
7
- import { RouteGenericInterface } from '../../types/route'
7
+ import { FastifyRouteConfig, RouteGenericInterface } from '../../types/route'
8
8
  import { ContextConfigDefault, RawReplyDefaultExpression, RawServerDefault } from '../../types/utils'
9
9
 
10
10
  type DefaultSerializationFunction = (payload: { [key: string]: unknown }) => string
11
- type DefaultFastifyReplyWithCode<Code extends number> = FastifyReply<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault, ResolveReplyTypeWithRouteGeneric<RouteGenericInterface['Reply'], Code, FastifySchema, FastifyTypeProviderDefault>>
11
+ type DefaultFastifyReplyWithCode<Code extends number> = FastifyReply<RouteGenericInterface, RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault, ResolveReplyTypeWithRouteGeneric<RouteGenericInterface['Reply'], Code, FastifySchema, FastifyTypeProviderDefault>>
12
12
 
13
13
  const getHandler: RouteHandlerMethod = function (_request, reply) {
14
14
  expectType<RawReplyDefaultExpression>(reply.raw)
15
- expectType<FastifyReplyContext<ContextConfigDefault>>(reply.context)
16
- expectType<FastifyReplyContext<ContextConfigDefault>['config']>(reply.context.config)
17
15
  expectType<FastifyLoggerInstance>(reply.log)
18
16
  expectType<FastifyRequest<RouteGenericInterface, RawServerDefault, RawRequestDefaultExpression>>(reply.request)
19
17
  expectType<<Code extends number>(statusCode: Code) => DefaultFastifyReplyWithCode<Code>>(reply.code)
@@ -30,7 +28,7 @@ const getHandler: RouteHandlerMethod = function (_request, reply) {
30
28
  expectAssignable<() => { [key: string]: number | string | string[] | undefined }>(reply.getHeaders)
31
29
  expectAssignable<(key: string) => FastifyReply>(reply.removeHeader)
32
30
  expectAssignable<(key: string) => boolean>(reply.hasHeader)
33
- expectType<{ (statusCode: number, url: string): FastifyReply;(url: string, statusCode?: number): FastifyReply; }>(reply.redirect)
31
+ expectType<(url: string, statusCode?: number) => FastifyReply>(reply.redirect)
34
32
  expectType<() => FastifyReply>(reply.hijack)
35
33
  expectType<() => void>(reply.callNotFound)
36
34
  expectType<(contentType: string) => FastifyReply>(reply.type)
@@ -46,6 +44,7 @@ const getHandler: RouteHandlerMethod = function (_request, reply) {
46
44
  expectAssignable<((schema: { [key: string]: unknown }, httpStatus?: string) => DefaultSerializationFunction)>(reply.compileSerializationSchema)
47
45
  expectAssignable<((input: { [key: string]: unknown }, schema: { [key: string]: unknown }, httpStatus?: string) => unknown)>(reply.serializeInput)
48
46
  expectAssignable<((input: { [key: string]: unknown }, httpStatus: string) => unknown)>(reply.serializeInput)
47
+ expectType<ContextConfigDefault & FastifyRouteConfig & FastifyContextConfig>(reply.routeOptions.config)
49
48
  }
50
49
 
51
50
  interface ReplyPayload {
@@ -84,8 +83,8 @@ interface InvalidReplyHttpCodes {
84
83
  }
85
84
 
86
85
  const typedHandler: RouteHandler<ReplyPayload> = async (request, reply) => {
87
- expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>, ReplyPayload>)>(reply.send)
88
- expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>, ReplyPayload>)>(reply.code(100).send)
86
+ expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<ReplyPayload, RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>>)>(reply.send)
87
+ expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<ReplyPayload, RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>>)>(reply.code(100).send)
89
88
  }
90
89
 
91
90
  const server = fastify()
@@ -1,7 +1,6 @@
1
1
  import { expectAssignable, expectError, expectType } from 'tsd'
2
2
  import fastify, {
3
3
  ContextConfigDefault,
4
- FastifyRequestContext,
5
4
  FastifyContextConfig,
6
5
  FastifyLogFn,
7
6
  FastifySchema,
@@ -65,8 +64,6 @@ const getHandler: RouteHandler = function (request, _reply) {
65
64
  expectType<string>(request.url)
66
65
  expectType<string>(request.originalUrl)
67
66
  expectType<string>(request.method)
68
- expectType<string>(request.routerPath)
69
- expectType<string>(request.routerMethod)
70
67
  expectType<Readonly<RequestRouteOptions>>(request.routeOptions)
71
68
  expectType<boolean>(request.is404)
72
69
  expectType<string>(request.hostname)
@@ -77,12 +74,7 @@ const getHandler: RouteHandler = function (request, _reply) {
77
74
  expectType<RawRequestDefaultExpression>(request.raw)
78
75
  expectType<RequestBodyDefault>(request.body)
79
76
  expectType<RequestParamsDefault>(request.params)
80
- expectType<FastifyRequestContext<ContextConfigDefault>>(request.context)
81
- expectType<FastifyRequestContext<ContextConfigDefault>['config']>(request.context.config)
82
- expectType<FastifyRequestContext<ContextConfigDefault>['config']>(request.routeConfig)
83
- expectType<FastifyRequestContext<ContextConfigDefault>['config']>(request.routeOptions.config)
84
77
  expectType<ContextConfigDefault & FastifyRouteConfig & FastifyContextConfig>(request.routeOptions.config)
85
- expectType<FastifySchema | undefined>(request.routeSchema)
86
78
  expectType<FastifySchema | undefined>(request.routeOptions.schema)
87
79
  expectType<RouteHandlerMethod>(request.routeOptions.handler)
88
80
  expectType<string | undefined>(request.routeOptions.url)
@@ -116,8 +108,7 @@ const postHandler: Handler = function (request) {
116
108
  expectType<number>(request.params.id)
117
109
  expectType<string>(request.headers['x-foobar'])
118
110
  expectType<FastifyInstance>(request.server)
119
- expectType<FastifyRequestContext<ContextConfigDefault>>(request.context)
120
- expectType<FastifyRequestContext<ContextConfigDefault>['config']>(request.context.config)
111
+ expectType<FastifyContextConfig & FastifyRouteConfig>(request.routeOptions.config)
121
112
  }
122
113
 
123
114
  function putHandler (request: CustomRequest, reply: FastifyReply) {
@@ -134,8 +125,7 @@ function putHandler (request: CustomRequest, reply: FastifyReply) {
134
125
  expectType<number>(request.params.id)
135
126
  expectType<string>(request.headers['x-foobar'])
136
127
  expectType<FastifyInstance>(request.server)
137
- expectType<FastifyRequestContext<ContextConfigDefault>>(request.context)
138
- expectType<FastifyRequestContext<ContextConfigDefault>['config']>(request.context.config)
128
+ expectType<ContextConfigDefault & FastifyRouteConfig & FastifyContextConfig>(request.routeOptions.config)
139
129
  }
140
130
 
141
131
  const server = fastify()
@@ -61,10 +61,10 @@ fastify().get(
61
61
  )
62
62
 
63
63
  type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put' |
64
- 'options' | 'propfind' | 'proppatch' | 'mkcol' | 'copy' | 'move' | 'lock' |
65
- 'unlock' | 'trace' | 'search' | 'mkcalendar' | 'report'
64
+ 'options' | 'propfind' | 'proppatch' | 'mkcol' | 'copy' | 'move' | 'lock' |
65
+ 'unlock' | 'trace' | 'search' | 'mkcalendar' | 'report'
66
66
 
67
- ;['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT', 'OPTIONS', 'PROPFIND',
67
+ ;['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT', 'OPTIONS', 'PROPFIND',
68
68
  'PROPPATCH', 'MKCOL', 'COPY', 'MOVE', 'LOCK', 'UNLOCK', 'TRACE', 'SEARCH', 'MKCALENDAR', 'REPORT'
69
69
  ].forEach(method => {
70
70
  // route method
@@ -111,16 +111,16 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
111
111
  expectType<QuerystringInterface>(req.query)
112
112
  expectType<ParamsInterface>(req.params)
113
113
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
114
- expectType<string>(req.context.config.foo)
115
- expectType<number>(req.context.config.bar)
116
- expectType<boolean>(req.context.config.extra)
117
- expectType<string>(req.context.config.url)
118
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
119
- expectType<string>(res.context.config.foo)
120
- expectType<number>(res.context.config.bar)
121
- expectType<boolean>(res.context.config.extra)
122
- expectType<string>(req.routeConfig.url)
123
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
114
+ expectType<string>(req.routeOptions.config.foo)
115
+ expectType<number>(req.routeOptions.config.bar)
116
+ expectType<boolean>(req.routeOptions.config.extra)
117
+ expectType<string>(req.routeOptions.config.url)
118
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
119
+ expectType<string>(res.routeOptions.config.foo)
120
+ expectType<number>(res.routeOptions.config.bar)
121
+ expectType<boolean>(res.routeOptions.config.extra)
122
+ expectType<string>(req.routeOptions.config.url)
123
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
124
124
  })
125
125
 
126
126
  fastify().route<RouteGeneric>({
@@ -133,28 +133,28 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
133
133
  expectType<QuerystringInterface>(req.query)
134
134
  expectType<ParamsInterface>(req.params)
135
135
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
136
- expectType<string>(req.context.config.foo)
137
- expectType<number>(req.context.config.bar)
138
- expectType<string>(req.context.config.url)
139
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
140
- expectType<string>(res.context.config.foo)
141
- expectType<number>(res.context.config.bar)
142
- expectType<string>(req.routeConfig.url)
143
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
136
+ expectType<string>(req.routeOptions.config.foo)
137
+ expectType<number>(req.routeOptions.config.bar)
138
+ expectType<string>(req.routeOptions.config.url)
139
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
140
+ expectType<string>(res.routeOptions.config.foo)
141
+ expectType<number>(res.routeOptions.config.bar)
142
+ expectType<string>(req.routeOptions.config.url)
143
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
144
144
  },
145
145
  preParsing: (req, res, payload, done) => {
146
146
  expectType<BodyInterface>(req.body)
147
147
  expectType<QuerystringInterface>(req.query)
148
148
  expectType<ParamsInterface>(req.params)
149
149
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
150
- expectType<string>(req.context.config.foo)
151
- expectType<number>(req.context.config.bar)
152
- expectType<string>(req.context.config.url)
153
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
154
- expectType<string>(res.context.config.foo)
155
- expectType<number>(res.context.config.bar)
156
- expectType<string>(req.routeConfig.url)
157
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
150
+ expectType<string>(req.routeOptions.config.foo)
151
+ expectType<number>(req.routeOptions.config.bar)
152
+ expectType<string>(req.routeOptions.config.url)
153
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
154
+ expectType<string>(res.routeOptions.config.foo)
155
+ expectType<number>(res.routeOptions.config.bar)
156
+ expectType<string>(req.routeOptions.config.url)
157
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
158
158
  expectType<RequestPayload>(payload)
159
159
  expectAssignable<(err?: FastifyError | null, res?: RequestPayload) => void>(done)
160
160
  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)
@@ -164,42 +164,42 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
164
164
  expectType<QuerystringInterface>(req.query)
165
165
  expectType<ParamsInterface>(req.params)
166
166
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
167
- expectType<string>(req.context.config.foo)
168
- expectType<number>(req.context.config.bar)
169
- expectType<string>(req.context.config.url)
170
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
171
- expectType<string>(res.context.config.foo)
172
- expectType<number>(res.context.config.bar)
173
- expectType<string>(req.routeConfig.url)
174
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
167
+ expectType<string>(req.routeOptions.config.foo)
168
+ expectType<number>(req.routeOptions.config.bar)
169
+ expectType<string>(req.routeOptions.config.url)
170
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
171
+ expectType<string>(res.routeOptions.config.foo)
172
+ expectType<number>(res.routeOptions.config.bar)
173
+ expectType<string>(req.routeOptions.config.url)
174
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
175
175
  },
176
176
  preHandler: (req, res, done) => {
177
177
  expectType<BodyInterface>(req.body)
178
178
  expectType<QuerystringInterface>(req.query)
179
179
  expectType<ParamsInterface>(req.params)
180
180
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
181
- expectType<string>(req.context.config.foo)
182
- expectType<number>(req.context.config.bar)
183
- expectType<string>(req.context.config.url)
184
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
185
- expectType<string>(res.context.config.foo)
186
- expectType<number>(res.context.config.bar)
187
- expectType<string>(req.routeConfig.url)
188
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
181
+ expectType<string>(req.routeOptions.config.foo)
182
+ expectType<number>(req.routeOptions.config.bar)
183
+ expectType<string>(req.routeOptions.config.url)
184
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
185
+ expectType<string>(res.routeOptions.config.foo)
186
+ expectType<number>(res.routeOptions.config.bar)
187
+ expectType<string>(req.routeOptions.config.url)
188
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
189
189
  },
190
190
  onResponse: (req, res, done) => {
191
191
  expectType<BodyInterface>(req.body)
192
192
  expectType<QuerystringInterface>(req.query)
193
193
  expectType<ParamsInterface>(req.params)
194
194
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
195
- expectType<string>(req.context.config.foo)
196
- expectType<number>(req.context.config.bar)
197
- expectType<string>(req.context.config.url)
198
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
199
- expectType<string>(res.context.config.foo)
200
- expectType<number>(res.context.config.bar)
201
- expectType<string>(req.routeConfig.url)
202
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
195
+ expectType<string>(req.routeOptions.config.foo)
196
+ expectType<number>(req.routeOptions.config.bar)
197
+ expectType<string>(req.routeOptions.config.url)
198
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
199
+ expectType<string>(res.routeOptions.config.foo)
200
+ expectType<number>(res.routeOptions.config.bar)
201
+ expectType<string>(req.routeOptions.config.url)
202
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
203
203
  expectType<number>(res.statusCode)
204
204
  },
205
205
  onError: (req, res, error, done) => {
@@ -207,56 +207,56 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
207
207
  expectType<QuerystringInterface>(req.query)
208
208
  expectType<ParamsInterface>(req.params)
209
209
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
210
- expectType<string>(req.context.config.foo)
211
- expectType<number>(req.context.config.bar)
212
- expectType<string>(req.context.config.url)
213
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
214
- expectType<string>(res.context.config.foo)
215
- expectType<number>(res.context.config.bar)
216
- expectType<string>(req.routeConfig.url)
217
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
210
+ expectType<string>(req.routeOptions.config.foo)
211
+ expectType<number>(req.routeOptions.config.bar)
212
+ expectType<string>(req.routeOptions.config.url)
213
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
214
+ expectType<string>(res.routeOptions.config.foo)
215
+ expectType<number>(res.routeOptions.config.bar)
216
+ expectType<string>(req.routeOptions.config.url)
217
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
218
218
  },
219
219
  preSerialization: (req, res, payload, done) => {
220
220
  expectType<BodyInterface>(req.body)
221
221
  expectType<QuerystringInterface>(req.query)
222
222
  expectType<ParamsInterface>(req.params)
223
223
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
224
- expectType<string>(req.context.config.foo)
225
- expectType<number>(req.context.config.bar)
226
- expectType<string>(req.context.config.url)
227
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
228
- expectType<string>(res.context.config.foo)
229
- expectType<number>(res.context.config.bar)
230
- expectType<string>(req.routeConfig.url)
231
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
224
+ expectType<string>(req.routeOptions.config.foo)
225
+ expectType<number>(req.routeOptions.config.bar)
226
+ expectType<string>(req.routeOptions.config.url)
227
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
228
+ expectType<string>(res.routeOptions.config.foo)
229
+ expectType<number>(res.routeOptions.config.bar)
230
+ expectType<string>(req.routeOptions.config.url)
231
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
232
232
  },
233
233
  onSend: (req, res, payload, done) => {
234
234
  expectType<BodyInterface>(req.body)
235
235
  expectType<QuerystringInterface>(req.query)
236
236
  expectType<ParamsInterface>(req.params)
237
237
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
238
- expectType<string>(req.context.config.foo)
239
- expectType<number>(req.context.config.bar)
240
- expectType<string>(req.context.config.url)
241
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
242
- expectType<string>(res.context.config.foo)
243
- expectType<number>(res.context.config.bar)
244
- expectType<string>(req.routeConfig.url)
245
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
238
+ expectType<string>(req.routeOptions.config.foo)
239
+ expectType<number>(req.routeOptions.config.bar)
240
+ expectType<string>(req.routeOptions.config.url)
241
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
242
+ expectType<string>(res.routeOptions.config.foo)
243
+ expectType<number>(res.routeOptions.config.bar)
244
+ expectType<string>(req.routeOptions.config.url)
245
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
246
246
  },
247
247
  handler: (req, res) => {
248
248
  expectType<BodyInterface>(req.body)
249
249
  expectType<QuerystringInterface>(req.query)
250
250
  expectType<ParamsInterface>(req.params)
251
251
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
252
- expectType<string>(req.context.config.foo)
253
- expectType<number>(req.context.config.bar)
254
- expectType<string>(req.context.config.url)
255
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
256
- expectType<string>(res.context.config.foo)
257
- expectType<number>(res.context.config.bar)
258
- expectType<string>(req.routeConfig.url)
259
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
252
+ expectType<string>(req.routeOptions.config.foo)
253
+ expectType<number>(req.routeOptions.config.bar)
254
+ expectType<string>(req.routeOptions.config.url)
255
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
256
+ expectType<string>(res.routeOptions.config.foo)
257
+ expectType<number>(res.routeOptions.config.bar)
258
+ expectType<string>(req.routeOptions.config.url)
259
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
260
260
  }
261
261
  })
262
262
 
@@ -270,28 +270,28 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
270
270
  expectType<QuerystringInterface>(req.query)
271
271
  expectType<ParamsInterface>(req.params)
272
272
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
273
- expectType<string>(req.context.config.foo)
274
- expectType<number>(req.context.config.bar)
275
- expectType<string>(req.context.config.url)
276
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
277
- expectType<string>(res.context.config.foo)
278
- expectType<number>(res.context.config.bar)
279
- expectType<string>(req.routeConfig.url)
280
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
273
+ expectType<string>(req.routeOptions.config.foo)
274
+ expectType<number>(req.routeOptions.config.bar)
275
+ expectType<string>(req.routeOptions.config.url)
276
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
277
+ expectType<string>(res.routeOptions.config.foo)
278
+ expectType<number>(res.routeOptions.config.bar)
279
+ expectType<string>(req.routeOptions.config.url)
280
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
281
281
  },
282
282
  preParsing: async (req, res, payload, done) => {
283
283
  expectType<BodyInterface>(req.body)
284
284
  expectType<QuerystringInterface>(req.query)
285
285
  expectType<ParamsInterface>(req.params)
286
286
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
287
- expectType<string>(req.context.config.foo)
288
- expectType<number>(req.context.config.bar)
289
- expectType<string>(req.context.config.url)
290
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
291
- expectType<string>(res.context.config.foo)
292
- expectType<number>(res.context.config.bar)
293
- expectType<string>(req.routeConfig.url)
294
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
287
+ expectType<string>(req.routeOptions.config.foo)
288
+ expectType<number>(req.routeOptions.config.bar)
289
+ expectType<string>(req.routeOptions.config.url)
290
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
291
+ expectType<string>(res.routeOptions.config.foo)
292
+ expectType<number>(res.routeOptions.config.bar)
293
+ expectType<string>(req.routeOptions.config.url)
294
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
295
295
  expectType<RequestPayload>(payload)
296
296
  expectAssignable<(err?: FastifyError | null, res?: RequestPayload) => void>(done)
297
297
  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)
@@ -301,42 +301,42 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
301
301
  expectType<QuerystringInterface>(req.query)
302
302
  expectType<ParamsInterface>(req.params)
303
303
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
304
- expectType<string>(req.context.config.foo)
305
- expectType<number>(req.context.config.bar)
306
- expectType<string>(req.context.config.url)
307
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
308
- expectType<string>(res.context.config.foo)
309
- expectType<number>(res.context.config.bar)
310
- expectType<string>(req.routeConfig.url)
311
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
304
+ expectType<string>(req.routeOptions.config.foo)
305
+ expectType<number>(req.routeOptions.config.bar)
306
+ expectType<string>(req.routeOptions.config.url)
307
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
308
+ expectType<string>(res.routeOptions.config.foo)
309
+ expectType<number>(res.routeOptions.config.bar)
310
+ expectType<string>(req.routeOptions.config.url)
311
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
312
312
  },
313
313
  preHandler: async (req, res, done) => {
314
314
  expectType<BodyInterface>(req.body)
315
315
  expectType<QuerystringInterface>(req.query)
316
316
  expectType<ParamsInterface>(req.params)
317
317
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
318
- expectType<string>(req.context.config.foo)
319
- expectType<number>(req.context.config.bar)
320
- expectType<string>(req.context.config.url)
321
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
322
- expectType<string>(res.context.config.foo)
323
- expectType<number>(res.context.config.bar)
324
- expectType<string>(req.routeConfig.url)
325
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
318
+ expectType<string>(req.routeOptions.config.foo)
319
+ expectType<number>(req.routeOptions.config.bar)
320
+ expectType<string>(req.routeOptions.config.url)
321
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
322
+ expectType<string>(res.routeOptions.config.foo)
323
+ expectType<number>(res.routeOptions.config.bar)
324
+ expectType<string>(req.routeOptions.config.url)
325
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
326
326
  },
327
327
  onResponse: async (req, res, done) => {
328
328
  expectType<BodyInterface>(req.body)
329
329
  expectType<QuerystringInterface>(req.query)
330
330
  expectType<ParamsInterface>(req.params)
331
331
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
332
- expectType<string>(req.context.config.foo)
333
- expectType<number>(req.context.config.bar)
334
- expectType<string>(req.context.config.url)
335
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
336
- expectType<string>(res.context.config.foo)
337
- expectType<number>(res.context.config.bar)
338
- expectType<string>(req.routeConfig.url)
339
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
332
+ expectType<string>(req.routeOptions.config.foo)
333
+ expectType<number>(req.routeOptions.config.bar)
334
+ expectType<string>(req.routeOptions.config.url)
335
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
336
+ expectType<string>(res.routeOptions.config.foo)
337
+ expectType<number>(res.routeOptions.config.bar)
338
+ expectType<string>(req.routeOptions.config.url)
339
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
340
340
  expectType<number>(res.statusCode)
341
341
  },
342
342
  onError: async (req, res, error, done) => {
@@ -344,56 +344,56 @@ type LowerCaseHTTPMethods = 'delete' | 'get' | 'head' | 'patch' | 'post' | 'put'
344
344
  expectType<QuerystringInterface>(req.query)
345
345
  expectType<ParamsInterface>(req.params)
346
346
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
347
- expectType<string>(req.context.config.foo)
348
- expectType<number>(req.context.config.bar)
349
- expectType<string>(req.context.config.url)
350
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
351
- expectType<string>(res.context.config.foo)
352
- expectType<number>(res.context.config.bar)
353
- expectType<string>(req.routeConfig.url)
354
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
347
+ expectType<string>(req.routeOptions.config.foo)
348
+ expectType<number>(req.routeOptions.config.bar)
349
+ expectType<string>(req.routeOptions.config.url)
350
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
351
+ expectType<string>(res.routeOptions.config.foo)
352
+ expectType<number>(res.routeOptions.config.bar)
353
+ expectType<string>(req.routeOptions.config.url)
354
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
355
355
  },
356
356
  preSerialization: async (req, res, payload, done) => {
357
357
  expectType<BodyInterface>(req.body)
358
358
  expectType<QuerystringInterface>(req.query)
359
359
  expectType<ParamsInterface>(req.params)
360
360
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
361
- expectType<string>(req.context.config.foo)
362
- expectType<number>(req.context.config.bar)
363
- expectType<string>(req.context.config.url)
364
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
365
- expectType<string>(res.context.config.foo)
366
- expectType<number>(res.context.config.bar)
367
- expectType<string>(req.routeConfig.url)
368
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
361
+ expectType<string>(req.routeOptions.config.foo)
362
+ expectType<number>(req.routeOptions.config.bar)
363
+ expectType<string>(req.routeOptions.config.url)
364
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
365
+ expectType<string>(res.routeOptions.config.foo)
366
+ expectType<number>(res.routeOptions.config.bar)
367
+ expectType<string>(req.routeOptions.config.url)
368
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
369
369
  },
370
370
  onSend: async (req, res, payload, done) => {
371
371
  expectType<BodyInterface>(req.body)
372
372
  expectType<QuerystringInterface>(req.query)
373
373
  expectType<ParamsInterface>(req.params)
374
374
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
375
- expectType<string>(req.context.config.foo)
376
- expectType<number>(req.context.config.bar)
377
- expectType<string>(req.context.config.url)
378
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
379
- expectType<string>(res.context.config.foo)
380
- expectType<number>(res.context.config.bar)
381
- expectType<string>(req.routeConfig.url)
382
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
375
+ expectType<string>(req.routeOptions.config.foo)
376
+ expectType<number>(req.routeOptions.config.bar)
377
+ expectType<string>(req.routeOptions.config.url)
378
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
379
+ expectType<string>(res.routeOptions.config.foo)
380
+ expectType<number>(res.routeOptions.config.bar)
381
+ expectType<string>(req.routeOptions.config.url)
382
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
383
383
  },
384
384
  handler: (req, res) => {
385
385
  expectType<BodyInterface>(req.body)
386
386
  expectType<QuerystringInterface>(req.query)
387
387
  expectType<ParamsInterface>(req.params)
388
388
  expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)
389
- expectType<string>(req.context.config.foo)
390
- expectType<number>(req.context.config.bar)
391
- expectType<string>(req.context.config.url)
392
- expectType<HTTPMethods | HTTPMethods[]>(req.context.config.method)
393
- expectType<string>(res.context.config.foo)
394
- expectType<number>(res.context.config.bar)
395
- expectType<string>(req.routeConfig.url)
396
- expectType<HTTPMethods | HTTPMethods[]>(req.routeConfig.method)
389
+ expectType<string>(req.routeOptions.config.foo)
390
+ expectType<number>(req.routeOptions.config.bar)
391
+ expectType<string>(req.routeOptions.config.url)
392
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
393
+ expectType<string>(res.routeOptions.config.foo)
394
+ expectType<number>(res.routeOptions.config.bar)
395
+ expectType<string>(req.routeOptions.config.url)
396
+ expectType<HTTPMethods | HTTPMethods[]>(req.routeOptions.config.method)
397
397
  }
398
398
  })
399
399
  })
@@ -477,7 +477,7 @@ expectType<boolean>(fastify().hasRoute({
477
477
  number: 12,
478
478
  date: new Date(),
479
479
  boolean: true,
480
- function: () => {},
480
+ function: () => { },
481
481
  object: { foo: 'bar' }
482
482
  }
483
483
  }))
@@ -1,8 +1,8 @@
1
- import { expectAssignable } from 'tsd'
2
- import fastify, { FastifyInstance, FastifySchema } from '../../fastify'
3
- import Ajv from 'ajv'
4
1
  import { StandaloneValidator } from '@fastify/ajv-compiler'
5
2
  import { StandaloneSerializer } from '@fastify/fast-json-stringify-compiler'
3
+ import Ajv from 'ajv'
4
+ import { expectAssignable } from 'tsd'
5
+ import fastify, { FastifyInstance, FastifySchema } from '../../fastify'
6
6
 
7
7
  const server = fastify()
8
8
 
@@ -20,6 +20,25 @@ expectAssignable<FastifyInstance>(server.get(
20
20
  () => { }
21
21
  ))
22
22
 
23
+ expectAssignable<FastifyInstance>(server.post(
24
+ '/multiple-content-schema',
25
+ {
26
+ schema: {
27
+ body: {
28
+ content: {
29
+ 'application/json': {
30
+ schema: { type: 'object' }
31
+ },
32
+ 'text/plain': {
33
+ schema: { type: 'string' }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ },
39
+ () => { }
40
+ ))
41
+
23
42
  expectAssignable<FastifyInstance>(server.get(
24
43
  '/empty-schema',
25
44
  {
@@ -71,7 +90,6 @@ expectAssignable<FastifyInstance>(server.setSerializerCompiler<FastifySchema & {
71
90
  })
72
91
 
73
92
  fastify({
74
- jsonShorthand: false,
75
93
  schemaController: {
76
94
  compilersFactory: {
77
95
  buildValidator: factory
@@ -87,7 +105,6 @@ expectAssignable<FastifyInstance>(server.setSerializerCompiler<FastifySchema & {
87
105
  })
88
106
 
89
107
  fastify({
90
- jsonShorthand: false,
91
108
  schemaController: {
92
109
  compilersFactory: {
93
110
  buildSerializer: factory