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.
Files changed (201) hide show
  1. package/.borp.yaml +3 -0
  2. package/.vscode/settings.json +22 -0
  3. package/README.md +12 -7
  4. package/docs/Guides/Database.md +15 -15
  5. package/docs/Guides/Detecting-When-Clients-Abort.md +28 -28
  6. package/docs/Guides/Ecosystem.md +14 -15
  7. package/docs/Guides/Index.md +1 -1
  8. package/docs/Guides/Migration-Guide-V4.md +11 -11
  9. package/docs/Guides/Migration-Guide-V5.md +133 -9
  10. package/docs/Guides/Plugins-Guide.md +1 -1
  11. package/docs/Guides/Prototype-Poisoning.md +3 -3
  12. package/docs/Guides/Recommendations.md +9 -9
  13. package/docs/Guides/Serverless.md +5 -5
  14. package/docs/Guides/Testing.md +58 -57
  15. package/docs/Guides/Write-Plugin.md +2 -2
  16. package/docs/Guides/Write-Type-Provider.md +3 -3
  17. package/docs/Reference/ContentTypeParser.md +4 -4
  18. package/docs/Reference/Decorators.md +2 -2
  19. package/docs/Reference/Errors.md +3 -3
  20. package/docs/Reference/Hooks.md +7 -7
  21. package/docs/Reference/LTS.md +8 -0
  22. package/docs/Reference/Logging.md +5 -4
  23. package/docs/Reference/Reply.md +55 -58
  24. package/docs/Reference/Request.md +49 -42
  25. package/docs/Reference/Routes.md +16 -13
  26. package/docs/Reference/Server.md +32 -28
  27. package/docs/Reference/TypeScript.md +9 -9
  28. package/docs/Reference/Validation-and-Serialization.md +5 -5
  29. package/examples/typescript-server.ts +1 -1
  30. package/fastify.d.ts +14 -5
  31. package/fastify.js +8 -6
  32. package/lib/contentTypeParser.js +9 -7
  33. package/lib/context.js +1 -2
  34. package/lib/error-handler.js +9 -9
  35. package/lib/errors.js +1 -1
  36. package/lib/fourOhFour.js +1 -1
  37. package/lib/hooks.js +4 -1
  38. package/lib/{logger.js → logger-factory.js} +70 -122
  39. package/lib/logger-pino.js +68 -0
  40. package/lib/pluginOverride.js +1 -1
  41. package/lib/pluginUtils.js +2 -2
  42. package/lib/reply.js +4 -5
  43. package/lib/request.js +16 -9
  44. package/lib/route.js +23 -22
  45. package/lib/validation.js +2 -2
  46. package/package.json +13 -15
  47. package/test/404s.test.js +675 -629
  48. package/test/500s.test.js +72 -63
  49. package/test/{allowUnsafeRegex.test.js → allow-unsafe-regex.test.js} +30 -26
  50. package/test/als.test.js +48 -45
  51. package/test/async-await.test.js +148 -134
  52. package/test/async-dispose.test.js +4 -5
  53. package/test/async_hooks.test.js +30 -28
  54. package/test/{bodyLimit.test.js → body-limit.test.js} +61 -58
  55. package/test/buffer.test.js +9 -10
  56. package/test/build/error-serializer.test.js +3 -4
  57. package/test/build/version.test.js +2 -3
  58. package/test/build-certificate.js +1 -1
  59. package/test/bundler/README.md +5 -5
  60. package/test/bundler/esbuild/bundler-test.js +10 -9
  61. package/test/bundler/webpack/bundler-test.js +10 -9
  62. package/test/case-insensitive.test.js +31 -28
  63. package/test/chainable.test.js +4 -5
  64. package/test/check.test.js +8 -10
  65. package/test/{childLoggerFactory.test.js → child-logger-factory.test.js} +56 -19
  66. package/test/client-timeout.test.js +5 -5
  67. package/test/close-pipelining.test.js +6 -8
  68. package/test/conditional-pino.test.js +47 -0
  69. package/test/{connectionTimeout.test.js → connection-timeout.test.js} +10 -11
  70. package/test/constrained-routes.test.js +243 -236
  71. package/test/content-length.test.js +53 -68
  72. package/test/content-parser.test.js +186 -158
  73. package/test/content-type.test.js +8 -9
  74. package/test/context-config.test.js +44 -54
  75. package/test/custom-http-server.test.js +16 -20
  76. package/test/custom-parser.5.test.js +32 -32
  77. package/test/diagnostics-channel/404.test.js +15 -15
  78. package/test/diagnostics-channel/async-delay-request.test.js +25 -25
  79. package/test/diagnostics-channel/async-request.test.js +24 -24
  80. package/test/diagnostics-channel/error-before-handler.test.js +4 -5
  81. package/test/diagnostics-channel/error-request.test.js +19 -19
  82. package/test/diagnostics-channel/error-status.test.js +8 -8
  83. package/test/diagnostics-channel/init.test.js +6 -7
  84. package/test/diagnostics-channel/sync-delay-request.test.js +16 -16
  85. package/test/diagnostics-channel/sync-request-reply.test.js +16 -16
  86. package/test/diagnostics-channel/sync-request.test.js +19 -19
  87. package/test/encapsulated-child-logger-factory.test.js +8 -8
  88. package/test/encapsulated-error-handler.test.js +20 -20
  89. package/test/esm/errorCodes.test.mjs +5 -5
  90. package/test/esm/esm.test.mjs +3 -3
  91. package/test/esm/named-exports.mjs +3 -3
  92. package/test/esm/other.mjs +2 -2
  93. package/test/fastify-instance.test.js +33 -34
  94. package/test/{findRoute.test.js → find-route.test.js} +11 -10
  95. package/test/fluent-schema.test.js +33 -36
  96. package/test/handler-context.test.js +11 -11
  97. package/test/has-route.test.js +12 -15
  98. package/test/header-overflow.test.js +13 -12
  99. package/test/hooks.on-ready.test.js +2 -2
  100. package/test/hooks.test.js +25 -25
  101. package/test/http-methods/copy.test.js +22 -24
  102. package/test/http-methods/custom-http-methods.test.js +24 -21
  103. package/test/http-methods/get.test.js +97 -84
  104. package/test/http-methods/head.test.js +63 -57
  105. package/test/http-methods/lock.test.js +21 -20
  106. package/test/http-methods/mkcalendar.test.js +31 -27
  107. package/test/http-methods/mkcol.test.js +10 -10
  108. package/test/http-methods/move.test.js +11 -11
  109. package/test/http-methods/propfind.test.js +32 -27
  110. package/test/http-methods/proppatch.test.js +21 -19
  111. package/test/http-methods/report.test.js +32 -27
  112. package/test/http-methods/search.test.js +52 -47
  113. package/test/http-methods/trace.test.js +3 -4
  114. package/test/http-methods/unlock.test.js +10 -10
  115. package/test/http2/closing.test.js +50 -58
  116. package/test/http2/constraint.test.js +47 -50
  117. package/test/http2/head.test.js +18 -19
  118. package/test/http2/missing-http2-module.test.js +4 -5
  119. package/test/http2/plain.test.js +31 -31
  120. package/test/http2/secure-with-fallback.test.js +61 -61
  121. package/test/http2/secure.test.js +28 -31
  122. package/test/http2/unknown-http-method.test.js +13 -14
  123. package/test/https/custom-https-server.test.js +6 -7
  124. package/test/https/https.test.js +78 -78
  125. package/test/imports.test.js +5 -6
  126. package/test/internals/all.test.js +8 -11
  127. package/test/internals/{contentTypeParser.test.js → content-type-parser.test.js} +5 -6
  128. package/test/internals/context.test.js +9 -11
  129. package/test/internals/decorator.test.js +20 -21
  130. package/test/internals/errors.test.js +427 -427
  131. package/test/internals/{handleRequest.test.js → handle-request.test.js} +53 -42
  132. package/test/internals/{hookRunner.test.js → hook-runner.test.js} +99 -100
  133. package/test/internals/hooks.test.js +31 -35
  134. package/test/internals/{initialConfig.test.js → initial-config.test.js} +92 -80
  135. package/test/internals/logger.test.js +28 -28
  136. package/test/internals/plugin.test.js +17 -18
  137. package/test/internals/reply-serialize.test.js +106 -106
  138. package/test/internals/reply.test.js +620 -585
  139. package/test/internals/{reqIdGenFactory.test.js → req-id-gen-factory.test.js} +31 -31
  140. package/test/internals/request-validate.test.js +218 -221
  141. package/test/internals/request.test.js +225 -107
  142. package/test/internals/server.test.js +15 -12
  143. package/test/internals/validation.test.js +35 -36
  144. package/test/{keepAliveTimeout.test.js → keep-alive-timeout.test.js} +9 -10
  145. package/test/listen.5.test.js +9 -9
  146. package/test/{maxRequestsPerSocket.test.js → max-requests-per-socket.test.js} +30 -30
  147. package/test/middleware.test.js +4 -5
  148. package/test/noop-set.test.js +5 -5
  149. package/test/post-empty-body.test.js +18 -11
  150. package/test/pretty-print.test.js +59 -49
  151. package/test/proto-poisoning.test.js +42 -37
  152. package/test/reply-code.test.js +34 -32
  153. package/test/{reply-earlyHints.test.js → reply-early-hints.test.js} +21 -19
  154. package/test/request-error.test.js +122 -0
  155. package/test/request-header-host.test.js +339 -0
  156. package/test/request-id.test.js +31 -25
  157. package/test/{requestTimeout.test.js → request-timeout.test.js} +11 -11
  158. package/test/route.1.test.js +79 -72
  159. package/test/route.2.test.js +17 -16
  160. package/test/route.3.test.js +32 -27
  161. package/test/route.4.test.js +21 -25
  162. package/test/route.5.test.js +45 -64
  163. package/test/route.6.test.js +70 -89
  164. package/test/route.7.test.js +61 -65
  165. package/test/route.8.test.js +80 -18
  166. package/test/router-options.test.js +80 -77
  167. package/test/same-shape.test.js +5 -5
  168. package/test/schema-examples.test.js +72 -38
  169. package/test/serialize-response.test.js +9 -10
  170. package/test/server.test.js +75 -78
  171. package/test/set-error-handler.test.js +2 -3
  172. package/test/stream-serializers.test.js +10 -7
  173. package/test/sync-routes.test.js +18 -18
  174. package/test/test-reporter.mjs +68 -0
  175. package/test/trust-proxy.test.js +51 -45
  176. package/test/type-provider.test.js +8 -6
  177. package/test/types/content-type-parser.test-d.ts +1 -1
  178. package/test/types/fastify.test-d.ts +16 -4
  179. package/test/types/hooks.test-d.ts +2 -1
  180. package/test/types/instance.test-d.ts +13 -13
  181. package/test/types/logger.test-d.ts +2 -2
  182. package/test/types/plugin.test-d.ts +17 -9
  183. package/test/types/register.test-d.ts +22 -6
  184. package/test/types/reply.test-d.ts +1 -1
  185. package/test/types/route.test-d.ts +34 -4
  186. package/test/types/serverFactory.test-d.ts +1 -1
  187. package/test/types/type-provider.test-d.ts +1 -1
  188. package/test/url-rewriting.test.js +35 -38
  189. package/test/{useSemicolonDelimiter.test.js → use-semicolon-delimiter.test.js} +30 -30
  190. package/test/validation-error-handling.test.js +259 -285
  191. package/test/versioned-routes.test.js +126 -113
  192. package/test/web-api.test.js +48 -37
  193. package/test/{wrapThenable.test.js → wrap-thenable.test.js} +10 -9
  194. package/types/hooks.d.ts +2 -1
  195. package/types/instance.d.ts +9 -2
  196. package/types/register.d.ts +12 -3
  197. package/types/reply.d.ts +1 -1
  198. package/types/request.d.ts +2 -6
  199. package/types/serverFactory.d.ts +3 -3
  200. package/types/utils.d.ts +13 -5
  201. package/test/types/import.js +0 -2
@@ -1,120 +1,123 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
4
- const test = t.test
3
+ const { test } = require('node:test')
5
4
  const Fastify = require('..')
6
5
  const sget = require('simple-get').concat
7
6
 
8
- test('case insensitive', t => {
7
+ test('case insensitive', (t, done) => {
9
8
  t.plan(4)
10
9
 
11
10
  const fastify = Fastify({
12
11
  caseSensitive: false
13
12
  })
14
- t.teardown(fastify.close.bind(fastify))
13
+ t.after(() => fastify.close())
15
14
 
16
15
  fastify.get('/foo', (req, reply) => {
17
16
  reply.send({ hello: 'world' })
18
17
  })
19
18
 
20
19
  fastify.listen({ port: 0 }, err => {
21
- t.error(err)
20
+ t.assert.ifError(err)
22
21
 
23
22
  sget({
24
23
  method: 'GET',
25
24
  url: 'http://localhost:' + fastify.server.address().port + '/FOO'
26
25
  }, (err, response, body) => {
27
- t.error(err)
28
- t.equal(response.statusCode, 200)
29
- t.same(JSON.parse(body), {
26
+ t.assert.ifError(err)
27
+ t.assert.strictEqual(response.statusCode, 200)
28
+ t.assert.deepStrictEqual(JSON.parse(body), {
30
29
  hello: 'world'
31
30
  })
31
+ done()
32
32
  })
33
33
  })
34
34
  })
35
35
 
36
- test('case insensitive inject', t => {
36
+ test('case insensitive inject', (t, done) => {
37
37
  t.plan(4)
38
38
 
39
39
  const fastify = Fastify({
40
40
  caseSensitive: false
41
41
  })
42
- t.teardown(fastify.close.bind(fastify))
42
+ t.after(() => fastify.close())
43
43
 
44
44
  fastify.get('/foo', (req, reply) => {
45
45
  reply.send({ hello: 'world' })
46
46
  })
47
47
 
48
48
  fastify.listen({ port: 0 }, err => {
49
- t.error(err)
49
+ t.assert.ifError(err)
50
50
 
51
51
  fastify.inject({
52
52
  method: 'GET',
53
53
  url: 'http://localhost:' + fastify.server.address().port + '/FOO'
54
54
  }, (err, response) => {
55
- t.error(err)
56
- t.equal(response.statusCode, 200)
57
- t.same(JSON.parse(response.payload), {
55
+ t.assert.ifError(err)
56
+ t.assert.strictEqual(response.statusCode, 200)
57
+ t.assert.deepStrictEqual(JSON.parse(response.payload), {
58
58
  hello: 'world'
59
59
  })
60
+ done()
60
61
  })
61
62
  })
62
63
  })
63
64
 
64
- test('case insensitive (parametric)', t => {
65
+ test('case insensitive (parametric)', (t, done) => {
65
66
  t.plan(5)
66
67
 
67
68
  const fastify = Fastify({
68
69
  caseSensitive: false
69
70
  })
70
- t.teardown(fastify.close.bind(fastify))
71
+ t.after(() => fastify.close())
71
72
 
72
73
  fastify.get('/foo/:param', (req, reply) => {
73
- t.equal(req.params.param, 'bAr')
74
+ t.assert.strictEqual(req.params.param, 'bAr')
74
75
  reply.send({ hello: 'world' })
75
76
  })
76
77
 
77
78
  fastify.listen({ port: 0 }, err => {
78
- t.error(err)
79
+ t.assert.ifError(err)
79
80
 
80
81
  sget({
81
82
  method: 'GET',
82
83
  url: 'http://localhost:' + fastify.server.address().port + '/FoO/bAr'
83
84
  }, (err, response, body) => {
84
- t.error(err)
85
- t.equal(response.statusCode, 200)
86
- t.same(JSON.parse(body), {
85
+ t.assert.ifError(err)
86
+ t.assert.strictEqual(response.statusCode, 200)
87
+ t.assert.deepStrictEqual(JSON.parse(body), {
87
88
  hello: 'world'
88
89
  })
90
+ done()
89
91
  })
90
92
  })
91
93
  })
92
94
 
93
- test('case insensitive (wildcard)', t => {
95
+ test('case insensitive (wildcard)', (t, done) => {
94
96
  t.plan(5)
95
97
 
96
98
  const fastify = Fastify({
97
99
  caseSensitive: false
98
100
  })
99
- t.teardown(fastify.close.bind(fastify))
101
+ t.after(() => fastify.close())
100
102
 
101
103
  fastify.get('/foo/*', (req, reply) => {
102
- t.equal(req.params['*'], 'bAr/baZ')
104
+ t.assert.strictEqual(req.params['*'], 'bAr/baZ')
103
105
  reply.send({ hello: 'world' })
104
106
  })
105
107
 
106
108
  fastify.listen({ port: 0 }, err => {
107
- t.error(err)
109
+ t.assert.ifError(err)
108
110
 
109
111
  sget({
110
112
  method: 'GET',
111
113
  url: 'http://localhost:' + fastify.server.address().port + '/FoO/bAr/baZ'
112
114
  }, (err, response, body) => {
113
- t.error(err)
114
- t.equal(response.statusCode, 200)
115
- t.same(JSON.parse(body), {
115
+ t.assert.ifError(err)
116
+ t.assert.strictEqual(response.statusCode, 200)
117
+ t.assert.deepStrictEqual(JSON.parse(body), {
116
118
  hello: 'world'
117
119
  })
120
+ done()
118
121
  })
119
122
  })
120
123
  })
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
4
- const test = t.test
3
+ const { test } = require('node:test')
5
4
  const fastify = require('..')()
6
5
 
7
6
  const noop = () => {}
@@ -22,17 +21,17 @@ const opts = {
22
21
 
23
22
  test('chainable - get', t => {
24
23
  t.plan(1)
25
- t.type(fastify.get('/', opts, noop), fastify)
24
+ t.assert.strictEqual(fastify.get('/', opts, noop), fastify)
26
25
  })
27
26
 
28
27
  test('chainable - post', t => {
29
28
  t.plan(1)
30
- t.type(fastify.post('/', opts, noop), fastify)
29
+ t.assert.strictEqual(fastify.post('/', opts, noop), fastify)
31
30
  })
32
31
 
33
32
  test('chainable - route', t => {
34
33
  t.plan(1)
35
- t.type(fastify.route({
34
+ t.assert.strictEqual(fastify.route({
36
35
  method: 'GET',
37
36
  url: '/other',
38
37
  schema: opts.schema,
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
4
- const test = t.test
3
+ const { test } = require('node:test')
5
4
  const { S } = require('fluent-json-schema')
6
5
  const Fastify = require('..')
7
6
  const sget = require('simple-get').concat
@@ -73,7 +72,6 @@ const options = {
73
72
  }
74
73
 
75
74
  const handler = (request, reply) => {
76
- console.log('in handler')
77
75
  if (request.body.id === '400') {
78
76
  return reply.status(400).send({
79
77
  statusCode: 400,
@@ -107,15 +105,15 @@ const handler = (request, reply) => {
107
105
  })
108
106
  }
109
107
 
110
- test('serialize the response for a Bad Request error, as defined on the schema', t => {
108
+ test('serialize the response for a Bad Request error, as defined on the schema', (t, done) => {
111
109
  const fastify = Fastify({})
112
110
 
113
- t.teardown(fastify.close.bind(fastify))
111
+ t.after(() => fastify.close())
114
112
 
115
113
  fastify.post('/', options, handler)
116
114
 
117
115
  fastify.listen({ port: 0 }, err => {
118
- t.error(err)
116
+ t.assert.ifError(err)
119
117
 
120
118
  const url = `http://localhost:${fastify.server.address().port}/`
121
119
 
@@ -124,14 +122,14 @@ test('serialize the response for a Bad Request error, as defined on the schema',
124
122
  url,
125
123
  json: true
126
124
  }, (err, response, body) => {
127
- t.error(err)
128
- t.equal(response.statusCode, 400)
129
- t.same(body, {
125
+ t.assert.ifError(err)
126
+ t.assert.strictEqual(response.statusCode, 400)
127
+ t.assert.deepStrictEqual(body, {
130
128
  statusCode: 400,
131
129
  error: 'Bad Request',
132
130
  message: 'body must be object'
133
131
  })
134
- t.end()
132
+ done()
135
133
  })
136
134
  })
137
135
  })
@@ -1,15 +1,15 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const Fastify = require('..')
5
5
 
6
- test('Should accept a custom childLoggerFactory function', t => {
6
+ test('Should accept a custom childLoggerFactory function', (t, done) => {
7
7
  t.plan(4)
8
8
 
9
9
  const fastify = Fastify()
10
10
  fastify.setChildLoggerFactory(function (logger, bindings, opts) {
11
- t.ok(bindings.reqId)
12
- t.ok(opts)
11
+ t.assert.ok(bindings.reqId)
12
+ t.assert.ok(opts)
13
13
  this.log.debug(bindings, 'created child logger')
14
14
  return logger.child(bindings, opts)
15
15
  })
@@ -19,19 +19,52 @@ test('Should accept a custom childLoggerFactory function', t => {
19
19
  reply.send()
20
20
  })
21
21
 
22
+ t.after(() => fastify.close())
23
+
24
+ fastify.listen({ port: 0 }, err => {
25
+ t.assert.ifError(err)
26
+ fastify.inject({
27
+ method: 'GET',
28
+ url: 'http://localhost:' + fastify.server.address().port
29
+ }, (err, res) => {
30
+ t.assert.ifError(err)
31
+ done()
32
+ })
33
+ })
34
+ })
35
+
36
+ test('Should accept a custom childLoggerFactory function as option', (t, done) => {
37
+ t.plan(2)
38
+
39
+ const fastify = Fastify({
40
+ childLoggerFactory: function (logger, bindings, opts) {
41
+ t.ok(bindings.reqId)
42
+ t.ok(opts)
43
+ this.log.debug(bindings, 'created child logger')
44
+ return logger.child(bindings, opts)
45
+ }
46
+ })
47
+
48
+ fastify.get('/', (req, reply) => {
49
+ req.log.info('log message')
50
+ reply.send()
51
+ })
52
+
53
+ t.after(() => fastify.close())
54
+
22
55
  fastify.listen({ port: 0 }, err => {
23
- t.error(err)
56
+ t.assert.ifError(err)
24
57
  fastify.inject({
25
58
  method: 'GET',
26
59
  url: 'http://localhost:' + fastify.server.address().port
27
60
  }, (err, res) => {
28
- t.error(err)
29
- fastify.close()
61
+ t.assert.ifError(err)
62
+ done()
30
63
  })
31
64
  })
32
65
  })
33
66
 
34
- test('req.log should be the instance returned by the factory', t => {
67
+ test('req.log should be the instance returned by the factory', (t, done) => {
35
68
  t.plan(3)
36
69
 
37
70
  const fastify = Fastify()
@@ -41,24 +74,26 @@ test('req.log should be the instance returned by the factory', t => {
41
74
  })
42
75
 
43
76
  fastify.get('/', (req, reply) => {
44
- t.equal(req.log, fastify.log)
77
+ t.assert.strictEqual(req.log, fastify.log)
45
78
  req.log.info('log message')
46
79
  reply.send()
47
80
  })
48
81
 
82
+ t.after(() => fastify.close())
83
+
49
84
  fastify.listen({ port: 0 }, err => {
50
- t.error(err)
85
+ t.assert.ifError(err)
51
86
  fastify.inject({
52
87
  method: 'GET',
53
88
  url: 'http://localhost:' + fastify.server.address().port
54
89
  }, (err, res) => {
55
- t.error(err)
56
- fastify.close()
90
+ t.assert.ifError(err)
91
+ done()
57
92
  })
58
93
  })
59
94
  })
60
95
 
61
- test('should throw error if invalid logger is returned', t => {
96
+ test('should throw error if invalid logger is returned', (t, done) => {
62
97
  t.plan(2)
63
98
 
64
99
  const fastify = Fastify()
@@ -71,20 +106,22 @@ test('should throw error if invalid logger is returned', t => {
71
106
  reply.send()
72
107
  })
73
108
 
109
+ t.after(() => fastify.close())
110
+
74
111
  fastify.listen({ port: 0 }, err => {
75
- t.error(err)
76
- t.throws(() => {
112
+ t.assert.ifError(err)
113
+ t.assert.throws(() => {
77
114
  try {
78
115
  fastify.inject({
79
116
  method: 'GET',
80
117
  url: 'http://localhost:' + fastify.server.address().port
81
118
  }, (err) => {
82
- t.fail('request should have failed but did not')
83
- t.error(err)
84
- fastify.close()
119
+ t.assert.fail('request should have failed but did not')
120
+ t.assert.ifError(err)
121
+ done()
85
122
  })
86
123
  } finally {
87
- fastify.close()
124
+ done()
88
125
  }
89
126
  }, { code: 'FST_ERR_LOG_INVALID_LOGGER' })
90
127
  })
@@ -1,13 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const fastify = require('..')({ requestTimeout: 5, http: { connectionsCheckingInterval: 1000 } })
5
5
  const { connect } = require('node:net')
6
6
 
7
- test('requestTimeout should return 408', t => {
7
+ test('requestTimeout should return 408', (t, done) => {
8
8
  t.plan(1)
9
9
 
10
- t.teardown(() => {
10
+ t.after(() => {
11
11
  fastify.close()
12
12
  })
13
13
 
@@ -28,11 +28,11 @@ test('requestTimeout should return 408', t => {
28
28
 
29
29
  socket.on('data', c => (data = Buffer.concat([data, c])))
30
30
  socket.on('end', () => {
31
- t.equal(
31
+ t.assert.strictEqual(
32
32
  data.toString('utf-8'),
33
33
  'HTTP/1.1 408 Request Timeout\r\nContent-Length: 71\r\nContent-Type: application/json\r\n\r\n{"error":"Request Timeout","message":"Client Timeout","statusCode":408}'
34
34
  )
35
- t.end()
35
+ done()
36
36
  })
37
37
  })
38
38
  })
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
4
- const test = t.test
3
+ const { test } = require('node:test')
5
4
  const Fastify = require('..')
6
5
  const { Client } = require('undici')
7
6
 
@@ -29,8 +28,7 @@ test('Should return 503 while closing - pipelining', async t => {
29
28
  instance.request({ path: '/', method: 'GET' })
30
29
  ])
31
30
  const actual = responses.map(r => r.statusCode)
32
-
33
- t.same(actual, codes)
31
+ t.assert.deepStrictEqual(actual, codes)
34
32
 
35
33
  await instance.close()
36
34
  })
@@ -61,10 +59,10 @@ test('Should close the socket abruptly - pipelining - return503OnClosing: false'
61
59
  instance.request({ path: '/', method: 'GET' })
62
60
  ])
63
61
 
64
- t.equal(responses[0].status, 'fulfilled')
65
- t.equal(responses[1].status, 'fulfilled')
66
- t.equal(responses[2].status, 'rejected')
67
- t.equal(responses[3].status, 'rejected')
62
+ t.assert.strictEqual(responses[0].status, 'fulfilled')
63
+ t.assert.strictEqual(responses[1].status, 'fulfilled')
64
+ t.assert.strictEqual(responses[2].status, 'rejected')
65
+ t.assert.strictEqual(responses[3].status, 'rejected')
68
66
 
69
67
  await instance.close()
70
68
  })
@@ -0,0 +1,47 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+
5
+ test("pino is not require'd if logger is not passed", t => {
6
+ t.plan(1)
7
+
8
+ const fastify = require('..')
9
+
10
+ fastify()
11
+
12
+ t.assert.strictEqual(require.cache[require.resolve('pino')], undefined)
13
+ })
14
+
15
+ test("pino is require'd if logger is passed", t => {
16
+ t.plan(1)
17
+
18
+ const fastify = require('..')
19
+
20
+ fastify({
21
+ logger: true
22
+ })
23
+
24
+ t.assert.notStrictEqual(require.cache[require.resolve('pino')], undefined)
25
+ })
26
+
27
+ test("pino is require'd if loggerInstance is passed", t => {
28
+ t.plan(1)
29
+
30
+ const fastify = require('..')
31
+
32
+ const loggerInstance = {
33
+ fatal: (msg) => { },
34
+ error: (msg) => { },
35
+ warn: (msg) => { },
36
+ info: (msg) => { },
37
+ debug: (msg) => { },
38
+ trace: (msg) => { },
39
+ child: () => loggerInstance
40
+ }
41
+
42
+ fastify({
43
+ loggerInstance
44
+ })
45
+
46
+ t.assert.notStrictEqual(require.cache[require.resolve('pino')], undefined)
47
+ })
@@ -2,34 +2,33 @@
2
2
 
3
3
  const Fastify = require('..')
4
4
  const http = require('node:http')
5
- const t = require('tap')
6
- const test = t.test
5
+ const { test } = require('node:test')
7
6
 
8
- test('connectionTimeout', t => {
7
+ test('connectionTimeout', async t => {
9
8
  t.plan(6)
10
9
 
11
10
  try {
12
11
  Fastify({ connectionTimeout: 1.3 })
13
- t.fail('option must be an integer')
12
+ t.assert.fail('option must be an integer')
14
13
  } catch (err) {
15
- t.ok(err)
14
+ t.assert.ok(err)
16
15
  }
17
16
 
18
17
  try {
19
18
  Fastify({ connectionTimeout: [] })
20
- t.fail('option must be an integer')
19
+ t.assert.fail('option must be an integer')
21
20
  } catch (err) {
22
- t.ok(err)
21
+ t.assert.ok(err)
23
22
  }
24
23
 
25
24
  const httpServer = Fastify({ connectionTimeout: 1 }).server
26
- t.equal(httpServer.timeout, 1)
25
+ t.assert.strictEqual(httpServer.timeout, 1)
27
26
 
28
27
  const httpsServer = Fastify({ connectionTimeout: 2, https: {} }).server
29
- t.equal(httpsServer.timeout, 2)
28
+ t.assert.strictEqual(httpsServer.timeout, 2)
30
29
 
31
30
  const http2Server = Fastify({ connectionTimeout: 3, http2: true }).server
32
- t.equal(http2Server.timeout, 3)
31
+ t.assert.strictEqual(http2Server.timeout, 3)
33
32
 
34
33
  const serverFactory = (handler, _) => {
35
34
  const server = http.createServer((req, res) => {
@@ -39,5 +38,5 @@ test('connectionTimeout', t => {
39
38
  return server
40
39
  }
41
40
  const customServer = Fastify({ connectionTimeout: 4, serverFactory }).server
42
- t.equal(customServer.timeout, 5)
41
+ t.assert.strictEqual(customServer.timeout, 5)
43
42
  })