fastify 5.0.0 → 5.2.0
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/.borp.yaml +3 -0
- package/.vscode/settings.json +22 -0
- package/README.md +12 -7
- package/docs/Guides/Database.md +15 -15
- package/docs/Guides/Detecting-When-Clients-Abort.md +28 -28
- package/docs/Guides/Ecosystem.md +14 -15
- package/docs/Guides/Index.md +1 -1
- package/docs/Guides/Migration-Guide-V4.md +11 -11
- package/docs/Guides/Migration-Guide-V5.md +133 -9
- package/docs/Guides/Plugins-Guide.md +1 -1
- package/docs/Guides/Prototype-Poisoning.md +3 -3
- package/docs/Guides/Recommendations.md +9 -9
- package/docs/Guides/Serverless.md +5 -5
- package/docs/Guides/Testing.md +58 -57
- package/docs/Guides/Write-Plugin.md +2 -2
- package/docs/Guides/Write-Type-Provider.md +3 -3
- package/docs/Reference/ContentTypeParser.md +4 -4
- package/docs/Reference/Decorators.md +2 -2
- package/docs/Reference/Errors.md +3 -3
- package/docs/Reference/Hooks.md +7 -7
- package/docs/Reference/LTS.md +8 -0
- package/docs/Reference/Logging.md +5 -4
- package/docs/Reference/Reply.md +55 -58
- package/docs/Reference/Request.md +49 -42
- package/docs/Reference/Routes.md +16 -13
- package/docs/Reference/Server.md +32 -28
- package/docs/Reference/TypeScript.md +9 -9
- package/docs/Reference/Validation-and-Serialization.md +5 -5
- package/examples/typescript-server.ts +1 -1
- package/fastify.d.ts +14 -5
- package/fastify.js +8 -6
- package/lib/contentTypeParser.js +9 -7
- package/lib/context.js +1 -2
- package/lib/error-handler.js +9 -9
- package/lib/errors.js +1 -1
- package/lib/fourOhFour.js +1 -1
- package/lib/hooks.js +4 -1
- package/lib/{logger.js → logger-factory.js} +70 -122
- package/lib/logger-pino.js +68 -0
- package/lib/pluginOverride.js +1 -1
- package/lib/pluginUtils.js +2 -2
- package/lib/reply.js +4 -5
- package/lib/request.js +16 -9
- package/lib/route.js +23 -22
- package/lib/validation.js +2 -2
- package/package.json +13 -15
- package/test/404s.test.js +675 -629
- package/test/500s.test.js +72 -63
- package/test/{allowUnsafeRegex.test.js → allow-unsafe-regex.test.js} +30 -26
- package/test/als.test.js +48 -45
- package/test/async-await.test.js +148 -134
- package/test/async-dispose.test.js +4 -5
- package/test/async_hooks.test.js +30 -28
- package/test/{bodyLimit.test.js → body-limit.test.js} +61 -58
- package/test/buffer.test.js +9 -10
- package/test/build/error-serializer.test.js +3 -4
- package/test/build/version.test.js +2 -3
- package/test/build-certificate.js +1 -1
- package/test/bundler/README.md +5 -5
- package/test/bundler/esbuild/bundler-test.js +10 -9
- package/test/bundler/webpack/bundler-test.js +10 -9
- package/test/case-insensitive.test.js +31 -28
- package/test/chainable.test.js +4 -5
- package/test/check.test.js +8 -10
- package/test/{childLoggerFactory.test.js → child-logger-factory.test.js} +56 -19
- package/test/client-timeout.test.js +5 -5
- package/test/close-pipelining.test.js +6 -8
- package/test/conditional-pino.test.js +47 -0
- package/test/{connectionTimeout.test.js → connection-timeout.test.js} +10 -11
- package/test/constrained-routes.test.js +243 -236
- package/test/content-length.test.js +53 -68
- package/test/content-parser.test.js +186 -158
- package/test/content-type.test.js +8 -9
- package/test/context-config.test.js +44 -54
- package/test/custom-http-server.test.js +16 -20
- package/test/custom-parser.5.test.js +32 -32
- package/test/diagnostics-channel/404.test.js +15 -15
- package/test/diagnostics-channel/async-delay-request.test.js +25 -25
- package/test/diagnostics-channel/async-request.test.js +24 -24
- package/test/diagnostics-channel/error-before-handler.test.js +4 -5
- package/test/diagnostics-channel/error-request.test.js +19 -19
- package/test/diagnostics-channel/error-status.test.js +8 -8
- package/test/diagnostics-channel/init.test.js +6 -7
- package/test/diagnostics-channel/sync-delay-request.test.js +16 -16
- package/test/diagnostics-channel/sync-request-reply.test.js +16 -16
- package/test/diagnostics-channel/sync-request.test.js +19 -19
- package/test/encapsulated-child-logger-factory.test.js +8 -8
- package/test/encapsulated-error-handler.test.js +20 -20
- package/test/esm/errorCodes.test.mjs +5 -5
- package/test/esm/esm.test.mjs +3 -3
- package/test/esm/named-exports.mjs +3 -3
- package/test/esm/other.mjs +2 -2
- package/test/fastify-instance.test.js +33 -34
- package/test/{findRoute.test.js → find-route.test.js} +11 -10
- package/test/fluent-schema.test.js +33 -36
- package/test/handler-context.test.js +11 -11
- package/test/has-route.test.js +12 -15
- package/test/header-overflow.test.js +13 -12
- package/test/hooks.on-ready.test.js +2 -2
- package/test/hooks.test.js +25 -25
- package/test/http-methods/copy.test.js +22 -24
- package/test/http-methods/custom-http-methods.test.js +24 -21
- package/test/http-methods/get.test.js +97 -84
- package/test/http-methods/head.test.js +63 -57
- package/test/http-methods/lock.test.js +21 -20
- package/test/http-methods/mkcalendar.test.js +31 -27
- package/test/http-methods/mkcol.test.js +10 -10
- package/test/http-methods/move.test.js +11 -11
- package/test/http-methods/propfind.test.js +32 -27
- package/test/http-methods/proppatch.test.js +21 -19
- package/test/http-methods/report.test.js +32 -27
- package/test/http-methods/search.test.js +52 -47
- package/test/http-methods/trace.test.js +3 -4
- package/test/http-methods/unlock.test.js +10 -10
- package/test/http2/closing.test.js +50 -58
- package/test/http2/constraint.test.js +47 -50
- package/test/http2/head.test.js +18 -19
- package/test/http2/missing-http2-module.test.js +4 -5
- package/test/http2/plain.test.js +31 -31
- package/test/http2/secure-with-fallback.test.js +61 -61
- package/test/http2/secure.test.js +28 -31
- package/test/http2/unknown-http-method.test.js +13 -14
- package/test/https/custom-https-server.test.js +6 -7
- package/test/https/https.test.js +78 -78
- package/test/imports.test.js +5 -6
- package/test/internals/all.test.js +8 -11
- package/test/internals/{contentTypeParser.test.js → content-type-parser.test.js} +5 -6
- package/test/internals/context.test.js +9 -11
- package/test/internals/decorator.test.js +20 -21
- package/test/internals/errors.test.js +427 -427
- package/test/internals/{handleRequest.test.js → handle-request.test.js} +53 -42
- package/test/internals/{hookRunner.test.js → hook-runner.test.js} +99 -100
- package/test/internals/hooks.test.js +31 -35
- package/test/internals/{initialConfig.test.js → initial-config.test.js} +92 -80
- package/test/internals/logger.test.js +28 -28
- package/test/internals/plugin.test.js +17 -18
- package/test/internals/reply-serialize.test.js +106 -106
- package/test/internals/reply.test.js +620 -585
- package/test/internals/{reqIdGenFactory.test.js → req-id-gen-factory.test.js} +31 -31
- package/test/internals/request-validate.test.js +218 -221
- package/test/internals/request.test.js +225 -107
- package/test/internals/server.test.js +15 -12
- package/test/internals/validation.test.js +35 -36
- package/test/{keepAliveTimeout.test.js → keep-alive-timeout.test.js} +9 -10
- package/test/listen.5.test.js +9 -9
- package/test/{maxRequestsPerSocket.test.js → max-requests-per-socket.test.js} +30 -30
- package/test/middleware.test.js +4 -5
- package/test/noop-set.test.js +5 -5
- package/test/post-empty-body.test.js +18 -11
- package/test/pretty-print.test.js +59 -49
- package/test/proto-poisoning.test.js +42 -37
- package/test/reply-code.test.js +34 -32
- package/test/{reply-earlyHints.test.js → reply-early-hints.test.js} +21 -19
- package/test/request-error.test.js +122 -0
- package/test/request-header-host.test.js +339 -0
- package/test/request-id.test.js +31 -25
- package/test/{requestTimeout.test.js → request-timeout.test.js} +11 -11
- package/test/route.1.test.js +79 -72
- package/test/route.2.test.js +17 -16
- package/test/route.3.test.js +32 -27
- package/test/route.4.test.js +21 -25
- package/test/route.5.test.js +45 -64
- package/test/route.6.test.js +70 -89
- package/test/route.7.test.js +61 -65
- package/test/route.8.test.js +80 -18
- package/test/router-options.test.js +80 -77
- package/test/same-shape.test.js +5 -5
- package/test/schema-examples.test.js +72 -38
- package/test/serialize-response.test.js +9 -10
- package/test/server.test.js +75 -78
- package/test/set-error-handler.test.js +2 -3
- package/test/stream-serializers.test.js +10 -7
- package/test/sync-routes.test.js +18 -18
- package/test/test-reporter.mjs +68 -0
- package/test/trust-proxy.test.js +51 -45
- package/test/type-provider.test.js +8 -6
- package/test/types/content-type-parser.test-d.ts +1 -1
- package/test/types/fastify.test-d.ts +16 -4
- package/test/types/hooks.test-d.ts +2 -1
- package/test/types/instance.test-d.ts +13 -13
- package/test/types/logger.test-d.ts +2 -2
- package/test/types/plugin.test-d.ts +17 -9
- package/test/types/register.test-d.ts +22 -6
- package/test/types/reply.test-d.ts +1 -1
- package/test/types/route.test-d.ts +34 -4
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +1 -1
- package/test/url-rewriting.test.js +35 -38
- package/test/{useSemicolonDelimiter.test.js → use-semicolon-delimiter.test.js} +30 -30
- package/test/validation-error-handling.test.js +259 -285
- package/test/versioned-routes.test.js +126 -113
- package/test/web-api.test.js +48 -37
- package/test/{wrapThenable.test.js → wrap-thenable.test.js} +10 -9
- package/types/hooks.d.ts +2 -1
- package/types/instance.d.ts +9 -2
- package/types/register.d.ts +12 -3
- package/types/reply.d.ts +1 -1
- package/types/request.d.ts +2 -6
- package/types/serverFactory.d.ts +3 -3
- package/types/utils.d.ts +13 -5
- package/test/types/import.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
3
|
+
const { test } = require('node:test')
|
|
4
4
|
const { reqIdGenFactory } = require('../../lib/reqIdGenFactory')
|
|
5
5
|
|
|
6
6
|
test('should create incremental ids deterministically', t => {
|
|
@@ -9,18 +9,18 @@ test('should create incremental ids deterministically', t => {
|
|
|
9
9
|
|
|
10
10
|
for (let i = 1; i < 1e4; ++i) {
|
|
11
11
|
if (reqIdGen() !== 'req-' + i.toString(36)) {
|
|
12
|
-
t.fail()
|
|
12
|
+
t.assert.fail()
|
|
13
13
|
break
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
t.
|
|
16
|
+
t.assert.ok(true)
|
|
17
17
|
})
|
|
18
18
|
|
|
19
19
|
test('should have prefix "req-"', t => {
|
|
20
20
|
t.plan(1)
|
|
21
21
|
const reqIdGen = reqIdGenFactory()
|
|
22
22
|
|
|
23
|
-
t.ok(reqIdGen().startsWith('req-'))
|
|
23
|
+
t.assert.ok(reqIdGen().startsWith('req-'))
|
|
24
24
|
})
|
|
25
25
|
|
|
26
26
|
test('different id generator functions should have separate internal counters', t => {
|
|
@@ -28,18 +28,18 @@ test('different id generator functions should have separate internal counters',
|
|
|
28
28
|
const reqIdGenA = reqIdGenFactory()
|
|
29
29
|
const reqIdGenB = reqIdGenFactory()
|
|
30
30
|
|
|
31
|
-
t.
|
|
32
|
-
t.
|
|
33
|
-
t.
|
|
34
|
-
t.
|
|
35
|
-
t.
|
|
31
|
+
t.assert.strictEqual(reqIdGenA(), 'req-1')
|
|
32
|
+
t.assert.strictEqual(reqIdGenA(), 'req-2')
|
|
33
|
+
t.assert.strictEqual(reqIdGenB(), 'req-1')
|
|
34
|
+
t.assert.strictEqual(reqIdGenA(), 'req-3')
|
|
35
|
+
t.assert.strictEqual(reqIdGenB(), 'req-2')
|
|
36
36
|
})
|
|
37
37
|
|
|
38
38
|
test('should start counting with 1', t => {
|
|
39
39
|
t.plan(1)
|
|
40
40
|
const reqIdGen = reqIdGenFactory()
|
|
41
41
|
|
|
42
|
-
t.
|
|
42
|
+
t.assert.strictEqual(reqIdGen(), 'req-1')
|
|
43
43
|
})
|
|
44
44
|
|
|
45
45
|
test('should handle requestIdHeader and return provided id in header', t => {
|
|
@@ -47,7 +47,7 @@ test('should handle requestIdHeader and return provided id in header', t => {
|
|
|
47
47
|
|
|
48
48
|
const reqIdGen = reqIdGenFactory('id')
|
|
49
49
|
|
|
50
|
-
t.
|
|
50
|
+
t.assert.strictEqual(reqIdGen({ headers: { id: '1337' } }), '1337')
|
|
51
51
|
})
|
|
52
52
|
|
|
53
53
|
test('should handle requestIdHeader and fallback if id is not provided in header', t => {
|
|
@@ -55,7 +55,7 @@ test('should handle requestIdHeader and fallback if id is not provided in header
|
|
|
55
55
|
|
|
56
56
|
const reqIdGen = reqIdGenFactory('id')
|
|
57
57
|
|
|
58
|
-
t.
|
|
58
|
+
t.assert.strictEqual(reqIdGen({ headers: { notId: '1337' } }), 'req-1')
|
|
59
59
|
})
|
|
60
60
|
|
|
61
61
|
test('should handle requestIdHeader and increment internal counter if no header was provided', t => {
|
|
@@ -63,10 +63,10 @@ test('should handle requestIdHeader and increment internal counter if no header
|
|
|
63
63
|
|
|
64
64
|
const reqIdGen = reqIdGenFactory('id')
|
|
65
65
|
|
|
66
|
-
t.
|
|
67
|
-
t.
|
|
68
|
-
t.
|
|
69
|
-
t.
|
|
66
|
+
t.assert.strictEqual(reqIdGen({ headers: {} }), 'req-1')
|
|
67
|
+
t.assert.strictEqual(reqIdGen({ headers: {} }), 'req-2')
|
|
68
|
+
t.assert.strictEqual(reqIdGen({ headers: { id: '1337' } }), '1337')
|
|
69
|
+
t.assert.strictEqual(reqIdGen({ headers: {} }), 'req-3')
|
|
70
70
|
})
|
|
71
71
|
|
|
72
72
|
test('should use optGenReqId to generate ids', t => {
|
|
@@ -80,10 +80,10 @@ test('should use optGenReqId to generate ids', t => {
|
|
|
80
80
|
}
|
|
81
81
|
const reqIdGen = reqIdGenFactory(undefined, optGenReqId)
|
|
82
82
|
|
|
83
|
-
t.
|
|
84
|
-
t.
|
|
85
|
-
t.
|
|
86
|
-
t.
|
|
83
|
+
t.assert.strictEqual(gotCalled, false)
|
|
84
|
+
t.assert.strictEqual(reqIdGen(), '1')
|
|
85
|
+
t.assert.strictEqual(gotCalled, true)
|
|
86
|
+
t.assert.strictEqual(reqIdGen(), '2')
|
|
87
87
|
})
|
|
88
88
|
|
|
89
89
|
test('should use optGenReqId to generate ids if requestIdHeader is used but not provided', t => {
|
|
@@ -97,22 +97,22 @@ test('should use optGenReqId to generate ids if requestIdHeader is used but not
|
|
|
97
97
|
}
|
|
98
98
|
const reqIdGen = reqIdGenFactory('reqId', optGenReqId)
|
|
99
99
|
|
|
100
|
-
t.
|
|
101
|
-
t.
|
|
102
|
-
t.
|
|
103
|
-
t.
|
|
100
|
+
t.assert.strictEqual(gotCalled, false)
|
|
101
|
+
t.assert.strictEqual(reqIdGen({ headers: {} }), '1')
|
|
102
|
+
t.assert.strictEqual(gotCalled, true)
|
|
103
|
+
t.assert.strictEqual(reqIdGen({ headers: {} }), '2')
|
|
104
104
|
})
|
|
105
105
|
|
|
106
106
|
test('should not use optGenReqId to generate ids if requestIdHeader is used and provided', t => {
|
|
107
107
|
t.plan(2)
|
|
108
108
|
|
|
109
109
|
function optGenReqId () {
|
|
110
|
-
t.fail()
|
|
110
|
+
t.assert.fail()
|
|
111
111
|
}
|
|
112
112
|
const reqIdGen = reqIdGenFactory('reqId', optGenReqId)
|
|
113
113
|
|
|
114
|
-
t.
|
|
115
|
-
t.
|
|
114
|
+
t.assert.strictEqual(reqIdGen({ headers: { reqId: 'r1' } }), 'r1')
|
|
115
|
+
t.assert.strictEqual(reqIdGen({ headers: { reqId: 'r2' } }), 'r2')
|
|
116
116
|
})
|
|
117
117
|
|
|
118
118
|
test('should fallback to use optGenReqId to generate ids if requestIdHeader is sometimes provided', t => {
|
|
@@ -126,8 +126,8 @@ test('should fallback to use optGenReqId to generate ids if requestIdHeader is s
|
|
|
126
126
|
}
|
|
127
127
|
const reqIdGen = reqIdGenFactory('reqId', optGenReqId)
|
|
128
128
|
|
|
129
|
-
t.
|
|
130
|
-
t.
|
|
131
|
-
t.
|
|
132
|
-
t.
|
|
129
|
+
t.assert.strictEqual(reqIdGen({ headers: { reqId: 'r1' } }), 'r1')
|
|
130
|
+
t.assert.strictEqual(gotCalled, false)
|
|
131
|
+
t.assert.strictEqual(reqIdGen({ headers: {} }), '1')
|
|
132
|
+
t.assert.strictEqual(gotCalled, true)
|
|
133
133
|
})
|