Skip to content

Commit 2a4cbe7

Browse files
committed
feat: move router options to own key
1 parent 6e98c95 commit 2a4cbe7

8 files changed

+1205
-180
lines changed

docs/Reference/Server.md

+263-161
Large diffs are not rendered by default.

docs/Reference/Warnings.md

+16
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88
- [FSTWRN001](#FSTWRN001)
99
- [FSTWRN002](#FSTWRN002)
1010
- [Fastify Deprecation Codes](#fastify-deprecation-codes)
11+
- [FSTDEP020](#FSTDEP020)
12+
- [FSTDEP021](#FSTDEP021)
13+
- [FSTDEP022](#FSTDEP022)
14+
- [FSTDEP023](#FSTDEP023)
15+
- [FSTDEP024](#FSTDEP024)
16+
- [FSTDEP025](#FSTDEP025)
17+
- [FSTDEP026](#FSTDEP026)
18+
- [FSTDEP027](#FSTDEP027)
1119

1220

1321
## Warnings
@@ -55,3 +63,11 @@ Deprecation codes are supported by the Node.js CLI options:
5563

5664
| Code | Description | How to solve | Discussion |
5765
| ---- | ----------- | ------------ | ---------- |
66+
| <a id="FSTDEP020">FSTDEP020</a> | You are trying to access the deprecated `options.ignoreTrailingSlash` property. | Use `options.routerOptions.ignoreTrailingSlash`. | [#](https://github.com/fastify/fastify/pull/)
67+
| <a id="FSTDEP021">FSTDEP021</a> | You are trying to access the deprecated `options.ignoreDuplicateSlashes` property. | Use `options.routerOptions.ignoreDuplicateSlashes`. | [#](https://github.com/fastify/fastify/pull/)
68+
| <a id="FSTDEP022">FSTDEP022</a> | You are trying to access the deprecated `options.maxParamLength` property. | Use `options.routerOptions.maxParamLength`. | [#](https://github.com/fastify/fastify/pull/)
69+
| <a id="FSTDEP023">FSTDEP023</a> | You are trying to access the deprecated `options.caseSensitive` property. | Use `options.routerOptions.caseSensitive`. | [#](https://github.com/fastify/fastify/pull/)
70+
| <a id="FSTDEP024">FSTDEP024</a> | You are trying to access the deprecated `options.allowUnsafeRegex` property. | Use `options.routerOptions.allowUnsafeRegex`. | [#](https://github.com/fastify/fastify/pull/)
71+
| <a id="FSTDEP025">FSTDEP025</a> | You are trying to access the deprecated `options.querystringParser` property. | Use `options.routerOptions.querystringParser`. | [#](https://github.com/fastify/fastify/pull/)
72+
| <a id="FSTDEP026">FSTDEP026</a> | You are trying to access the deprecated `options.useSemicolonDelimiter` property. | Use `options.routerOptions.useSemicolonDelimiter`. | [#](https://github.com/fastify/fastify/pull/)
73+
| <a id="FSTDEP027">FSTDEP027</a> | You are trying to access the deprecated `options.constraints` property. | Use `options.routerOptions.constraints`. | [#](https://github.com/fastify/fastify/pull/)

fastify.js

+13-14
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const { Hooks, hookRunnerApplication, supportedHooks } = require('./lib/hooks')
4545
const { createChildLogger, defaultChildLoggerFactory, createLogger } = require('./lib/logger-factory')
4646
const pluginUtils = require('./lib/pluginUtils')
4747
const { getGenReqId, reqIdGenFactory } = require('./lib/reqIdGenFactory')
48-
const { buildRouting, validateBodyLimitOption } = require('./lib/route')
48+
const { buildRouting, validateBodyLimitOption, buildRouterOptions } = require('./lib/route')
4949
const build404 = require('./lib/fourOhFour')
5050
const getSecuredInitialConfig = require('./lib/initialConfigValidation')
5151
const override = require('./lib/pluginOverride')
@@ -155,21 +155,20 @@ function fastify (options) {
155155
// exposeHeadRoutes have its default set from the validator
156156
options.exposeHeadRoutes = initialConfig.exposeHeadRoutes
157157

158+
options.routerOptions = buildRouterOptions(options, {
159+
defaultRoute,
160+
onBadUrl,
161+
ignoreTrailingSlash: defaultInitOptions.ignoreTrailingSlash,
162+
ignoreDuplicateSlashes: defaultInitOptions.ignoreDuplicateSlashes,
163+
maxParamLength: defaultInitOptions.maxParamLength,
164+
allowUnsafeRegex: defaultInitOptions.allowUnsafeRegex,
165+
buildPrettyMeta: defaultBuildPrettyMeta,
166+
useSemilcolonDelimiter: defaultInitOptions.useSemicolonDelimiter
167+
})
168+
158169
// Default router
159170
const router = buildRouting({
160-
config: {
161-
defaultRoute,
162-
onBadUrl,
163-
constraints: options.constraints,
164-
ignoreTrailingSlash: options.ignoreTrailingSlash || defaultInitOptions.ignoreTrailingSlash,
165-
ignoreDuplicateSlashes: options.ignoreDuplicateSlashes || defaultInitOptions.ignoreDuplicateSlashes,
166-
maxParamLength: options.maxParamLength || defaultInitOptions.maxParamLength,
167-
caseSensitive: options.caseSensitive,
168-
allowUnsafeRegex: options.allowUnsafeRegex || defaultInitOptions.allowUnsafeRegex,
169-
buildPrettyMeta: defaultBuildPrettyMeta,
170-
querystringParser: options.querystringParser,
171-
useSemicolonDelimiter: options.useSemicolonDelimiter ?? defaultInitOptions.useSemicolonDelimiter
172-
}
171+
config: options.routerOptions
173172
})
174173

175174
// 404 router, used for handling encapsulated 404 handlers

lib/route.js

+49-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ const {
2929
FST_ERR_HOOK_INVALID_ASYNC_HANDLER
3030
} = require('./errors')
3131

32+
const { FSTDEP020, FSTDEP021, FSTDEP022, FSTDEP023, FSTDEP024, FSTDEP025, FSTDEP026, FSTDEP027 } = require('./warnings')
33+
3234
const {
3335
kRoutePrefix,
3436
kSupportedHTTPMethods,
@@ -85,8 +87,8 @@ function buildRouting (options) {
8587

8688
globalExposeHeadRoutes = options.exposeHeadRoutes
8789
disableRequestLogging = options.disableRequestLogging
88-
ignoreTrailingSlash = options.ignoreTrailingSlash
89-
ignoreDuplicateSlashes = options.ignoreDuplicateSlashes
90+
ignoreTrailingSlash = options.routerOptions.ignoreTrailingSlash
91+
ignoreDuplicateSlashes = options.routerOptions.ignoreDuplicateSlashes
9092
return503OnClosing = Object.hasOwn(options, 'return503OnClosing') ? options.return503OnClosing : true
9193
keepAliveConnections = fastifyArgs.keepAliveConnections
9294
},
@@ -572,6 +574,50 @@ function runPreParsing (err, request, reply) {
572574
}
573575
}
574576

577+
function buildRouterOptions (options, defaultOptions) {
578+
const routerOptions = options.routerOptions || {}
579+
if (options.ignoreTrailingSlash !== undefined) {
580+
FSTDEP020()
581+
}
582+
if (options.ignoreDuplicateSlashes !== undefined) {
583+
FSTDEP021()
584+
}
585+
if (options.maxParamLength !== undefined) {
586+
FSTDEP022()
587+
}
588+
if (options.caseSensitive !== undefined) {
589+
FSTDEP023()
590+
}
591+
if (options.allowUnsafeRegex !== undefined) {
592+
FSTDEP024()
593+
}
594+
if (options.querystringParser !== undefined) {
595+
FSTDEP025()
596+
}
597+
if (options.useSemicolonDelimiter !== undefined) {
598+
FSTDEP026()
599+
}
600+
if (options.constraints !== undefined) {
601+
FSTDEP027()
602+
}
603+
604+
routerOptions.ignoreTrailingSlash = Object.hasOwn(routerOptions, 'ignoreTrailingSlash') ? options.routerOptions.ignoreTrailingSlash : options.ignoreTrailingSlash || defaultOptions.ignoreTrailingSlash
605+
routerOptions.ignoreDuplicateSlashes = Object.hasOwn(routerOptions, 'ignoreDuplicateSlashes') ? options.routerOptions.ignoreDuplicateSlashes : options.ignoreDuplicateSlashes || defaultOptions.ignoreDuplicateSlashes
606+
routerOptions.maxParamLength = Object.hasOwn(routerOptions, 'maxParamLength') ? options.routerOptions.maxParamLength : options.maxParamLength || defaultOptions.maxParamLength
607+
routerOptions.allowUnsafeRegex = Object.hasOwn(routerOptions, 'allowUnsafeRegex') ? options.routerOptions.allowUnsafeRegex : options.allowUnsafeRegex || defaultOptions.allowUnsafeRegex
608+
609+
routerOptions.useSemicolonDelimiter = Object.hasOwn(routerOptions, 'useSemicolonDelimiter') ? options.routerOptions.useSemicolonDelimiter : options.useSemicolonDelimiter || defaultOptions.useSemicolonDelimiter
610+
routerOptions.caseSensitive = Object.hasOwn(routerOptions, 'caseSensitive') ? options.routerOptions.caseSensitive : options.caseSensitive
611+
routerOptions.querystringParser = Object.hasOwn(routerOptions, 'querystringParser') ? options.routerOptions.querystringParser : options.querystringParser
612+
routerOptions.constraints = Object.hasOwn(routerOptions, 'constraints') ? options.routerOptions.constraints : options.constraints
613+
614+
routerOptions.defaultRoute = (Object.hasOwn(routerOptions, 'defaultRoute') && typeof routerOptions.defaultRoute === 'function') ? routerOptions.defaultRoute : defaultOptions.defaultRoute
615+
routerOptions.onBadUrl = (Object.hasOwn(routerOptions, 'onBadUrl') && typeof routerOptions.onBadUrl === 'function') ? routerOptions.onBadUrl : defaultOptions.onBadUrl
616+
routerOptions.buildPrettyMeta = (Object.hasOwn(routerOptions, 'buildPrettyMeta') && typeof routerOptions.buildPrettyMeta === 'function') ? routerOptions.buildPrettyMeta : defaultOptions.buildPrettyMeta
617+
618+
return routerOptions
619+
}
620+
575621
/**
576622
* Used within the route handler as a `net.Socket.close` event handler.
577623
* The purpose is to remove a socket from the tracked sockets collection when
@@ -583,4 +629,4 @@ function removeTrackedSocket () {
583629

584630
function noop () { }
585631

586-
module.exports = { buildRouting, validateBodyLimitOption }
632+
module.exports = { buildRouting, validateBodyLimitOption, buildRouterOptions }

lib/warnings.js

+71-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ const { createWarning } = require('process-warning')
66
* Deprecation codes:
77
* - FSTWRN001
88
* - FSTSEC001
9+
* - FSTDEP020
10+
* - FSTDEP021
11+
* - FSTDEP022
12+
* - FSTDEP023
13+
* - FSTDEP024
14+
* - FSTDEP025
15+
* - FSTDEP026
916
*
1017
* Deprecation Codes FSTDEP001 - FSTDEP021 were used by v4 and MUST NOT not be reused.
1118
*/
@@ -24,7 +31,70 @@ const FSTSEC001 = createWarning({
2431
unlimited: true
2532
})
2633

34+
const FSTDEP020 = createWarning({
35+
name: 'FastifyWarning',
36+
code: 'FSTDEP020',
37+
message: 'options.ignoreTrailingSlash property access is deprecated. Please use "options.routerOptions.ignoreTrailingSlash" instead for accessing router options. The "options.ignoreTrailingSlash" will be removed in `fastify@6`.',
38+
unlimited: true
39+
})
40+
41+
const FSTDEP021 = createWarning({
42+
name: 'FastifyWarning',
43+
code: 'FSTDEP021',
44+
message: 'options.ignoreDuplicateSlashes property access is deprecated. Please use "options.routerOptions.ignoreDuplicateSlashes" instead for accessing router options. The "options.ignoreDuplicateSlashes" will be removed in `fastify@6`.',
45+
unlimited: true
46+
47+
})
48+
49+
const FSTDEP022 = createWarning({
50+
name: 'FastifyWarning',
51+
code: 'FSTDEP022',
52+
message: 'options.maxParamLength property access is deprecated. Please use "options.routerOptions.maxParamLength" instead for accessing router options. The "options.maxParamLength" will be removed in `fastify@6`.',
53+
unlimited: true
54+
55+
})
56+
57+
const FSTDEP023 = createWarning({
58+
name: 'FastifyWarning',
59+
code: 'FSTDEP023',
60+
message: 'options.caseSensitive property access is deprecated. Please use "options.routerOptions.caseSensitive" instead for accessing router options. The "options.caseSensitive" will be removed in `fastify@6`.',
61+
unlimited: true
62+
})
63+
64+
const FSTDEP024 = createWarning({
65+
name: 'FastifyWarning',
66+
code: 'FSTDEP024',
67+
message: 'options.allowUnsafeRegex property access is deprecated. Please use "options.routerOptions.allowUnsafeRegex" instead for accessing router options. The "options.allowUnsafeRegex" will be removed in `fastify@6`.',
68+
unlimited: true
69+
})
70+
71+
const FSTDEP025 = createWarning({
72+
name: 'FastifyWarning',
73+
code: 'FSTDEP025',
74+
message: 'options.querystringParser property access is deprecated. Please use "options.routerOptions.querystringParser" instead for accessing router options. The "options.querystringParser" will be removed in `fastify@6`.'
75+
})
76+
77+
const FSTDEP026 = createWarning({
78+
name: 'FastifyWarning',
79+
code: 'FSTDEP026',
80+
message: 'options.useSemicolonDelimiter property access is deprecated. Please use "options.routerOptions.useSemicolonDelimiter" instead for accessing router options. The "options.useSemicolonDelimiter" will be removed in `fastify@6`.'
81+
})
82+
83+
const FSTDEP027 = createWarning({
84+
name: 'FastifyWarning',
85+
code: 'FSTDEP027',
86+
message: 'options.constraints property access is deprecated. Please use "options.routerOptions.constraints" instead for accessing router options. The "options.constraints" will be removed in `fastify@6`.'
87+
})
88+
2789
module.exports = {
2890
FSTWRN001,
29-
FSTSEC001
91+
FSTSEC001,
92+
FSTDEP020,
93+
FSTDEP021,
94+
FSTDEP022,
95+
FSTDEP023,
96+
FSTDEP024,
97+
FSTDEP025,
98+
FSTDEP026,
99+
FSTDEP027
30100
}

0 commit comments

Comments
 (0)