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,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 sget = require('simple-get').concat
6
5
  const fastify = require('../../')()
7
6
  fastify.addHttpMethod('PROPFIND', { hasBody: true })
@@ -62,45 +61,48 @@ test('can be created - propfind', t => {
62
61
  )
63
62
  }
64
63
  })
65
- t.pass()
64
+ t.assert.ok(true)
66
65
  } catch (e) {
67
- t.fail()
66
+ t.assert.fail()
68
67
  }
69
68
  })
70
69
 
71
- fastify.listen({ port: 0 }, err => {
72
- t.error(err)
73
- t.teardown(() => {
70
+ test('propfind test', async t => {
71
+ await fastify.listen({ port: 0 })
72
+
73
+ t.after(() => {
74
74
  fastify.close()
75
75
  })
76
76
 
77
- test('request - propfind', t => {
77
+ await t.test('request - propfind', (t, done) => {
78
78
  t.plan(3)
79
79
  sget({
80
80
  url: `http://localhost:${fastify.server.address().port}/`,
81
81
  method: 'PROPFIND'
82
82
  }, (err, response, body) => {
83
- t.error(err)
84
- t.equal(response.statusCode, 207)
85
- t.equal(response.headers['content-length'], '' + body.length)
83
+ t.assert.ifError(err)
84
+ t.assert.strictEqual(response.statusCode, 207)
85
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
86
+ done()
86
87
  })
87
88
  })
88
89
 
89
- test('request with other path - propfind', t => {
90
+ await t.test('request with other path - propfind', (t, done) => {
90
91
  t.plan(3)
91
92
  sget({
92
93
  url: `http://localhost:${fastify.server.address().port}/test`,
93
94
  method: 'PROPFIND'
94
95
  }, (err, response, body) => {
95
- t.error(err)
96
- t.equal(response.statusCode, 207)
97
- t.equal(response.headers['content-length'], '' + body.length)
96
+ t.assert.ifError(err)
97
+ t.assert.strictEqual(response.statusCode, 207)
98
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
99
+ done()
98
100
  })
99
101
  })
100
102
 
101
103
  // the body test uses a text/plain content type instead of application/xml because it requires
102
104
  // a specific content type parser
103
- test('request with body - propfind', t => {
105
+ await t.test('request with body - propfind', (t, done) => {
104
106
  t.plan(3)
105
107
  sget({
106
108
  url: `http://localhost:${fastify.server.address().port}/test`,
@@ -108,34 +110,37 @@ fastify.listen({ port: 0 }, err => {
108
110
  body: bodySample,
109
111
  method: 'PROPFIND'
110
112
  }, (err, response, body) => {
111
- t.error(err)
112
- t.equal(response.statusCode, 207)
113
- t.equal(response.headers['content-length'], '' + body.length)
113
+ t.assert.ifError(err)
114
+ t.assert.strictEqual(response.statusCode, 207)
115
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
116
+ done()
114
117
  })
115
118
  })
116
119
 
117
- test('request with body and no content type (415 error) - propfind', t => {
120
+ await t.test('request with body and no content type (415 error) - propfind', (t, done) => {
118
121
  t.plan(3)
119
122
  sget({
120
123
  url: `http://localhost:${fastify.server.address().port}/test`,
121
124
  body: bodySample,
122
125
  method: 'PROPFIND'
123
126
  }, (err, response, body) => {
124
- t.error(err)
125
- t.equal(response.statusCode, 415)
126
- t.equal(response.headers['content-length'], '' + body.length)
127
+ t.assert.ifError(err)
128
+ t.assert.strictEqual(response.statusCode, 415)
129
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
130
+ done()
127
131
  })
128
132
  })
129
133
 
130
- test('request without body - propfind', t => {
134
+ await t.test('request without body - propfind', (t, done) => {
131
135
  t.plan(3)
132
136
  sget({
133
137
  url: `http://localhost:${fastify.server.address().port}/test`,
134
138
  method: 'PROPFIND'
135
139
  }, (err, response, body) => {
136
- t.error(err)
137
- t.equal(response.statusCode, 207)
138
- t.equal(response.headers['content-length'], '' + body.length)
140
+ t.assert.ifError(err)
141
+ t.assert.strictEqual(response.statusCode, 207)
142
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
143
+ done()
139
144
  })
140
145
  })
141
146
  })
@@ -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 sget = require('simple-get').concat
6
5
  const fastify = require('../../')()
7
6
  fastify.addHttpMethod('PROPPATCH', { hasBody: true })
@@ -56,19 +55,19 @@ test('shorthand - proppatch', t => {
56
55
  )
57
56
  }
58
57
  })
59
- t.pass()
58
+ t.assert.ok(true)
60
59
  } catch (e) {
61
- t.fail()
60
+ t.assert.fail()
62
61
  }
63
62
  })
64
63
 
65
- fastify.listen({ port: 0 }, err => {
66
- t.error(err)
67
- t.teardown(() => { fastify.close() })
64
+ test('proppatch test', async t => {
65
+ await fastify.listen({ port: 0 })
68
66
 
67
+ t.after(() => { fastify.close() })
69
68
  // the body test uses a text/plain content type instead of application/xml because it requires
70
69
  // a specific content type parser
71
- test('request with body - proppatch', t => {
70
+ await t.test('request with body - proppatch', (t, done) => {
72
71
  t.plan(3)
73
72
  sget({
74
73
  url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
@@ -76,34 +75,37 @@ fastify.listen({ port: 0 }, err => {
76
75
  body: bodySample,
77
76
  method: 'PROPPATCH'
78
77
  }, (err, response, body) => {
79
- t.error(err)
80
- t.equal(response.statusCode, 207)
81
- t.equal(response.headers['content-length'], '' + body.length)
78
+ t.assert.ifError(err)
79
+ t.assert.strictEqual(response.statusCode, 207)
80
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
81
+ done()
82
82
  })
83
83
  })
84
84
 
85
- test('request with body and no content type (415 error) - proppatch', t => {
85
+ await t.test('request with body and no content type (415 error) - proppatch', (t, done) => {
86
86
  t.plan(3)
87
87
  sget({
88
88
  url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
89
89
  body: bodySample,
90
90
  method: 'PROPPATCH'
91
91
  }, (err, response, body) => {
92
- t.error(err)
93
- t.equal(response.statusCode, 415)
94
- t.equal(response.headers['content-length'], '' + body.length)
92
+ t.assert.ifError(err)
93
+ t.assert.strictEqual(response.statusCode, 415)
94
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
95
+ done()
95
96
  })
96
97
  })
97
98
 
98
- test('request without body - proppatch', t => {
99
+ await t.test('request without body - proppatch', (t, done) => {
99
100
  t.plan(3)
100
101
  sget({
101
102
  url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
102
103
  method: 'PROPPATCH'
103
104
  }, (err, response, body) => {
104
- t.error(err)
105
- t.equal(response.statusCode, 207)
106
- t.equal(response.headers['content-length'], '' + body.length)
105
+ t.assert.ifError(err)
106
+ t.assert.strictEqual(response.statusCode, 207)
107
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
108
+ done()
107
109
  })
108
110
  })
109
111
  })
@@ -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 sget = require('simple-get').concat
6
5
  const fastify = require('../../fastify')()
7
6
  fastify.addHttpMethod('REPORT', { hasBody: true })
@@ -68,19 +67,20 @@ test('can be created - report', (t) => {
68
67
  </D:multistatus>`)
69
68
  }
70
69
  })
71
- t.pass()
70
+ t.assert.ok(true)
72
71
  } catch (e) {
73
- t.fail()
72
+ t.assert.fail()
74
73
  }
75
74
  })
76
75
 
77
- fastify.listen({ port: 0 }, (err) => {
78
- t.error(err)
79
- t.teardown(() => {
76
+ test('report test', async t => {
77
+ await fastify.listen({ port: 0 })
78
+
79
+ t.after(() => {
80
80
  fastify.close()
81
81
  })
82
82
 
83
- test('request - report', (t) => {
83
+ await t.test('request - report', (t, done) => {
84
84
  t.plan(3)
85
85
  sget(
86
86
  {
@@ -88,14 +88,15 @@ fastify.listen({ port: 0 }, (err) => {
88
88
  method: 'REPORT'
89
89
  },
90
90
  (err, response, body) => {
91
- t.error(err)
92
- t.equal(response.statusCode, 207)
93
- t.equal(response.headers['content-length'], '' + body.length)
91
+ t.assert.ifError(err)
92
+ t.assert.strictEqual(response.statusCode, 207)
93
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
94
+ done()
94
95
  }
95
96
  )
96
97
  })
97
98
 
98
- test('request with other path - report', (t) => {
99
+ await t.test('request with other path - report', (t, done) => {
99
100
  t.plan(3)
100
101
  sget(
101
102
  {
@@ -103,16 +104,17 @@ fastify.listen({ port: 0 }, (err) => {
103
104
  method: 'REPORT'
104
105
  },
105
106
  (err, response, body) => {
106
- t.error(err)
107
- t.equal(response.statusCode, 207)
108
- t.equal(response.headers['content-length'], '' + body.length)
107
+ t.assert.ifError(err)
108
+ t.assert.strictEqual(response.statusCode, 207)
109
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
110
+ done()
109
111
  }
110
112
  )
111
113
  })
112
114
 
113
115
  // the body test uses a text/plain content type instead of application/xml because it requires
114
116
  // a specific content type parser
115
- test('request with body - report', (t) => {
117
+ await t.test('request with body - report', (t, done) => {
116
118
  t.plan(3)
117
119
  sget(
118
120
  {
@@ -122,14 +124,15 @@ fastify.listen({ port: 0 }, (err) => {
122
124
  method: 'REPORT'
123
125
  },
124
126
  (err, response, body) => {
125
- t.error(err)
126
- t.equal(response.statusCode, 207)
127
- t.equal(response.headers['content-length'], '' + body.length)
127
+ t.assert.ifError(err)
128
+ t.assert.strictEqual(response.statusCode, 207)
129
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
130
+ done()
128
131
  }
129
132
  )
130
133
  })
131
134
 
132
- test('request with body and no content type (415 error) - report', (t) => {
135
+ await t.test('request with body and no content type (415 error) - report', (t, done) => {
133
136
  t.plan(3)
134
137
  sget(
135
138
  {
@@ -138,14 +141,15 @@ fastify.listen({ port: 0 }, (err) => {
138
141
  method: 'REPORT'
139
142
  },
140
143
  (err, response, body) => {
141
- t.error(err)
142
- t.equal(response.statusCode, 415)
143
- t.equal(response.headers['content-length'], '' + body.length)
144
+ t.assert.ifError(err)
145
+ t.assert.strictEqual(response.statusCode, 415)
146
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
147
+ done()
144
148
  }
145
149
  )
146
150
  })
147
151
 
148
- test('request without body - report', (t) => {
152
+ await t.test('request without body - report', (t, done) => {
149
153
  t.plan(3)
150
154
  sget(
151
155
  {
@@ -153,9 +157,10 @@ fastify.listen({ port: 0 }, (err) => {
153
157
  method: 'REPORT'
154
158
  },
155
159
  (err, response, body) => {
156
- t.error(err)
157
- t.equal(response.statusCode, 207)
158
- t.equal(response.headers['content-length'], '' + body.length)
160
+ t.assert.ifError(err)
161
+ t.assert.strictEqual(response.statusCode, 207)
162
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
163
+ done()
159
164
  }
160
165
  )
161
166
  })
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
3
+ const { test } = require('node:test')
4
4
  const sget = require('simple-get').concat
5
- const test = t.test
6
5
  const fastify = require('../../fastify')()
7
6
  fastify.addHttpMethod('SEARCH', { hasBody: true })
8
7
 
@@ -69,9 +68,9 @@ test('search', t => {
69
68
  reply.code(200).send({ hello: 'world' })
70
69
  }
71
70
  })
72
- t.pass()
71
+ t.assert.ok(true)
73
72
  } catch (e) {
74
- t.fail()
73
+ t.assert.fail()
75
74
  }
76
75
  })
77
76
 
@@ -86,9 +85,9 @@ test('search, params schema', t => {
86
85
  reply.code(200).send(request.params)
87
86
  }
88
87
  })
89
- t.pass()
88
+ t.assert.ok(true)
90
89
  } catch (e) {
91
- t.fail()
90
+ t.assert.fail()
92
91
  }
93
92
  })
94
93
 
@@ -103,9 +102,9 @@ test('search, querystring schema', t => {
103
102
  reply.code(200).send(request.query)
104
103
  }
105
104
  })
106
- t.pass()
105
+ t.assert.ok(true)
107
106
  } catch (e) {
108
- t.fail()
107
+ t.assert.fail()
109
108
  }
110
109
  })
111
110
 
@@ -120,92 +119,96 @@ test('search, body schema', t => {
120
119
  reply.code(200).send(request.body)
121
120
  }
122
121
  })
123
- t.pass()
122
+ t.assert.ok(true)
124
123
  } catch (e) {
125
- t.fail()
124
+ t.assert.fail()
126
125
  }
127
126
  })
128
127
 
129
- fastify.listen({ port: 0 }, err => {
130
- t.error(err)
131
- t.teardown(() => { fastify.close() })
132
-
128
+ test('search test', async t => {
129
+ await fastify.listen({ port: 0 })
130
+ t.after(() => { fastify.close() })
133
131
  const url = `http://localhost:${fastify.server.address().port}`
134
132
 
135
- test('request - search', t => {
133
+ await t.test('request - search', (t, done) => {
136
134
  t.plan(4)
137
135
  sget({
138
136
  method: 'SEARCH',
139
137
  url
140
138
  }, (err, response, body) => {
141
- t.error(err)
142
- t.equal(response.statusCode, 200)
143
- t.equal(response.headers['content-length'], '' + body.length)
144
- t.same(JSON.parse(body), { hello: 'world' })
139
+ t.assert.ifError(err)
140
+ t.assert.strictEqual(response.statusCode, 200)
141
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
142
+ t.assert.deepStrictEqual(JSON.parse(body), { hello: 'world' })
143
+ done()
145
144
  })
146
145
  })
147
146
 
148
- test('request search params schema', t => {
147
+ await t.test('request search params schema', (t, done) => {
149
148
  t.plan(4)
150
149
  sget({
151
150
  method: 'SEARCH',
152
151
  url: `${url}/params/world/123`
153
152
  }, (err, response, body) => {
154
- t.error(err)
155
- t.equal(response.statusCode, 200)
156
- t.equal(response.headers['content-length'], '' + body.length)
157
- t.same(JSON.parse(body), { foo: 'world', test: 123 })
153
+ t.assert.ifError(err)
154
+ t.assert.strictEqual(response.statusCode, 200)
155
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
156
+ t.assert.deepStrictEqual(JSON.parse(body), { foo: 'world', test: 123 })
157
+ done()
158
158
  })
159
159
  })
160
160
 
161
- test('request search params schema error', t => {
161
+ await t.test('request search params schema error', (t, done) => {
162
162
  t.plan(3)
163
163
  sget({
164
164
  method: 'SEARCH',
165
165
  url: `${url}/params/world/string`
166
166
  }, (err, response, body) => {
167
- t.error(err)
168
- t.equal(response.statusCode, 400)
169
- t.same(JSON.parse(body), {
167
+ t.assert.ifError(err)
168
+ t.assert.strictEqual(response.statusCode, 400)
169
+ t.assert.deepStrictEqual(JSON.parse(body), {
170
170
  error: 'Bad Request',
171
171
  code: 'FST_ERR_VALIDATION',
172
172
  message: 'params/test must be integer',
173
173
  statusCode: 400
174
174
  })
175
+ done()
175
176
  })
176
177
  })
177
178
 
178
- test('request search querystring schema', t => {
179
+ await t.test('request search querystring schema', (t, done) => {
179
180
  t.plan(4)
180
181
  sget({
181
182
  method: 'SEARCH',
182
183
  url: `${url}/query?hello=123`
183
184
  }, (err, response, body) => {
184
- t.error(err)
185
- t.equal(response.statusCode, 200)
186
- t.equal(response.headers['content-length'], '' + body.length)
187
- t.same(JSON.parse(body), { hello: 123 })
185
+ t.assert.ifError(err)
186
+ t.assert.strictEqual(response.statusCode, 200)
187
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
188
+ t.assert.deepStrictEqual(JSON.parse(body), { hello: 123 })
189
+ done()
188
190
  })
189
191
  })
190
192
 
191
- test('request search querystring schema error', t => {
193
+ await t.test('request search querystring schema error', (t, done) => {
192
194
  t.plan(3)
193
195
  sget({
194
196
  method: 'SEARCH',
195
197
  url: `${url}/query?hello=world`
196
198
  }, (err, response, body) => {
197
- t.error(err)
198
- t.equal(response.statusCode, 400)
199
- t.same(JSON.parse(body), {
199
+ t.assert.ifError(err)
200
+ t.assert.strictEqual(response.statusCode, 400)
201
+ t.assert.deepStrictEqual(JSON.parse(body), {
200
202
  error: 'Bad Request',
201
203
  code: 'FST_ERR_VALIDATION',
202
204
  message: 'querystring/hello must be integer',
203
205
  statusCode: 400
204
206
  })
207
+ done()
205
208
  })
206
209
  })
207
210
 
208
- test('request search body schema', t => {
211
+ await t.test('request search body schema', (t, done) => {
209
212
  t.plan(4)
210
213
  const replyBody = { foo: 'bar', test: 5 }
211
214
  sget({
@@ -214,14 +217,15 @@ fastify.listen({ port: 0 }, err => {
214
217
  body: JSON.stringify(replyBody),
215
218
  headers: { 'content-type': 'application/json' }
216
219
  }, (err, response, body) => {
217
- t.error(err)
218
- t.equal(response.statusCode, 200)
219
- t.equal(response.headers['content-length'], '' + body.length)
220
- t.same(JSON.parse(body), replyBody)
220
+ t.assert.ifError(err)
221
+ t.assert.strictEqual(response.statusCode, 200)
222
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
223
+ t.assert.deepStrictEqual(JSON.parse(body), replyBody)
224
+ done()
221
225
  })
222
226
  })
223
227
 
224
- test('request search body schema error', t => {
228
+ await t.test('request search body schema error', (t, done) => {
225
229
  t.plan(4)
226
230
  sget({
227
231
  method: 'SEARCH',
@@ -229,15 +233,16 @@ fastify.listen({ port: 0 }, err => {
229
233
  body: JSON.stringify({ foo: 'bar', test: 'test' }),
230
234
  headers: { 'content-type': 'application/json' }
231
235
  }, (err, response, body) => {
232
- t.error(err)
233
- t.equal(response.statusCode, 400)
234
- t.equal(response.headers['content-length'], '' + body.length)
235
- t.same(JSON.parse(body), {
236
+ t.assert.ifError(err)
237
+ t.assert.strictEqual(response.statusCode, 400)
238
+ t.assert.strictEqual(response.headers['content-length'], '' + body.length)
239
+ t.assert.deepStrictEqual(JSON.parse(body), {
236
240
  error: 'Bad Request',
237
241
  code: 'FST_ERR_VALIDATION',
238
242
  message: 'body/test must be integer',
239
243
  statusCode: 400
240
244
  })
245
+ done()
241
246
  })
242
247
  })
243
248
  })
@@ -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('../../fastify')()
6
5
  fastify.addHttpMethod('TRACE')
7
6
 
@@ -15,8 +14,8 @@ test('shorthand - trace', t => {
15
14
  reply.code(200).send('TRACE OK')
16
15
  }
17
16
  })
18
- t.pass()
17
+ t.assert.ok(true)
19
18
  } catch (e) {
20
- t.fail()
19
+ t.assert.fail()
21
20
  }
22
21
  })
@@ -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 sget = require('simple-get').concat
6
5
  const fastify = require('../../fastify')()
7
6
  fastify.addHttpMethod('UNLOCK')
@@ -16,17 +15,17 @@ test('can be created - unlock', t => {
16
15
  reply.code(204).send()
17
16
  }
18
17
  })
19
- t.pass()
18
+ t.assert.ok(true)
20
19
  } catch (e) {
21
- t.fail()
20
+ t.assert.fail()
22
21
  }
23
22
  })
24
23
 
25
- fastify.listen({ port: 0 }, err => {
26
- t.error(err)
27
- t.teardown(() => { fastify.close() })
24
+ test('unlock test', async t => {
25
+ await fastify.listen({ port: 0 })
28
26
 
29
- test('request - unlock', t => {
27
+ t.after(() => { fastify.close() })
28
+ await t.test('request - unlock', (t, done) => {
30
29
  t.plan(2)
31
30
  sget({
32
31
  url: `http://localhost:${fastify.server.address().port}/test/a.txt`,
@@ -35,8 +34,9 @@ fastify.listen({ port: 0 }, err => {
35
34
  'Lock-Token': 'urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7'
36
35
  }
37
36
  }, (err, response, body) => {
38
- t.error(err)
39
- t.equal(response.statusCode, 204)
37
+ t.assert.ifError(err)
38
+ t.assert.strictEqual(response.statusCode, 204)
39
+ done()
40
40
  })
41
41
  })
42
42
  })