fastify 4.22.1 → 4.23.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 (96) hide show
  1. package/README.md +30 -33
  2. package/build/build-error-serializer.js +2 -2
  3. package/build/build-validation.js +2 -2
  4. package/build/sync-version.js +2 -2
  5. package/docs/Guides/Database.md +1 -1
  6. package/docs/Guides/Delay-Accepting-Requests.md +2 -2
  7. package/docs/Guides/Ecosystem.md +3 -1
  8. package/docs/Guides/Getting-Started.md +5 -4
  9. package/docs/Guides/Migration-Guide-V4.md +18 -15
  10. package/docs/Reference/ContentTypeParser.md +0 -1
  11. package/docs/Reference/HTTP2.md +4 -4
  12. package/docs/Reference/Hooks.md +30 -1
  13. package/docs/Reference/Middleware.md +1 -1
  14. package/docs/Reference/Principles.md +1 -1
  15. package/docs/Reference/Reply.md +7 -7
  16. package/docs/Reference/Request.md +11 -7
  17. package/docs/Reference/Server.md +2 -2
  18. package/examples/asyncawait.js +3 -1
  19. package/examples/benchmark/parser.js +1 -1
  20. package/examples/hooks.js +3 -0
  21. package/examples/http2.js +5 -3
  22. package/examples/https.js +5 -3
  23. package/examples/parser.js +4 -2
  24. package/examples/shared-schema.js +3 -1
  25. package/examples/simple-stream.js +4 -2
  26. package/examples/simple.js +3 -1
  27. package/examples/typescript-server.ts +1 -0
  28. package/examples/use-plugin.js +3 -1
  29. package/fastify.d.ts +2 -2
  30. package/fastify.js +5 -7
  31. package/lib/contentTypeParser.js +4 -4
  32. package/lib/error-handler.js +1 -1
  33. package/lib/hooks.js +55 -0
  34. package/lib/pluginUtils.js +1 -1
  35. package/lib/reply.js +1 -1
  36. package/lib/request.js +15 -0
  37. package/lib/server.js +26 -10
  38. package/lib/warnings.js +8 -0
  39. package/package.json +15 -5
  40. package/test/404s.test.js +1 -1
  41. package/test/als.test.js +1 -1
  42. package/test/async-await.test.js +1 -1
  43. package/test/bodyLimit.test.js +1 -1
  44. package/test/build/error-serializer.test.js +2 -2
  45. package/test/build/version.test.js +2 -2
  46. package/test/bundler/webpack/webpack.config.js +1 -1
  47. package/test/client-timeout.test.js +1 -1
  48. package/test/close.test.js +2 -2
  49. package/test/connectionTimeout.test.js +1 -1
  50. package/test/custom-http-server.test.js +2 -2
  51. package/test/custom-parser.0.test.js +1 -1
  52. package/test/custom-querystring-parser.test.js +1 -1
  53. package/test/diagnostics-channel.test.js +3 -3
  54. package/test/fastify-instance.test.js +1 -1
  55. package/test/genReqId.test.js +1 -1
  56. package/test/helper.js +2 -2
  57. package/test/hooks-async.test.js +2 -2
  58. package/test/hooks.on-listen.test.js +1090 -0
  59. package/test/hooks.on-ready.test.js +1 -1
  60. package/test/hooks.test.js +4 -4
  61. package/test/http2/closing.test.js +3 -3
  62. package/test/http2/missing-http2-module.test.js +1 -1
  63. package/test/https/custom-https-server.test.js +2 -2
  64. package/test/inject.test.js +3 -3
  65. package/test/internals/contentTypeParser.test.js +1 -1
  66. package/test/internals/errors.test.js +2 -2
  67. package/test/internals/initialConfig.test.js +1 -1
  68. package/test/internals/logger.test.js +1 -1
  69. package/test/internals/reply.test.js +7 -7
  70. package/test/internals/reqIdGenFactory.test.js +6 -2
  71. package/test/internals/server.test.js +4 -4
  72. package/test/keepAliveTimeout.test.js +1 -1
  73. package/test/listen.deprecated.test.js +1 -1
  74. package/test/listen.test.js +19 -5
  75. package/test/maxRequestsPerSocket.test.js +1 -1
  76. package/test/plugin.name.display.js +1 -1
  77. package/test/reply-error.test.js +4 -4
  78. package/test/reply-trailers.test.js +3 -3
  79. package/test/request-error.test.js +1 -1
  80. package/test/request.deprecated.test.js +38 -0
  81. package/test/requestTimeout.test.js +1 -1
  82. package/test/route-hooks.test.js +1 -1
  83. package/test/route.test.js +1 -1
  84. package/test/router-options.test.js +5 -6
  85. package/test/serial/logger.0.test.js +2 -2
  86. package/test/serial/logger.1.test.js +5 -5
  87. package/test/skip-reply-send.test.js +1 -1
  88. package/test/stream.test.js +20 -20
  89. package/test/trust-proxy.test.js +1 -1
  90. package/test/types/hooks.test-d.ts +11 -0
  91. package/test/unsupported-httpversion.test.js +1 -1
  92. package/test/upgrade.test.js +3 -3
  93. package/test/versioned-routes.test.js +1 -1
  94. package/types/hooks.d.ts +45 -12
  95. package/types/instance.d.ts +11 -1
  96. package/out +0 -25874
@@ -2,7 +2,7 @@
2
2
 
3
3
  const t = require('tap')
4
4
  const Fastify = require('../fastify')
5
- const immediate = require('util').promisify(setImmediate)
5
+ const immediate = require('node:util').promisify(setImmediate)
6
6
 
7
7
  t.test('onReady should be called in order', t => {
8
8
  t.plan(7)
@@ -3,16 +3,16 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const stream = require('stream')
6
+ const stream = require('node:stream')
7
7
  const Fastify = require('..')
8
8
  const fp = require('fastify-plugin')
9
- const fs = require('fs')
9
+ const fs = require('node:fs')
10
10
  const split = require('split2')
11
11
  const symbols = require('../lib/symbols.js')
12
12
  const payload = { hello: 'world' }
13
13
  const proxyquire = require('proxyquire')
14
- const { promisify } = require('util')
15
- const { connect } = require('net')
14
+ const { promisify } = require('node:util')
15
+ const { connect } = require('node:net')
16
16
 
17
17
  const sleep = promisify(setTimeout)
18
18
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  const t = require('tap')
4
4
  const Fastify = require('../..')
5
- const http2 = require('http2')
6
- const { promisify } = require('util')
5
+ const http2 = require('node:http2')
6
+ const { promisify } = require('node:util')
7
7
  const connect = promisify(http2.connect)
8
- const { once } = require('events')
8
+ const { once } = require('node:events')
9
9
 
10
10
  const { buildCertificate } = require('../build-certificate')
11
11
  t.before(buildCertificate)
@@ -3,7 +3,7 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const proxyquire = require('proxyquire')
6
- const server = proxyquire('../../lib/server', { http2: null })
6
+ const server = proxyquire('../../lib/server', { 'node:http2': null })
7
7
  const Fastify = proxyquire('../..', { './lib/server.js': server })
8
8
 
9
9
  test('should throw when http2 module cannot be found', t => {
@@ -3,9 +3,9 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const Fastify = require('../..')
6
- const https = require('https')
6
+ const https = require('node:https')
7
7
  const sget = require('simple-get').concat
8
- const dns = require('dns').promises
8
+ const dns = require('node:dns').promises
9
9
 
10
10
  const { buildCertificate } = require('../build-certificate')
11
11
  t.before(buildCertificate)
@@ -2,11 +2,11 @@
2
2
 
3
3
  const t = require('tap')
4
4
  const test = t.test
5
- const Stream = require('stream')
6
- const util = require('util')
5
+ const Stream = require('node:stream')
6
+ const util = require('node:util')
7
7
  const Fastify = require('..')
8
8
  const FormData = require('form-data')
9
- const { Readable } = require('stream')
9
+ const { Readable } = require('node:stream')
10
10
 
11
11
  test('inject should exist', t => {
12
12
  t.plan(2)
@@ -3,7 +3,7 @@
3
3
  const t = require('tap')
4
4
  const proxyquire = require('proxyquire')
5
5
  const test = t.test
6
- const { Readable } = require('stream')
6
+ const { Readable } = require('node:stream')
7
7
  const { kTestInternals, kRouteContext } = require('../../lib/symbols')
8
8
  const Request = require('../../lib/request')
9
9
  const Reply = require('../../lib/reply')
@@ -2,8 +2,8 @@
2
2
 
3
3
  const { test } = require('tap')
4
4
  const errors = require('../../lib/errors')
5
- const { readFileSync } = require('fs')
6
- const { resolve } = require('path')
5
+ const { readFileSync } = require('node:fs')
6
+ const { resolve } = require('node:path')
7
7
 
8
8
  test('should expose 78 errors', t => {
9
9
  t.plan(1)
@@ -3,7 +3,7 @@
3
3
  const { test, before } = require('tap')
4
4
  const Fastify = require('../..')
5
5
  const helper = require('../helper')
6
- const http = require('http')
6
+ const http = require('node:http')
7
7
  const pino = require('pino')
8
8
  const split = require('split2')
9
9
  const deepClone = require('rfdc')({ circles: true, proto: false })
@@ -97,7 +97,7 @@ Queue.prototype.run = function run () {
97
97
  test('The logger should error if both stream and file destination are given', t => {
98
98
  t.plan(2)
99
99
 
100
- const stream = require('stream').Writable
100
+ const stream = require('node:stream').Writable
101
101
 
102
102
  try {
103
103
  Fastify({
@@ -3,11 +3,11 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const sget = require('simple-get').concat
6
- const http = require('http')
6
+ const http = require('node:http')
7
7
  const NotFound = require('http-errors').NotFound
8
8
  const Reply = require('../../lib/reply')
9
9
  const Fastify = require('../..')
10
- const { Readable, Writable } = require('stream')
10
+ const { Readable, Writable } = require('node:stream')
11
11
  const {
12
12
  kReplyErrorHandlerCalled,
13
13
  kReplyHeaders,
@@ -16,8 +16,8 @@ const {
16
16
  kReplySerializerDefault,
17
17
  kRouteContext
18
18
  } = require('../../lib/symbols')
19
- const fs = require('fs')
20
- const path = require('path')
19
+ const fs = require('node:fs')
20
+ const path = require('node:path')
21
21
  const warning = require('../../lib/warnings')
22
22
 
23
23
  const agent = new http.Agent({ keepAlive: false })
@@ -262,7 +262,7 @@ test('within an instance', t => {
262
262
  reply.code(200)
263
263
  reply.type('text/plain')
264
264
  reply.serializer(function (body) {
265
- return require('querystring').stringify(body)
265
+ return require('node:querystring').stringify(body)
266
266
  })
267
267
  reply.send({ hello: 'world!' })
268
268
  })
@@ -612,8 +612,8 @@ test('stream using reply.raw.writeHead should return customize headers', t => {
612
612
  t.plan(6)
613
613
 
614
614
  const fastify = Fastify()
615
- const fs = require('fs')
616
- const path = require('path')
615
+ const fs = require('node:fs')
616
+ const path = require('node:path')
617
617
 
618
618
  const streamPath = path.join(__dirname, '..', '..', 'package.json')
619
619
  const stream = fs.createReadStream(streamPath)
@@ -4,12 +4,16 @@ const { test } = require('tap')
4
4
  const { reqIdGenFactory } = require('../../lib/reqIdGenFactory')
5
5
 
6
6
  test('should create incremental ids deterministically', t => {
7
- t.plan(9999)
7
+ t.plan(1)
8
8
  const reqIdGen = reqIdGenFactory()
9
9
 
10
10
  for (let i = 1; i < 1e4; ++i) {
11
- t.equal(reqIdGen(), 'req-' + i.toString(36))
11
+ if (reqIdGen() !== 'req-' + i.toString(36)) {
12
+ t.fail()
13
+ break
14
+ }
12
15
  }
16
+ t.pass()
13
17
  })
14
18
 
15
19
  test('should have prefix "req-"', t => {
@@ -20,7 +20,7 @@ test('start listening', async t => {
20
20
 
21
21
  test('DNS errors does not stop the main server on localhost - promise interface', async t => {
22
22
  const { createServer } = proxyquire('../../lib/server', {
23
- dns: {
23
+ 'node:dns': {
24
24
  lookup: (hostname, options, cb) => {
25
25
  cb(new Error('DNS error'))
26
26
  }
@@ -35,7 +35,7 @@ test('DNS errors does not stop the main server on localhost - promise interface'
35
35
  test('DNS errors does not stop the main server on localhost - callback interface', t => {
36
36
  t.plan(2)
37
37
  const { createServer } = proxyquire('../../lib/server', {
38
- dns: {
38
+ 'node:dns': {
39
39
  lookup: (hostname, options, cb) => {
40
40
  cb(new Error('DNS error'))
41
41
  }
@@ -52,7 +52,7 @@ test('DNS errors does not stop the main server on localhost - callback interface
52
52
  test('DNS returns empty binding', t => {
53
53
  t.plan(2)
54
54
  const { createServer } = proxyquire('../../lib/server', {
55
- dns: {
55
+ 'node:dns': {
56
56
  lookup: (hostname, options, cb) => {
57
57
  cb(null, [])
58
58
  }
@@ -69,7 +69,7 @@ test('DNS returns empty binding', t => {
69
69
  test('DNS returns more than two binding', t => {
70
70
  t.plan(2)
71
71
  const { createServer } = proxyquire('../../lib/server', {
72
- dns: {
72
+ 'node:dns': {
73
73
  lookup: (hostname, options, cb) => {
74
74
  cb(null, [
75
75
  { address: '::1', family: 6 },
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const Fastify = require('..')
4
- const http = require('http')
4
+ const http = require('node:http')
5
5
  const t = require('tap')
6
6
  const test = t.test
7
7
 
@@ -4,7 +4,7 @@
4
4
  // removed when the deprecation is complete.
5
5
 
6
6
  const { test, before } = require('tap')
7
- const dns = require('dns').promises
7
+ const dns = require('node:dns').promises
8
8
  const Fastify = require('..')
9
9
 
10
10
  let localhost
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
- const os = require('os')
4
- const path = require('path')
5
- const fs = require('fs')
3
+ const os = require('node:os')
4
+ const path = require('node:path')
5
+ const fs = require('node:fs')
6
6
  const { test, before } = require('tap')
7
- const dns = require('dns').promises
8
- const dnsCb = require('dns')
7
+ const dns = require('node:dns').promises
8
+ const dnsCb = require('node:dns')
9
9
  const sget = require('simple-get').concat
10
10
  const Fastify = require('..')
11
11
 
@@ -156,6 +156,20 @@ test('double listen errors callback with (err, address)', t => {
156
156
  })
157
157
  })
158
158
 
159
+ test('nonlocalhost double listen errors callback with (err, address)', t => {
160
+ t.plan(4)
161
+ const fastify = Fastify()
162
+ t.teardown(fastify.close.bind(fastify))
163
+ fastify.listen({ host: '::1', port: 0 }, (err, address) => {
164
+ t.equal(address, `http://${'[::1]'}:${fastify.server.address().port}`)
165
+ t.error(err)
166
+ fastify.listen({ host: '::1', port: fastify.server.address().port }, (err2, address2) => {
167
+ t.equal(address2, null)
168
+ t.ok(err2)
169
+ })
170
+ })
171
+ })
172
+
159
173
  test('listen twice on the same port', t => {
160
174
  t.plan(4)
161
175
  const fastify = Fastify()
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const net = require('net')
3
+ const net = require('node:net')
4
4
  const { test } = require('tap')
5
5
  const semver = require('semver')
6
6
  const Fastify = require('../fastify')
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const assert = require('assert')
3
+ const assert = require('node:assert')
4
4
 
5
5
  module.exports = function (fastify, opts, done) {
6
6
  assert.strictEqual(fastify.pluginName, 'test-plugin')
@@ -2,12 +2,12 @@
2
2
 
3
3
  const t = require('tap')
4
4
  const test = t.test
5
- const net = require('net')
5
+ const net = require('node:net')
6
6
  const Fastify = require('..')
7
- const statusCodes = require('http').STATUS_CODES
7
+ const statusCodes = require('node:http').STATUS_CODES
8
8
  const split = require('split2')
9
- const fs = require('fs')
10
- const path = require('path')
9
+ const fs = require('node:fs')
10
+ const path = require('node:path')
11
11
 
12
12
  const codes = Object.keys(statusCodes)
13
13
  codes.forEach(code => {
@@ -3,9 +3,9 @@
3
3
  const t = require('tap')
4
4
  const test = t.test
5
5
  const Fastify = require('..')
6
- const { Readable } = require('stream')
7
- const { createHash } = require('crypto')
8
- const { promisify } = require('util')
6
+ const { Readable } = require('node:stream')
7
+ const { createHash } = require('node:crypto')
8
+ const { promisify } = require('node:util')
9
9
  const sleep = promisify(setTimeout)
10
10
 
11
11
  test('send trailers when payload is empty string', t => {
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { connect } = require('net')
3
+ const { connect } = require('node:net')
4
4
  const sget = require('simple-get').concat
5
5
  const t = require('tap')
6
6
  const test = t.test
@@ -0,0 +1,38 @@
1
+ 'use strict'
2
+
3
+ // Tests for some deprecated `request.*` keys. This file should be
4
+ // removed when the deprecation is complete.
5
+
6
+ process.removeAllListeners('warning')
7
+
8
+ const test = require('tap').test
9
+ const Fastify = require('../')
10
+
11
+ test('Should expose router options via getters on request and reply', t => {
12
+ t.plan(7)
13
+ const fastify = Fastify()
14
+ const expectedSchema = {
15
+ params: {
16
+ id: { type: 'integer' }
17
+ }
18
+ }
19
+
20
+ fastify.get('/test/:id', {
21
+ schema: expectedSchema
22
+ }, (req, reply) => {
23
+ t.equal(req.routeConfig.url, '/test/:id')
24
+ t.equal(req.routeConfig.method, 'GET')
25
+ t.same(req.routeSchema, expectedSchema)
26
+ t.equal(req.routerPath, '/test/:id')
27
+ t.equal(req.routerMethod, 'GET')
28
+ reply.send()
29
+ })
30
+
31
+ fastify.inject({
32
+ method: 'GET',
33
+ url: '/test/123456789'
34
+ }, (error, res) => {
35
+ t.error(error)
36
+ t.equal(res.statusCode, 200)
37
+ })
38
+ })
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const http = require('http')
3
+ const http = require('node:http')
4
4
  const { test } = require('tap')
5
5
  const Fastify = require('../fastify')
6
6
 
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { Readable } = require('stream')
3
+ const { Readable } = require('node:stream')
4
4
  const test = require('tap').test
5
5
  const sget = require('simple-get').concat
6
6
  const Fastify = require('../')
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const stream = require('stream')
3
+ const stream = require('node:stream')
4
4
  const split = require('split2')
5
5
  const t = require('tap')
6
6
  const test = t.test
@@ -92,7 +92,7 @@ test('Should honor maxParamLength option', t => {
92
92
  })
93
93
 
94
94
  test('Should expose router options via getters on request and reply', t => {
95
- t.plan(10)
95
+ t.plan(9)
96
96
  const fastify = Fastify()
97
97
  const expectedSchema = {
98
98
  params: {
@@ -105,11 +105,10 @@ test('Should expose router options via getters on request and reply', t => {
105
105
  }, (req, reply) => {
106
106
  t.equal(reply.context.config.url, '/test/:id')
107
107
  t.equal(reply.context.config.method, 'GET')
108
- t.equal(req.routeConfig.url, '/test/:id')
109
- t.equal(req.routeConfig.method, 'GET')
110
- t.same(req.routeSchema, expectedSchema)
111
- t.equal(req.routerPath, '/test/:id')
112
- t.equal(req.routerMethod, 'GET')
108
+ t.same(req.routeOptions.schema, expectedSchema)
109
+ t.equal(typeof req.routeOptions.handler, 'function')
110
+ t.equal(req.routeOptions.config.url, '/test/:id')
111
+ t.equal(req.routeOptions.config.method, 'GET')
113
112
  t.equal(req.is404, false)
114
113
  reply.send({ hello: 'world' })
115
114
  })
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const http = require('http')
4
- const stream = require('stream')
3
+ const http = require('node:http')
4
+ const stream = require('node:stream')
5
5
 
6
6
  const t = require('tap')
7
7
  const split = require('split2')
@@ -1,14 +1,14 @@
1
1
  'use strict'
2
2
 
3
- const http = require('http')
4
- const stream = require('stream')
5
- const os = require('os')
6
- const fs = require('fs')
3
+ const http = require('node:http')
4
+ const stream = require('node:stream')
5
+ const os = require('node:os')
6
+ const fs = require('node:fs')
7
7
 
8
8
  const t = require('tap')
9
9
  const split = require('split2')
10
10
  const pino = require('pino')
11
- const path = require('path')
11
+ const path = require('node:path')
12
12
  const { streamSym } = require('pino/lib/symbols')
13
13
 
14
14
  const Fastify = require('../../fastify')
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { test } = require('tap')
4
4
  const split = require('split2')
5
- const net = require('net')
5
+ const net = require('node:net')
6
6
  const Fastify = require('../fastify')
7
7
 
8
8
  process.removeAllListeners('warning')
@@ -4,15 +4,15 @@ const t = require('tap')
4
4
  const test = t.test
5
5
  const proxyquire = require('proxyquire')
6
6
  const sget = require('simple-get').concat
7
- const fs = require('fs')
8
- const resolve = require('path').resolve
9
- const zlib = require('zlib')
10
- const pipeline = require('stream').pipeline
7
+ const fs = require('node:fs')
8
+ const resolve = require('node:path').resolve
9
+ const zlib = require('node:zlib')
10
+ const pipeline = require('node:stream').pipeline
11
11
  const Fastify = require('..')
12
12
  const errors = require('http-errors')
13
13
  const JSONStream = require('JSONStream')
14
14
  const send = require('send')
15
- const Readable = require('stream').Readable
15
+ const Readable = require('node:stream').Readable
16
16
  const split = require('split2')
17
17
  const semver = require('semver')
18
18
  const { kDisableRequestLogging } = require('../lib/symbols.js')
@@ -164,7 +164,7 @@ test('onSend hook stream should work even if payload is not a proper stream', t
164
164
  t.plan(1)
165
165
 
166
166
  const reply = proxyquire('../lib/reply', {
167
- stream: {
167
+ 'node:stream': {
168
168
  finished: (...args) => {
169
169
  if (args.length === 2) { args[1](new Error('test-error')) }
170
170
  }
@@ -205,7 +205,7 @@ test('onSend hook stream should work on payload with "close" ending function', t
205
205
  t.plan(1)
206
206
 
207
207
  const reply = proxyquire('../lib/reply', {
208
- stream: {
208
+ 'node:stream': {
209
209
  finished: (...args) => {
210
210
  if (args.length === 2) { args[1](new Error('test-error')) }
211
211
  }
@@ -251,8 +251,8 @@ test('Destroying streams prematurely', t => {
251
251
  } catch (e) {
252
252
  t.fail()
253
253
  }
254
- const stream = require('stream')
255
- const http = require('http')
254
+ const stream = require('node:stream')
255
+ const http = require('node:http')
256
256
 
257
257
  // Test that "premature close" errors are logged with level warn
258
258
  logStream.on('data', line => {
@@ -313,8 +313,8 @@ test('Destroying streams prematurely should call close method', t => {
313
313
  } catch (e) {
314
314
  t.fail()
315
315
  }
316
- const stream = require('stream')
317
- const http = require('http')
316
+ const stream = require('node:stream')
317
+ const http = require('node:http')
318
318
 
319
319
  // Test that "premature close" errors are logged with level warn
320
320
  logStream.on('data', line => {
@@ -375,8 +375,8 @@ test('Destroying streams prematurely should call close method when destroy is no
375
375
  } catch (e) {
376
376
  t.fail()
377
377
  }
378
- const stream = require('stream')
379
- const http = require('http')
378
+ const stream = require('node:stream')
379
+ const http = require('node:http')
380
380
 
381
381
  // Test that "premature close" errors are logged with level warn
382
382
  logStream.on('data', line => {
@@ -437,8 +437,8 @@ test('Destroying streams prematurely should call abort method', t => {
437
437
  } catch (e) {
438
438
  t.fail()
439
439
  }
440
- const stream = require('stream')
441
- const http = require('http')
440
+ const stream = require('node:stream')
441
+ const http = require('node:http')
442
442
 
443
443
  // Test that "premature close" errors are logged with level warn
444
444
  logStream.on('data', line => {
@@ -496,8 +496,8 @@ test('Destroying streams prematurely, log is disabled', t => {
496
496
  } catch (e) {
497
497
  t.fail()
498
498
  }
499
- const stream = require('stream')
500
- const http = require('http')
499
+ const stream = require('node:stream')
500
+ const http = require('node:http')
501
501
 
502
502
  fastify.get('/', function (request, reply) {
503
503
  reply.log[kDisableRequestLogging] = true
@@ -632,7 +632,7 @@ test('should support send module 200 and 404', { skip: semver.gte(process.versio
632
632
 
633
633
  test('should destroy stream when response is ended', t => {
634
634
  t.plan(4)
635
- const stream = require('stream')
635
+ const stream = require('node:stream')
636
636
  const fastify = Fastify()
637
637
 
638
638
  fastify.get('/error', function (req, reply) {
@@ -729,7 +729,7 @@ test('reply.send handles aborted requests', t => {
729
729
  t.teardown(() => { fastify.close() })
730
730
 
731
731
  const port = fastify.server.address().port
732
- const http = require('http')
732
+ const http = require('node:http')
733
733
  const req = http.get(`http://localhost:${port}`)
734
734
  .on('error', (err) => {
735
735
  t.equal(err.code, 'ECONNRESET')
@@ -782,7 +782,7 @@ test('request terminated should not crash fastify', t => {
782
782
  t.teardown(() => { fastify.close() })
783
783
 
784
784
  const port = fastify.server.address().port
785
- const http = require('http')
785
+ const http = require('node:http')
786
786
  const req = http.get(`http://localhost:${port}`, function (res) {
787
787
  const { statusCode, headers } = res
788
788
  t.equal(statusCode, 200)
@@ -4,7 +4,7 @@ const t = require('tap')
4
4
  const { test, before } = t
5
5
  const sget = require('simple-get').concat
6
6
  const fastify = require('..')
7
- const dns = require('dns').promises
7
+ const dns = require('node:dns').promises
8
8
 
9
9
  const sgetForwardedRequest = (app, forHeader, path, protoHeader) => {
10
10
  const headers = {
@@ -142,6 +142,12 @@ server.addHook('onReady', function (done) {
142
142
  expectType<void>(done(new Error()))
143
143
  })
144
144
 
145
+ server.addHook('onListen', function (done) {
146
+ expectType<FastifyInstance>(this)
147
+ expectAssignable<(err?: FastifyError) => void>(done)
148
+ expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)
149
+ })
150
+
145
151
  server.addHook('onClose', (instance, done) => {
146
152
  expectType<FastifyInstance>(instance)
147
153
  expectAssignable<(err?: FastifyError) => void>(done)
@@ -223,6 +229,10 @@ server.addHook('onReady', async function () {
223
229
  expectType<FastifyInstance>(this)
224
230
  })
225
231
 
232
+ server.addHook('onListen', async function () {
233
+ expectType<FastifyInstance>(this)
234
+ })
235
+
226
236
  server.addHook('onClose', async (instance) => {
227
237
  expectType<FastifyInstance>(instance)
228
238
  })
@@ -396,6 +406,7 @@ server.addHook('preClose', async function () {
396
406
  expectError(server.addHook('onClose', async function (instance, done) {}))
397
407
  expectError(server.addHook('onError', async function (request, reply, error, done) {}))
398
408
  expectError(server.addHook('onReady', async function (done) {}))
409
+ expectError(server.addHook('onListen', async function (done) {}))
399
410
  expectError(server.addHook('onRequest', async function (request, reply, done) {}))
400
411
  expectError(server.addHook('onRequestAbort', async function (request, done) {}))
401
412
  expectError(server.addHook('onResponse', async function (request, reply, done) {}))
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const net = require('net')
3
+ const net = require('node:net')
4
4
  const t = require('tap')
5
5
  const Fastify = require('../fastify')
6
6