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
package/lib/warnings.js CHANGED
@@ -1,91 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const { createDeprecation, createWarning } = require('process-warning')
3
+ const { createWarning } = require('process-warning')
4
4
 
5
5
  /**
6
6
  * Deprecation codes:
7
- * - FSTDEP005
8
- * - FSTDEP007
9
- * - FSTDEP008
10
- * - FSTDEP009
11
- * - FSTDEP010
12
- * - FSTDEP012
13
- * - FSTDEP013
14
- * - FSTDEP015
15
- * - FSTDEP016
16
- * - FSTDEP017
17
- * - FSTDEP018
18
- * - FSTDEP019
19
- * - FSTDEP021
20
7
  * - FSTWRN001
21
8
  * - FSTSEC001
22
9
  */
23
10
 
24
- const FSTDEP005 = createDeprecation({
25
- code: 'FSTDEP005',
26
- message: 'You are accessing the deprecated "request.connection" property. Use "request.socket" instead.'
27
- })
28
-
29
- const FSTDEP007 = createDeprecation({
30
- code: 'FSTDEP007',
31
- message: 'You are trying to set a HEAD route using "exposeHeadRoute" route flag when a sibling route is already set. See documentation for more info.'
32
- })
33
-
34
- const FSTDEP008 = createDeprecation({
35
- code: 'FSTDEP008',
36
- message: 'You are using route constraints via the route { version: "..." } option, use { constraints: { version: "..." } } option instead.'
37
- })
38
-
39
- const FSTDEP009 = createDeprecation({
40
- code: 'FSTDEP009',
41
- message: 'You are using a custom route versioning strategy via the server { versioning: "..." } option, use { constraints: { version: "..." } } option instead.'
42
- })
43
-
44
- const FSTDEP010 = createDeprecation({
45
- code: 'FSTDEP010',
46
- message: 'Modifying the "reply.sent" property is deprecated. Use the "reply.hijack()" method instead.'
47
- })
48
-
49
- const FSTDEP012 = createDeprecation({
50
- code: 'FSTDEP012',
51
- message: 'request.context property access is deprecated. Please use "request.routeOptions.config" or "request.routeOptions.schema" instead for accessing Route settings. The "request.context" will be removed in `fastify@5`.'
52
- })
53
-
54
- const FSTDEP013 = createDeprecation({
55
- code: 'FSTDEP013',
56
- message: 'Direct return of "trailers" function is deprecated. Please use "callback" or "async-await" for return value. The support of direct return will removed in `fastify@5`.'
57
- })
58
-
59
- const FSTDEP015 = createDeprecation({
60
- code: 'FSTDEP015',
61
- message: 'You are accessing the deprecated "request.routeSchema" property. Use "request.routeOptions.schema" instead. Property "req.routeSchema" will be removed in `fastify@5`.'
62
- })
63
-
64
- const FSTDEP016 = createDeprecation({
65
- code: 'FSTDEP016',
66
- message: 'You are accessing the deprecated "request.routeConfig" property. Use "request.routeOptions.config" instead. Property "req.routeConfig" will be removed in `fastify@5`.'
67
- })
68
-
69
- const FSTDEP017 = createDeprecation({
70
- code: 'FSTDEP017',
71
- message: 'You are accessing the deprecated "request.routerPath" property. Use "request.routeOptions.url" instead. Property "req.routerPath" will be removed in `fastify@5`.'
72
- })
73
-
74
- const FSTDEP018 = createDeprecation({
75
- code: 'FSTDEP018',
76
- message: 'You are accessing the deprecated "request.routerMethod" property. Use "request.routeOptions.method" instead. Property "req.routerMethod" will be removed in `fastify@5`.'
77
- })
78
-
79
- const FSTDEP019 = createDeprecation({
80
- code: 'FSTDEP019',
81
- message: 'reply.context property access is deprecated. Please use "request.routeOptions.config" or "request.routeOptions.schema" instead for accessing Route settings. The "reply.context" will be removed in `fastify@5`.'
82
- })
83
-
84
- const FSTDEP021 = createDeprecation({
85
- code: 'FSTDEP021',
86
- message: 'The `reply.redirect()` method has a new signature: `reply.redirect(url: string, code?: number)`. It will be enforced in `fastify@v5`'
87
- })
88
-
89
11
  const FSTWRN001 = createWarning({
90
12
  name: 'FastifyWarning',
91
13
  code: 'FSTWRN001',
@@ -101,19 +23,6 @@ const FSTSEC001 = createWarning({
101
23
  })
102
24
 
103
25
  module.exports = {
104
- FSTDEP005,
105
- FSTDEP007,
106
- FSTDEP008,
107
- FSTDEP009,
108
- FSTDEP010,
109
- FSTDEP012,
110
- FSTDEP013,
111
- FSTDEP015,
112
- FSTDEP016,
113
- FSTDEP017,
114
- FSTDEP018,
115
- FSTDEP019,
116
- FSTDEP021,
117
26
  FSTWRN001,
118
27
  FSTSEC001
119
28
  }
@@ -5,7 +5,7 @@ const {
5
5
  kReplyHijacked
6
6
  } = require('./symbols')
7
7
 
8
- const diagnostics = require('dc-polyfill')
8
+ const diagnostics = require('node:diagnostics_channel')
9
9
  const channels = diagnostics.tracingChannel('fastify.request.handler')
10
10
 
11
11
  function wrapThenable (thenable, reply, store) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fastify",
3
- "version": "5.0.0-alpha.2",
3
+ "version": "5.0.0-alpha.4",
4
4
  "description": "Fast and low overhead web framework, for Node.js",
5
5
  "main": "fastify.js",
6
6
  "type": "commonjs",
@@ -22,7 +22,7 @@
22
22
  "test:ci": "npm run unit -- --coverage-report=lcovonly && npm run test:typescript",
23
23
  "test:report": "npm run lint && npm run unit:report && npm run test:typescript",
24
24
  "test:validator:integrity": "npm run build:validation && git diff --quiet --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol lib/error-serializer.js && git diff --quiet --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol lib/configValidator.js",
25
- "test:typescript": "tsc test/types/import.ts && tsd",
25
+ "test:typescript": "tsc test/types/import.ts --noEmit && tsd",
26
26
  "test:watch": "npm run unit -- --watch --coverage-report=none --reporter=terse",
27
27
  "unit": "tap",
28
28
  "unit:junit": "tap-mocha-reporter xunit < out.tap > test/junit-testresults.xml",
@@ -152,11 +152,11 @@
152
152
  ],
153
153
  "devDependencies": {
154
154
  "@fastify/pre-commit": "^2.1.0",
155
- "@sinclair/typebox": "^0.32.22",
155
+ "@sinclair/typebox": "^0.33.4",
156
156
  "@sinonjs/fake-timers": "^11.2.2",
157
157
  "@stylistic/eslint-plugin": "^2.1.0",
158
158
  "@stylistic/eslint-plugin-js": "^2.1.0",
159
- "@types/node": "^20.12.7",
159
+ "@types/node": "^22.0.0",
160
160
  "ajv": "^8.12.0",
161
161
  "ajv-errors": "^3.0.0",
162
162
  "ajv-formats": "^3.0.1",
@@ -169,20 +169,20 @@
169
169
  "eslint": "^9.0.0",
170
170
  "fast-json-body": "^1.1.0",
171
171
  "fastify-plugin": "^4.5.1",
172
- "fluent-json-schema": "^4.2.1",
172
+ "fluent-json-schema": "^5.0.0",
173
173
  "h2url": "^0.2.0",
174
174
  "http-errors": "^2.0.0",
175
175
  "joi": "^17.12.3",
176
176
  "json-schema-to-ts": "^3.0.1",
177
177
  "JSONStream": "^1.3.5",
178
178
  "markdownlint-cli2": "^0.13.0",
179
- "neostandard": "^0.7.0",
179
+ "neostandard": "^0.11.3",
180
180
  "node-forge": "^1.3.1",
181
181
  "proxyquire": "^2.1.3",
182
182
  "send": "^0.18.0",
183
183
  "simple-get": "^4.0.1",
184
184
  "split2": "^4.2.0",
185
- "tap": "^19.0.0",
185
+ "tap": "^21.0.0",
186
186
  "tsd": "^0.31.0",
187
187
  "typescript": "^5.4.5",
188
188
  "undici": "^6.13.0",
@@ -190,17 +190,16 @@
190
190
  "yup": "^1.4.0"
191
191
  },
192
192
  "dependencies": {
193
- "@fastify/ajv-compiler": "^3.5.0",
194
- "@fastify/error": "^3.4.1",
193
+ "@fastify/ajv-compiler": "^4.0.0",
194
+ "@fastify/error": "^4.0.0",
195
195
  "@fastify/fast-json-stringify-compiler": "^4.3.0",
196
196
  "abstract-logging": "^2.0.1",
197
- "avvio": "^8.3.0",
198
- "dc-polyfill": "^0.1.6",
199
- "fast-json-stringify": "^5.14.1",
200
- "find-my-way": "^8.1.0",
201
- "light-my-request": "^5.13.0",
197
+ "avvio": "^9.0.0",
198
+ "fast-json-stringify": "^6.0.0",
199
+ "find-my-way": "^9.0.0",
200
+ "light-my-request": "^6.0.0",
202
201
  "pino": "^9.0.0",
203
- "process-warning": "^3.0.0",
202
+ "process-warning": "^4.0.0",
204
203
  "proxy-addr": "^2.0.7",
205
204
  "rfdc": "^1.3.1",
206
205
  "secure-json-parse": "^2.7.0",
@@ -639,7 +639,7 @@ test('should register empty values', t => {
639
639
 
640
640
  fastify.register((instance, opts, done) => {
641
641
  instance.decorate('test', null)
642
- t.ok(Object.prototype.hasOwnProperty.call(instance, 'test'))
642
+ t.ok(Object.hasOwn(instance, 'test'))
643
643
  done()
644
644
  })
645
645
 
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  require('../../lib/hooks').onSendHookRunner = function Stub () {}
7
7
  const Request = require('../../lib/request')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -4,7 +4,7 @@ const t = require('tap')
4
4
  const test = t.test
5
5
  const Fastify = require('../..')
6
6
  const statusCodes = require('node:http').STATUS_CODES
7
- const diagnostics = require('dc-polyfill')
7
+ const diagnostics = require('node:diagnostics_channel')
8
8
 
9
9
  test('Error.status property support', t => {
10
10
  t.plan(4)
@@ -24,7 +24,7 @@ test('diagnostics_channel when present and subscribers', t => {
24
24
  }
25
25
 
26
26
  const fastify = proxyquire('../../fastify', {
27
- 'dc-polyfill': diagnostics
27
+ 'node:diagnostics_channel': diagnostics
28
28
  })()
29
29
  t.equal(fastifyInHook, fastify)
30
30
  })
@@ -46,6 +46,6 @@ test('diagnostics_channel when present and no subscribers', t => {
46
46
  }
47
47
 
48
48
  proxyquire('../../fastify', {
49
- 'dc-polyfill': diagnostics
49
+ 'node:diagnostics_channel': diagnostics
50
50
  })()
51
51
  })
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const t = require('tap')
4
- const diagnostics = require('dc-polyfill')
4
+ const diagnostics = require('node:diagnostics_channel')
5
5
  const test = t.test
6
6
  const sget = require('simple-get').concat
7
7
  const Fastify = require('../..')
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../fastify')()
7
+ fastify.addHttpMethod('COPY')
7
8
 
8
9
  test('can be created - copy', t => {
9
10
  t.plan(1)
@@ -0,0 +1,111 @@
1
+ 'use strict'
2
+
3
+ const http = require('node:http')
4
+ const { test } = require('tap')
5
+ const Fastify = require('../../fastify')
6
+
7
+ function addEcho (fastify, method) {
8
+ fastify.route({
9
+ method,
10
+ url: '/',
11
+ handler: function (req, reply) {
12
+ reply.send(req.body)
13
+ }
14
+ })
15
+ }
16
+
17
+ test('missing method from http client', t => {
18
+ t.plan(2)
19
+ const fastify = Fastify()
20
+
21
+ fastify.listen({ port: 3000 }, (err) => {
22
+ t.error(err)
23
+
24
+ const port = fastify.server.address().port
25
+ const req = http.request({
26
+ port,
27
+ method: 'REBIND',
28
+ path: '/'
29
+ }, (res) => {
30
+ t.equal(res.statusCode, 404)
31
+ fastify.close()
32
+ })
33
+
34
+ req.end()
35
+ })
36
+ })
37
+
38
+ test('addHttpMethod increase the supported HTTP methods supported', t => {
39
+ t.plan(8)
40
+ const app = Fastify()
41
+
42
+ t.throws(() => { addEcho(app, 'REBIND') }, /REBIND method is not supported./)
43
+ t.notOk(app.supportedMethods.includes('REBIND'))
44
+ t.notOk(app.rebind)
45
+
46
+ app.addHttpMethod('REBIND')
47
+ t.doesNotThrow(() => { addEcho(app, 'REBIND') }, 'REBIND method is supported.')
48
+ t.ok(app.supportedMethods.includes('REBIND'))
49
+ t.ok(app.rebind)
50
+
51
+ app.rebind('/foo', () => 'hello')
52
+
53
+ app.inject({
54
+ method: 'REBIND',
55
+ url: '/foo'
56
+ }, (err, response) => {
57
+ t.error(err)
58
+ t.equal(response.payload, 'hello')
59
+ })
60
+ })
61
+
62
+ test('addHttpMethod adds a new custom method without body', t => {
63
+ t.plan(3)
64
+ const app = Fastify()
65
+
66
+ t.throws(() => { addEcho(app, 'REBIND') }, /REBIND method is not supported./)
67
+
68
+ app.addHttpMethod('REBIND')
69
+ t.doesNotThrow(() => { addEcho(app, 'REBIND') }, 'REBIND method is supported.')
70
+
71
+ t.throws(() => {
72
+ app.route({
73
+ url: '/',
74
+ method: 'REBIND',
75
+ schema: {
76
+ body: {
77
+ type: 'object',
78
+ properties: {
79
+ hello: { type: 'string' }
80
+ }
81
+ }
82
+ },
83
+ handler: function (req, reply) {
84
+ reply.send(req.body)
85
+ }
86
+ })
87
+ }, /Body validation schema for REBIND:\/ route is not supported!/)
88
+ })
89
+
90
+ test('addHttpMethod adds a new custom method with body', t => {
91
+ t.plan(3)
92
+ const app = Fastify()
93
+
94
+ app.addHttpMethod('REBIND', { hasBody: true })
95
+ t.doesNotThrow(() => { addEcho(app, 'REBIND') }, 'REBIND method is supported.')
96
+
97
+ app.inject({
98
+ method: 'REBIND',
99
+ url: '/',
100
+ payload: { hello: 'world' }
101
+ }, (err, response) => {
102
+ t.error(err)
103
+ t.same(response.json(), { hello: 'world' })
104
+ })
105
+ })
106
+
107
+ test('addHttpMethod rejects fake http method', t => {
108
+ t.plan(1)
109
+ const fastify = Fastify()
110
+ t.throws(() => { fastify.addHttpMethod('FOOO') }, /Provided method is invalid!/)
111
+ })
@@ -3,7 +3,7 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../fastify')()
7
7
 
8
8
  const schema = {
9
9
  schema: {
@@ -3,7 +3,7 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../fastify')()
7
7
 
8
8
  const schema = {
9
9
  schema: {
@@ -59,12 +59,12 @@ test('shorthand - head', t => {
59
59
  test('shorthand - custom head', t => {
60
60
  t.plan(1)
61
61
  try {
62
- fastify.get('/proxy/*', function (req, reply) {
62
+ fastify.head('/proxy/*', function (req, reply) {
63
+ reply.headers({ 'x-foo': 'bar' })
63
64
  reply.code(200).send(null)
64
65
  })
65
66
 
66
- fastify.head('/proxy/*', function (req, reply) {
67
- reply.headers({ 'x-foo': 'bar' })
67
+ fastify.get('/proxy/*', function (req, reply) {
68
68
  reply.code(200).send(null)
69
69
  })
70
70
 
@@ -77,12 +77,12 @@ test('shorthand - custom head', t => {
77
77
  test('shorthand - custom head with constraints', t => {
78
78
  t.plan(1)
79
79
  try {
80
- fastify.get('/proxy/*', { constraints: { version: '1.0.0' } }, function (req, reply) {
80
+ fastify.head('/proxy/*', { constraints: { version: '1.0.0' } }, function (req, reply) {
81
+ reply.headers({ 'x-foo': 'bar' })
81
82
  reply.code(200).send(null)
82
83
  })
83
84
 
84
- fastify.head('/proxy/*', { constraints: { version: '1.0.0' } }, function (req, reply) {
85
- reply.headers({ 'x-foo': 'bar' })
85
+ fastify.get('/proxy/*', { constraints: { version: '1.0.0' } }, function (req, reply) {
86
86
  reply.code(200).send(null)
87
87
  })
88
88
 
@@ -109,62 +109,6 @@ test('shorthand - should not reset a head route', t => {
109
109
  }
110
110
  })
111
111
 
112
- test('shorthand - should override head route when setting multiple routes', t => {
113
- t.plan(1)
114
- try {
115
- fastify.route({
116
- method: 'GET',
117
- url: '/query2',
118
- handler: function (req, reply) {
119
- reply.headers({ 'x-foo': 'bar' })
120
- reply.code(200).send(null)
121
- }
122
- })
123
-
124
- fastify.route({
125
- method: ['POST', 'PUT', 'HEAD'],
126
- url: '/query2',
127
- handler: function (req, reply) {
128
- reply.headers({ 'x-foo': 'bar' })
129
- reply.code(200).send(null)
130
- }
131
- })
132
-
133
- t.pass()
134
- } catch (e) {
135
- console.log(e)
136
- t.fail()
137
- }
138
- })
139
-
140
- test('shorthand - should override head route when setting multiple routes', t => {
141
- t.plan(1)
142
- try {
143
- fastify.route({
144
- method: ['GET'],
145
- url: '/query3',
146
- handler: function (req, reply) {
147
- reply.headers({ 'x-foo': 'bar' })
148
- reply.code(200).send(null)
149
- }
150
- })
151
-
152
- fastify.route({
153
- method: ['POST', 'PUT', 'HEAD'],
154
- url: '/query3',
155
- handler: function (req, reply) {
156
- reply.headers({ 'x-foo': 'bar' })
157
- reply.code(200).send(null)
158
- }
159
- })
160
-
161
- t.pass()
162
- } catch (e) {
163
- console.log(e)
164
- t.fail()
165
- }
166
- })
167
-
168
112
  test('shorthand - should set get and head route in the same api call', t => {
169
113
  t.plan(1)
170
114
  try {
@@ -330,30 +274,6 @@ fastify.listen({ port: 0 }, err => {
330
274
  })
331
275
  })
332
276
 
333
- test('shorthand - should override head route when setting multiple routes', t => {
334
- t.plan(3)
335
- sget({
336
- method: 'HEAD',
337
- url: 'http://localhost:' + fastify.server.address().port + '/query2'
338
- }, (err, response) => {
339
- t.error(err)
340
- t.equal(response.headers['x-foo'], 'bar')
341
- t.equal(response.statusCode, 200)
342
- })
343
- })
344
-
345
- test('shorthand - should override head route when setting multiple routes', t => {
346
- t.plan(3)
347
- sget({
348
- method: 'HEAD',
349
- url: 'http://localhost:' + fastify.server.address().port + '/query3'
350
- }, (err, response) => {
351
- t.error(err)
352
- t.equal(response.headers['x-foo'], 'bar')
353
- t.equal(response.statusCode, 200)
354
- })
355
- })
356
-
357
277
  test('shorthand - should set get and head route in the same api call', t => {
358
278
  t.plan(3)
359
279
  sget({
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../fastify')()
7
+ fastify.addHttpMethod('LOCK', { hasBody: true })
7
8
 
8
9
  const bodySample = `<?xml version="1.0" encoding="utf-8" ?>
9
10
  <D:lockinfo xmlns:D='DAV:'>
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('../fastify')()
6
+ const fastify = require('../../fastify')()
7
+ fastify.addHttpMethod('MKCALENDAR', { hasBody: true })
7
8
 
8
9
  const bodySample = `<?xml version="1.0" encoding="UTF-8"?>
9
10
  <B:mkcalendar xmlns:B="urn:ietf:params:xml:ns:caldav">
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../')()
7
+ fastify.addHttpMethod('MKCOL')
7
8
 
8
9
  test('can be created - mkcol', t => {
9
10
  t.plan(1)
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../')()
7
+ fastify.addHttpMethod('MOVE')
7
8
 
8
9
  test('shorthand - move', t => {
9
10
  t.plan(1)
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../')()
7
+ fastify.addHttpMethod('PROPFIND', { hasBody: true })
7
8
 
8
9
  const bodySample = `<?xml version="1.0" encoding="utf-8" ?>
9
10
  <D:propfind xmlns:D="DAV:">
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('..')()
6
+ const fastify = require('../../')()
7
+ fastify.addHttpMethod('PROPPATCH', { hasBody: true })
7
8
 
8
9
  const bodySample = `<?xml version="1.0" encoding="utf-8" ?>
9
10
  <D:propertyupdate xmlns:D="DAV:"
@@ -3,7 +3,8 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const fastify = require('../fastify')()
6
+ const fastify = require('../../fastify')()
7
+ fastify.addHttpMethod('REPORT', { hasBody: true })
7
8
 
8
9
  const bodySample = `<?xml version="1.0" encoding="UTF-8"?>
9
10
  <B:calendar-query xmlns:B="urn:ietf:params:xml:ns:caldav">