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.
- package/README.md +2 -2
- package/SPONSORS.md +2 -0
- package/build/build-validation.js +3 -15
- package/docs/Guides/Ecosystem.md +4 -0
- package/docs/Guides/Getting-Started.md +0 -2
- package/docs/Guides/Migration-Guide-V4.md +48 -0
- package/docs/Guides/Recommendations.md +8 -6
- package/docs/Reference/Errors.md +0 -2
- package/docs/Reference/Hooks.md +5 -9
- package/docs/Reference/Logging.md +1 -1
- package/docs/Reference/Reply.md +9 -11
- package/docs/Reference/Request.md +0 -11
- package/docs/Reference/Routes.md +4 -23
- package/docs/Reference/Server.md +30 -40
- package/docs/Reference/Type-Providers.md +2 -2
- package/docs/Reference/TypeScript.md +16 -18
- package/docs/Reference/Validation-and-Serialization.md +62 -27
- package/docs/Reference/Warnings.md +0 -26
- package/eslint.config.js +9 -25
- package/fastify.d.ts +10 -23
- package/fastify.js +60 -61
- package/lib/configValidator.js +130 -182
- package/lib/context.js +1 -22
- package/lib/decorate.js +2 -2
- package/lib/errors.js +0 -6
- package/lib/handleRequest.js +5 -5
- package/lib/reply.js +34 -74
- package/lib/request.js +0 -45
- package/lib/route.js +12 -27
- package/lib/schemas.js +27 -22
- package/lib/server.js +6 -11
- package/lib/symbols.js +1 -1
- package/lib/validation.js +27 -6
- package/lib/warnings.js +1 -92
- package/lib/wrapThenable.js +1 -1
- package/package.json +14 -15
- package/test/decorator.test.js +1 -1
- package/test/diagnostics-channel/404.test.js +1 -1
- package/test/diagnostics-channel/async-delay-request.test.js +1 -1
- package/test/diagnostics-channel/async-request.test.js +1 -1
- package/test/diagnostics-channel/error-before-handler.test.js +1 -1
- package/test/diagnostics-channel/error-request.test.js +1 -1
- package/test/diagnostics-channel/error-status.test.js +1 -1
- package/test/diagnostics-channel/init.test.js +2 -2
- package/test/diagnostics-channel/sync-delay-request.test.js +1 -1
- package/test/diagnostics-channel/sync-request-reply.test.js +1 -1
- package/test/diagnostics-channel/sync-request.test.js +1 -1
- package/test/{copy.test.js → http-methods/copy.test.js} +2 -1
- package/test/http-methods/custom-http-methods.test.js +111 -0
- package/test/{get.test.js → http-methods/get.test.js} +1 -1
- package/test/{head.test.js → http-methods/head.test.js} +7 -87
- package/test/{lock.test.js → http-methods/lock.test.js} +2 -1
- package/test/{mkcalendar.test.js → http-methods/mkcalendar.test.js} +2 -1
- package/test/{mkcol.test.js → http-methods/mkcol.test.js} +2 -1
- package/test/{move.test.js → http-methods/move.test.js} +2 -1
- package/test/{propfind.test.js → http-methods/propfind.test.js} +2 -1
- package/test/{proppatch.test.js → http-methods/proppatch.test.js} +2 -1
- package/test/{report.test.js → http-methods/report.test.js} +2 -1
- package/test/{search.test.js → http-methods/search.test.js} +2 -1
- package/test/{trace.test.js → http-methods/trace.test.js} +2 -1
- package/test/{unlock.test.js → http-methods/unlock.test.js} +2 -1
- package/test/internals/all.test.js +3 -3
- package/test/internals/decorator.test.js +2 -2
- package/test/internals/errors.test.js +7 -17
- package/test/internals/initialConfig.test.js +0 -31
- package/test/internals/reply-serialize.test.js +25 -10
- package/test/internals/reply.test.js +31 -153
- package/test/internals/request-validate.test.js +21 -12
- package/test/internals/request.test.js +1 -18
- package/test/internals/validation.test.js +49 -56
- package/test/listen.1.test.js +66 -14
- package/test/listen.5.test.js +11 -0
- package/test/reply-trailers.test.js +1 -32
- package/test/route-shorthand.test.js +3 -1
- package/test/route.3.test.js +4 -1
- package/test/route.7.test.js +2 -12
- package/test/route.8.test.js +34 -5
- package/test/router-options.test.js +6 -3
- package/test/schema-examples.test.js +15 -6
- package/test/schema-feature.test.js +178 -35
- package/test/schema-serialization.test.js +125 -21
- package/test/schema-validation.test.js +154 -3
- package/test/skip-reply-send.test.js +6 -6
- package/test/stream-serializers.test.js +37 -0
- package/test/throw.test.js +2 -14
- package/test/types/errors.test-d.ts +1 -2
- package/test/types/fastify.test-d.ts +23 -34
- package/test/types/hooks.test-d.ts +56 -56
- package/test/types/instance.test-d.ts +3 -3
- package/test/types/reply.test-d.ts +7 -8
- package/test/types/request.test-d.ts +2 -12
- package/test/types/route.test-d.ts +158 -158
- package/test/types/schema.test-d.ts +22 -5
- package/test/versioned-routes.test.js +0 -90
- package/test/web-api.test.js +75 -0
- package/types/errors.d.ts +78 -79
- package/types/hooks.d.ts +18 -18
- package/types/instance.d.ts +1 -1
- package/types/logger.d.ts +7 -7
- package/types/reply.d.ts +18 -22
- package/types/request.d.ts +8 -14
- package/types/route.d.ts +5 -6
- package/types/type-provider.d.ts +1 -1
- package/.tap/processinfo/09002e93-10ad-430c-bc86-c0576928b0ed.json +0 -241
- package/.tap/processinfo/ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json +0 -268
- package/.tap/test-results/test/404s.test.js.tap +0 -623
- package/.tap/test-results/test/500s.test.js.tap +0 -64
- package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +0 -36
- package/.tap/test-results/test/als.test.js.tap +0 -15
- package/.tap/test-results/test/async-await.test.js.tap +0 -184
- package/.tap/test-results/test/async-dispose.test.js.tap +0 -8
- package/.tap/test-results/test/async_hooks.test.js.tap +0 -10
- package/.tap/test-results/test/bodyLimit.test.js.tap +0 -48
- package/.tap/test-results/test/buffer.test.js.tap +0 -20
- package/.tap/test-results/test/build/error-serializer.test.js.tap +0 -12
- package/.tap/test-results/test/build/version.test.js.tap +0 -7
- package/.tap/test-results/test/case-insensitive.test.js.tap +0 -36
- package/.tap/test-results/test/chainable.test.js.tap +0 -17
- package/.tap/test-results/test/check.test.js.tap +0 -10
- package/.tap/test-results/test/childLoggerFactory.test.js.tap +0 -23
- package/.tap/test-results/test/client-timeout.test.js.tap +0 -7
- package/.tap/test-results/test/close-pipelining.test.js.tap +0 -15
- package/.tap/test-results/test/close.test.js.tap +0 -172
- package/.tap/test-results/test/connectionTimeout.test.js.tap +0 -12
- package/.tap/test-results/test/constrained-routes.test.js.tap +0 -173
- package/.tap/test-results/test/content-length.test.js.tap +0 -46
- package/.tap/test-results/test/content-parser.test.js.tap +0 -266
- package/.tap/test-results/test/content-type.test.js.tap +0 -14
- package/.tap/test-results/test/context-config.test.js.tap +0 -41
- package/.tap/test-results/test/copy.test.js.tap +0 -14
- package/.tap/test-results/test/custom-http-server.test.js.tap +0 -30
- package/.tap/test-results/test/custom-parser-async.test.js.tap +0 -21
- package/.tap/test-results/test/custom-parser.0.test.js.tap +0 -199
- package/.tap/test-results/test/custom-parser.1.test.js.tap +0 -90
- package/.tap/test-results/test/custom-parser.2.test.js.tap +0 -22
- package/.tap/test-results/test/custom-parser.3.test.js.tap +0 -53
- package/.tap/test-results/test/custom-parser.4.test.js.tap +0 -45
- package/.tap/test-results/test/custom-parser.5.test.js.tap +0 -41
- package/.tap/test-results/test/custom-querystring-parser.test.js.tap +0 -46
- package/.tap/test-results/test/decorator.test.js.tap +0 -465
- package/.tap/test-results/test/delete.test.js.tap +0 -110
- package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +0 -15
- package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +0 -25
- package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +0 -24
- package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +0 -9
- package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +0 -20
- package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +0 -10
- package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +0 -14
- package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +0 -16
- package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +0 -16
- package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +0 -19
- package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +0 -18
- package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +0 -243
- package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +0 -9
- package/.tap/test-results/test/esm/esm.test.mjs.tap +0 -8
- package/.tap/test-results/test/esm/index.test.js.tap +0 -8
- package/.tap/test-results/test/fastify-instance.test.js.tap +0 -114
- package/.tap/test-results/test/findRoute.test.js.tap +0 -37
- package/.tap/test-results/test/fluent-schema.test.js.tap +0 -36
- package/.tap/test-results/test/genReqId.test.js.tap +0 -106
- package/.tap/test-results/test/get.test.js.tap +0 -151
- package/.tap/test-results/test/handler-context.test.js.tap +0 -19
- package/.tap/test-results/test/has-route.test.js.tap +0 -30
- package/.tap/test-results/test/head.test.js.tap +0 -130
- package/.tap/test-results/test/header-overflow.test.js.tap +0 -16
- package/.tap/test-results/test/hooks-async.test.js.tap +0 -286
- package/.tap/test-results/test/hooks.on-listen.test.js.tap +0 -311
- package/.tap/test-results/test/hooks.on-ready.test.js.tap +0 -151
- package/.tap/test-results/test/hooks.test.js.tap +0 -966
- package/.tap/test-results/test/http2/closing.test.js.tap +0 -35
- package/.tap/test-results/test/http2/constraint.test.js.tap +0 -32
- package/.tap/test-results/test/http2/head.test.js.tap +0 -9
- package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +0 -8
- package/.tap/test-results/test/http2/plain.test.js.tap +0 -22
- package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +0 -40
- package/.tap/test-results/test/http2/secure.test.js.tap +0 -27
- package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +0 -9
- package/.tap/test-results/test/https/custom-https-server.test.js.tap +0 -10
- package/.tap/test-results/test/https/https.test.js.tap +0 -45
- package/.tap/test-results/test/imports.test.js.tap +0 -14
- package/.tap/test-results/test/inject.test.js.tap +0 -165
- package/.tap/test-results/test/internals/all.test.js.tap +0 -42
- package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +0 -14
- package/.tap/test-results/test/internals/context.test.js.tap +0 -14
- package/.tap/test-results/test/internals/decorator.test.js.tap +0 -51
- package/.tap/test-results/test/internals/errors.test.js.tap +0 -1212
- package/.tap/test-results/test/internals/handleRequest.test.js.tap +0 -69
- package/.tap/test-results/test/internals/hookRunner.test.js.tap +0 -143
- package/.tap/test-results/test/internals/hooks.test.js.tap +0 -45
- package/.tap/test-results/test/internals/initialConfig.test.js.tap +0 -125
- package/.tap/test-results/test/internals/logger.test.js.tap +0 -71
- package/.tap/test-results/test/internals/plugin.test.js.tap +0 -48
- package/.tap/test-results/test/internals/reply-serialize.test.js.tap +0 -166
- package/.tap/test-results/test/internals/reply.test.js.tap +0 -688
- package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +0 -74
- package/.tap/test-results/test/internals/request-validate.test.js.tap +0 -384
- package/.tap/test-results/test/internals/request.test.js.tap +0 -163
- package/.tap/test-results/test/internals/server.test.js.tap +0 -30
- package/.tap/test-results/test/internals/validation.test.js.tap +0 -121
- package/.tap/test-results/test/keepAliveTimeout.test.js.tap +0 -12
- package/.tap/test-results/test/listen.1.test.js.tap +0 -31
- package/.tap/test-results/test/listen.2.test.js.tap +0 -46
- package/.tap/test-results/test/listen.3.test.js.tap +0 -25
- package/.tap/test-results/test/listen.4.test.js.tap +0 -51
- package/.tap/test-results/test/lock.test.js.tap +0 -29
- package/.tap/test-results/test/logger/instantiation.test.js.tap +0 -92
- package/.tap/test-results/test/logger/logging.test.js.tap +0 -117
- package/.tap/test-results/test/logger/options.test.js.tap +0 -165
- package/.tap/test-results/test/logger/request.test.js.tap +0 -82
- package/.tap/test-results/test/logger/response.test.js.tap +0 -38
- package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +0 -44
- package/.tap/test-results/test/method-missing.test.js.tap +0 -8
- package/.tap/test-results/test/middleware.test.js.tap +0 -17
- package/.tap/test-results/test/mkcalendar.test.js.tap +0 -43
- package/.tap/test-results/test/mkcol.test.js.tap +0 -14
- package/.tap/test-results/test/move.test.js.tap +0 -15
- package/.tap/test-results/test/noop-set.test.js.tap +0 -8
- package/.tap/test-results/test/nullable-validation.test.js.tap +0 -36
- package/.tap/test-results/test/options.error-handler.test.js.tap +0 -186
- package/.tap/test-results/test/options.test.js.tap +0 -174
- package/.tap/test-results/test/output-validation.test.js.tap +0 -66
- package/.tap/test-results/test/patch.error-handler.test.js.tap +0 -206
- package/.tap/test-results/test/patch.test.js.tap +0 -182
- package/.tap/test-results/test/plugin.1.test.js.tap +0 -78
- package/.tap/test-results/test/plugin.2.test.js.tap +0 -102
- package/.tap/test-results/test/plugin.3.test.js.tap +0 -58
- package/.tap/test-results/test/plugin.4.test.js.tap +0 -164
- package/.tap/test-results/test/post-empty-body.test.js.tap +0 -8
- package/.tap/test-results/test/pretty-print.test.js.tap +0 -82
- package/.tap/test-results/test/promises.test.js.tap +0 -46
- package/.tap/test-results/test/propfind.test.js.tap +0 -43
- package/.tap/test-results/test/proppatch.test.js.tap +0 -29
- package/.tap/test-results/test/proto-poisoning.test.js.tap +0 -47
- package/.tap/test-results/test/put.error-handler.test.js.tap +0 -206
- package/.tap/test-results/test/put.test.js.tap +0 -182
- package/.tap/test-results/test/register.test.js.tap +0 -61
- package/.tap/test-results/test/reply-code.test.js.tap +0 -40
- package/.tap/test-results/test/reply-earlyHints.test.js.tap +0 -22
- package/.tap/test-results/test/reply-error.test.js.tap +0 -643
- package/.tap/test-results/test/reply-trailers.test.js.tap +0 -176
- package/.tap/test-results/test/report.test.js.tap +0 -43
- package/.tap/test-results/test/request-error.test.js.tap +0 -98
- package/.tap/test-results/test/request-id.test.js.tap +0 -38
- package/.tap/test-results/test/request.deprecated.test.js.tap +0 -13
- package/.tap/test-results/test/requestTimeout.test.js.tap +0 -21
- package/.tap/test-results/test/route-hooks.test.js.tap +0 -498
- package/.tap/test-results/test/route-prefix.test.js.tap +0 -195
- package/.tap/test-results/test/route-shorthand.test.js.tap +0 -190
- package/.tap/test-results/test/route.1.test.js.tap +0 -93
- package/.tap/test-results/test/route.2.test.js.tap +0 -28
- package/.tap/test-results/test/route.3.test.js.tap +0 -39
- package/.tap/test-results/test/route.4.test.js.tap +0 -32
- package/.tap/test-results/test/route.5.test.js.tap +0 -54
- package/.tap/test-results/test/route.6.test.js.tap +0 -81
- package/.tap/test-results/test/route.7.test.js.tap +0 -93
- package/.tap/test-results/test/route.8.test.js.tap +0 -38
- package/.tap/test-results/test/router-options.test.js.tap +0 -104
- package/.tap/test-results/test/same-shape.test.js.tap +0 -22
- package/.tap/test-results/test/schema-examples.test.js.tap +0 -85
- package/.tap/test-results/test/schema-feature.test.js.tap +0 -445
- package/.tap/test-results/test/schema-serialization.test.js.tap +0 -194
- package/.tap/test-results/test/schema-special-usage.test.js.tap +0 -186
- package/.tap/test-results/test/schema-validation.test.js.tap +0 -199
- package/.tap/test-results/test/search.test.js.tap +0 -77
- package/.tap/test-results/test/serialize-response.test.js.tap +0 -26
- package/.tap/test-results/test/server.test.js.tap +0 -65
- package/.tap/test-results/test/set-error-handler.test.js.tap +0 -7
- package/.tap/test-results/test/skip-reply-send.test.js.tap +0 -272
- package/.tap/test-results/test/stream.1.test.js.tap +0 -36
- package/.tap/test-results/test/stream.2.test.js.tap +0 -20
- package/.tap/test-results/test/stream.3.test.js.tap +0 -34
- package/.tap/test-results/test/stream.4.test.js.tap +0 -40
- package/.tap/test-results/test/stream.5.test.js.tap +0 -37
- package/.tap/test-results/test/sync-routes.test.js.tap +0 -19
- package/.tap/test-results/test/throw.test.js.tap +0 -116
- package/.tap/test-results/test/trace.test.js.tap +0 -7
- package/.tap/test-results/test/trust-proxy.test.js.tap +0 -109
- package/.tap/test-results/test/type-provider.test.js.tap +0 -12
- package/.tap/test-results/test/unlock.test.js.tap +0 -14
- package/.tap/test-results/test/upgrade.test.js.tap +0 -8
- package/.tap/test-results/test/url-rewriting.test.js.tap +0 -39
- package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +0 -33
- package/.tap/test-results/test/validation-error-handling.test.js.tap +0 -180
- package/.tap/test-results/test/versioned-routes.test.js.tap +0 -151
- package/.tap/test-results/test/web-api.test.js.tap +0 -51
- package/.tap/test-results/test/wrapThenable.test.js.tap +0 -11
- package/EXPENSE_POLICY.md +0 -105
- package/lib/httpMethods.js +0 -40
- package/test/method-missing.test.js +0 -24
- 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 {
|
|
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
|
}
|
package/lib/wrapThenable.js
CHANGED
|
@@ -5,7 +5,7 @@ const {
|
|
|
5
5
|
kReplyHijacked
|
|
6
6
|
} = require('./symbols')
|
|
7
7
|
|
|
8
|
-
const diagnostics = require('
|
|
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.
|
|
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.
|
|
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": "^
|
|
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": "^
|
|
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.
|
|
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": "^
|
|
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": "^
|
|
194
|
-
"@fastify/error": "^
|
|
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": "^
|
|
198
|
-
"
|
|
199
|
-
"
|
|
200
|
-
"
|
|
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": "^
|
|
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",
|
package/test/decorator.test.js
CHANGED
|
@@ -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.
|
|
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('
|
|
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')
|
|
@@ -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('
|
|
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
|
-
'
|
|
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
|
-
'
|
|
49
|
+
'node:diagnostics_channel': diagnostics
|
|
50
50
|
})()
|
|
51
51
|
})
|
|
@@ -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: {
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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('
|
|
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('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('
|
|
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">
|