fastify 5.12.0 → 6.0.0-alpha.1

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 (51) hide show
  1. package/README.md +2 -2
  2. package/build/build-validation.js +20 -34
  3. package/docs/Guides/Getting-Started.md +2 -2
  4. package/docs/Reference/Errors.md +5 -3
  5. package/docs/Reference/Hooks.md +0 -4
  6. package/docs/Reference/LTS.md +6 -5
  7. package/docs/Reference/Server.md +8 -88
  8. package/docs/Reference/TypeScript.md +3 -49
  9. package/docs/Reference/Warnings.md +4 -11
  10. package/fastify.d.ts +10 -24
  11. package/fastify.js +17 -34
  12. package/lib/config-validator.js +368 -475
  13. package/lib/errors.js +9 -3
  14. package/lib/log-controller.js +2 -4
  15. package/lib/logger-factory.js +1 -1
  16. package/lib/route.js +4 -9
  17. package/lib/server.js +2 -3
  18. package/lib/warnings.js +2 -46
  19. package/package.json +2 -2
  20. package/test/404s.test.js +0 -49
  21. package/test/allow-unsafe-regex.test.js +12 -4
  22. package/test/case-insensitive.test.js +12 -4
  23. package/test/custom-querystring-parser.test.js +0 -16
  24. package/test/hooks.test.js +6 -1
  25. package/test/http-methods/custom-http-methods.test.js +12 -17
  26. package/test/http-methods/trace.test.js +1 -1
  27. package/test/https/custom-https-server.test.js +1 -1
  28. package/test/internals/errors.test.js +15 -5
  29. package/test/internals/initial-config.test.js +56 -38
  30. package/test/internals/logger.test.js +17 -4
  31. package/test/internals/reply.test.js +1 -1
  32. package/test/internals/request.test.js +8 -24
  33. package/test/logger/logging.test.js +2 -121
  34. package/test/logger/request.test.js +1 -36
  35. package/test/route-prefix.test.js +46 -18
  36. package/test/route.1.test.js +2 -2
  37. package/test/router-options.test.js +25 -523
  38. package/test/set-error-handler.test.js +7 -9
  39. package/test/types/errors.tst.ts +2 -1
  40. package/test/types/fastify.tst.ts +44 -48
  41. package/test/types/instance.tst.ts +4 -5
  42. package/test/types/logger.tst.ts +3 -7
  43. package/test/use-semicolon-delimiter.test.js +0 -60
  44. package/types/context.d.ts +0 -20
  45. package/types/errors.d.ts +2 -1
  46. package/types/instance.d.ts +0 -4
  47. package/types/logger.d.ts +1 -16
  48. package/types/plugin.d.ts +0 -9
  49. package/types/request.d.ts +0 -4
  50. package/lib/promise.js +0 -23
  51. package/test/internals/promise.test.js +0 -63
package/fastify.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const VERSION = '5.12.0'
3
+ const VERSION = '6.0.0-alpha.1'
4
4
 
5
5
  const Avvio = require('avvio')
6
6
  const http = require('node:http')
@@ -57,7 +57,6 @@ const {
57
57
  AVVIO_ERRORS_MAP,
58
58
  ...errorCodes
59
59
  } = require('./lib/errors')
60
- const PonyPromise = require('./lib/promise')
61
60
 
62
61
  const { defaultInitOptions } = getSecuredInitialConfig
63
62
 
@@ -70,17 +69,17 @@ const {
70
69
  FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN,
71
70
  FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ,
72
71
  FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR,
73
- FST_ERR_INSTANCE_ALREADY_LISTENING,
72
+ FST_ERR_INSTANCE_ALREADY_STARTED,
74
73
  FST_ERR_REOPENED_CLOSE_SERVER,
75
74
  FST_ERR_ROUTE_REWRITE_NOT_STR,
76
75
  FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN,
77
76
  FST_ERR_ERROR_HANDLER_NOT_FN,
78
77
  FST_ERR_ERROR_HANDLER_ALREADY_SET,
79
- FST_ERR_ROUTE_METHOD_INVALID
78
+ FST_ERR_ROUTE_METHOD_INVALID,
79
+ FST_ERR_ROUTE_METHOD_ALREADY_SUPPORTED
80
80
  } = errorCodes
81
81
 
82
82
  const { buildErrorHandler } = require('./lib/error-handler.js')
83
- const { FSTWRN004, FSTDEP023, FSTDEP024, FSTDEP025 } = require('./lib/warnings.js')
84
83
 
85
84
  const initChannel = diagnostics.channel('fastify.initialization')
86
85
 
@@ -466,7 +465,7 @@ function fastify (serverOptions) {
466
465
  return fastify
467
466
 
468
467
  function throwIfAlreadyStarted (msg) {
469
- if (fastify[kState].started) throw new FST_ERR_INSTANCE_ALREADY_LISTENING(msg)
468
+ if (fastify[kState].started) throw new FST_ERR_INSTANCE_ALREADY_STARTED(msg)
470
469
  }
471
470
 
472
471
  // HTTP injection handling
@@ -528,7 +527,7 @@ function fastify (serverOptions) {
528
527
  // It will work as a barrier for all the .ready() calls (ensuring single hook execution)
529
528
  // as well as a flow control mechanism to chain cbs and further
530
529
  // promises
531
- this[kState].readyResolver = PonyPromise.withResolvers()
530
+ this[kState].readyResolver = Promise.withResolvers()
532
531
 
533
532
  if (!cb) {
534
533
  return this[kState].readyResolver.promise
@@ -771,10 +770,8 @@ function fastify (serverOptions) {
771
770
  throw new FST_ERR_ERROR_HANDLER_NOT_FN()
772
771
  }
773
772
 
774
- if (!options.allowErrorHandlerOverride && this[kErrorHandlerAlreadySet]) {
773
+ if (this[kErrorHandlerAlreadySet] && !options.allowErrorHandlerOverride) {
775
774
  throw new FST_ERR_ERROR_HANDLER_ALREADY_SET()
776
- } else if (this[kErrorHandlerAlreadySet]) {
777
- FSTWRN004()
778
775
  }
779
776
 
780
777
  this[kErrorHandlerAlreadySet] = true
@@ -832,7 +829,7 @@ function fastify (serverOptions) {
832
829
  this[kSupportedHTTPMethods].bodywith.has(method)
833
830
 
834
831
  if (alreadyExists && !overrideExisting) {
835
- FSTDEP025(method)
832
+ throw new FST_ERR_ROUTE_METHOD_ALREADY_SUPPORTED(method)
836
833
  }
837
834
 
838
835
  if (hasBody === true) {
@@ -864,13 +861,10 @@ function processOptions (options, defaultRoute, onBadUrl, onMaxParamLength) {
864
861
  }
865
862
 
866
863
  if (
867
- (options.querystringParser && typeof options.querystringParser !== 'function') ||
868
- (
869
- options.routerOptions?.querystringParser &&
864
+ options.routerOptions?.querystringParser &&
870
865
  typeof options.routerOptions.querystringParser !== 'function'
871
- )
872
866
  ) {
873
- throw new FST_ERR_QSP_NOT_FN(typeof (options.querystringParser ?? options.routerOptions.querystringParser))
867
+ throw new FST_ERR_QSP_NOT_FN(typeof options.routerOptions.querystringParser)
874
868
  }
875
869
 
876
870
  if (options.schemaController && options.schemaController.bucket && typeof options.schemaController.bucket !== 'function') {
@@ -881,13 +875,7 @@ function processOptions (options, defaultRoute, onBadUrl, onMaxParamLength) {
881
875
 
882
876
  const requestIdHeader = typeof options.requestIdHeader === 'string' && options.requestIdHeader.length !== 0 ? options.requestIdHeader.toLowerCase() : (options.requestIdHeader === true && 'request-id')
883
877
  const genReqId = reqIdGenFactory(requestIdHeader, options.genReqId)
884
- if (options.requestIdLogLabel !== undefined) {
885
- FSTDEP024()
886
- }
887
878
  options.bodyLimit = options.bodyLimit || defaultInitOptions.bodyLimit
888
- if (options.disableRequestLogging !== undefined) {
889
- FSTDEP023()
890
- }
891
879
 
892
880
  const ajvOptions = Object.assign({
893
881
  customOptions: {},
@@ -918,6 +906,13 @@ function processOptions (options, defaultRoute, onBadUrl, onMaxParamLength) {
918
906
  options.clientErrorHandler = options.clientErrorHandler || defaultClientErrorHandler
919
907
  options.allowErrorHandlerOverride = options.allowErrorHandlerOverride ?? defaultInitOptions.allowErrorHandlerOverride
920
908
 
909
+ options.routerOptions = buildRouterOptions(options, {
910
+ buildPrettyMeta: defaultBuildPrettyMeta,
911
+ defaultRoute,
912
+ onBadUrl,
913
+ onMaxParamLength
914
+ })
915
+
921
916
  const initialConfig = getSecuredInitialConfig(options)
922
917
 
923
918
  // exposeHeadRoutes have its default set from the validator
@@ -926,18 +921,6 @@ function processOptions (options, defaultRoute, onBadUrl, onMaxParamLength) {
926
921
  // we need to set this before calling createServer
927
922
  options.http2SessionTimeout = initialConfig.http2SessionTimeout
928
923
 
929
- options.routerOptions = buildRouterOptions(options, {
930
- defaultRoute,
931
- onBadUrl,
932
- onMaxParamLength,
933
- ignoreTrailingSlash: defaultInitOptions.ignoreTrailingSlash,
934
- ignoreDuplicateSlashes: defaultInitOptions.ignoreDuplicateSlashes,
935
- maxParamLength: defaultInitOptions.maxParamLength,
936
- allowUnsafeRegex: defaultInitOptions.allowUnsafeRegex,
937
- buildPrettyMeta: defaultBuildPrettyMeta,
938
- useSemicolonDelimiter: defaultInitOptions.useSemicolonDelimiter
939
- })
940
-
941
924
  return {
942
925
  options,
943
926
  genReqId,