fastify 4.27.0 → 5.0.0-alpha.2
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/.markdownlint-cli2.yaml +1 -1
- package/.tap/processinfo/09002e93-10ad-430c-bc86-c0576928b0ed.json +241 -0
- package/.tap/processinfo/ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json +268 -0
- package/.tap/test-results/test/404s.test.js.tap +623 -0
- package/.tap/test-results/test/500s.test.js.tap +64 -0
- package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +36 -0
- package/.tap/test-results/test/als.test.js.tap +15 -0
- package/.tap/test-results/test/async-await.test.js.tap +184 -0
- package/.tap/test-results/test/async-dispose.test.js.tap +8 -0
- package/.tap/test-results/test/async_hooks.test.js.tap +10 -0
- package/.tap/test-results/test/bodyLimit.test.js.tap +48 -0
- package/.tap/test-results/test/buffer.test.js.tap +20 -0
- package/.tap/test-results/test/build/error-serializer.test.js.tap +12 -0
- package/.tap/test-results/test/build/version.test.js.tap +7 -0
- package/.tap/test-results/test/case-insensitive.test.js.tap +36 -0
- package/.tap/test-results/test/chainable.test.js.tap +17 -0
- package/.tap/test-results/test/check.test.js.tap +10 -0
- package/.tap/test-results/test/childLoggerFactory.test.js.tap +23 -0
- package/.tap/test-results/test/client-timeout.test.js.tap +7 -0
- package/.tap/test-results/test/close-pipelining.test.js.tap +15 -0
- package/.tap/test-results/test/close.test.js.tap +172 -0
- package/.tap/test-results/test/connectionTimeout.test.js.tap +12 -0
- package/.tap/test-results/test/constrained-routes.test.js.tap +173 -0
- package/.tap/test-results/test/content-length.test.js.tap +46 -0
- package/.tap/test-results/test/content-parser.test.js.tap +266 -0
- package/.tap/test-results/test/content-type.test.js.tap +14 -0
- package/.tap/test-results/test/context-config.test.js.tap +41 -0
- package/.tap/test-results/test/copy.test.js.tap +14 -0
- package/.tap/test-results/test/custom-http-server.test.js.tap +30 -0
- package/.tap/test-results/test/custom-parser-async.test.js.tap +21 -0
- package/.tap/test-results/test/custom-parser.0.test.js.tap +199 -0
- package/.tap/test-results/test/custom-parser.1.test.js.tap +90 -0
- package/.tap/test-results/test/custom-parser.2.test.js.tap +22 -0
- package/.tap/test-results/test/custom-parser.3.test.js.tap +53 -0
- package/.tap/test-results/test/custom-parser.4.test.js.tap +45 -0
- package/.tap/test-results/test/custom-parser.5.test.js.tap +41 -0
- package/.tap/test-results/test/custom-querystring-parser.test.js.tap +46 -0
- package/.tap/test-results/test/decorator.test.js.tap +465 -0
- package/.tap/test-results/test/delete.test.js.tap +110 -0
- package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +15 -0
- package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +25 -0
- package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +24 -0
- package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +9 -0
- package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +20 -0
- package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +10 -0
- package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +14 -0
- package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +16 -0
- package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +16 -0
- package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +19 -0
- package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +18 -0
- package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +243 -0
- package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +9 -0
- package/.tap/test-results/test/esm/esm.test.mjs.tap +8 -0
- package/.tap/test-results/test/esm/index.test.js.tap +8 -0
- package/.tap/test-results/test/fastify-instance.test.js.tap +114 -0
- package/.tap/test-results/test/findRoute.test.js.tap +37 -0
- package/.tap/test-results/test/fluent-schema.test.js.tap +36 -0
- package/.tap/test-results/test/genReqId.test.js.tap +106 -0
- package/.tap/test-results/test/get.test.js.tap +151 -0
- package/.tap/test-results/test/handler-context.test.js.tap +19 -0
- package/.tap/test-results/test/has-route.test.js.tap +30 -0
- package/.tap/test-results/test/head.test.js.tap +130 -0
- package/.tap/test-results/test/header-overflow.test.js.tap +16 -0
- package/.tap/test-results/test/hooks-async.test.js.tap +286 -0
- package/.tap/test-results/test/hooks.on-listen.test.js.tap +311 -0
- package/.tap/test-results/test/hooks.on-ready.test.js.tap +151 -0
- package/.tap/test-results/test/hooks.test.js.tap +966 -0
- package/.tap/test-results/test/http2/closing.test.js.tap +35 -0
- package/.tap/test-results/test/http2/constraint.test.js.tap +32 -0
- package/.tap/test-results/test/http2/head.test.js.tap +9 -0
- package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +8 -0
- package/.tap/test-results/test/http2/plain.test.js.tap +22 -0
- package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +40 -0
- package/.tap/test-results/test/http2/secure.test.js.tap +27 -0
- package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +9 -0
- package/.tap/test-results/test/https/custom-https-server.test.js.tap +10 -0
- package/.tap/test-results/test/https/https.test.js.tap +45 -0
- package/.tap/test-results/test/imports.test.js.tap +14 -0
- package/.tap/test-results/test/inject.test.js.tap +165 -0
- package/.tap/test-results/test/internals/all.test.js.tap +42 -0
- package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +14 -0
- package/.tap/test-results/test/internals/context.test.js.tap +14 -0
- package/.tap/test-results/test/internals/decorator.test.js.tap +51 -0
- package/.tap/test-results/test/internals/errors.test.js.tap +1212 -0
- package/.tap/test-results/test/internals/handleRequest.test.js.tap +69 -0
- package/.tap/test-results/test/internals/hookRunner.test.js.tap +143 -0
- package/.tap/test-results/test/internals/hooks.test.js.tap +45 -0
- package/.tap/test-results/test/internals/initialConfig.test.js.tap +125 -0
- package/.tap/test-results/test/internals/logger.test.js.tap +71 -0
- package/.tap/test-results/test/internals/plugin.test.js.tap +48 -0
- package/.tap/test-results/test/internals/reply-serialize.test.js.tap +166 -0
- package/.tap/test-results/test/internals/reply.test.js.tap +688 -0
- package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +74 -0
- package/.tap/test-results/test/internals/request-validate.test.js.tap +384 -0
- package/.tap/test-results/test/internals/request.test.js.tap +163 -0
- package/.tap/test-results/test/internals/server.test.js.tap +30 -0
- package/.tap/test-results/test/internals/validation.test.js.tap +121 -0
- package/.tap/test-results/test/keepAliveTimeout.test.js.tap +12 -0
- package/.tap/test-results/test/listen.1.test.js.tap +31 -0
- package/.tap/test-results/test/listen.2.test.js.tap +46 -0
- package/.tap/test-results/test/listen.3.test.js.tap +25 -0
- package/.tap/test-results/test/listen.4.test.js.tap +51 -0
- package/.tap/test-results/test/lock.test.js.tap +29 -0
- package/.tap/test-results/test/logger/instantiation.test.js.tap +92 -0
- package/.tap/test-results/test/logger/logging.test.js.tap +117 -0
- package/.tap/test-results/test/logger/options.test.js.tap +165 -0
- package/.tap/test-results/test/logger/request.test.js.tap +82 -0
- package/.tap/test-results/test/logger/response.test.js.tap +38 -0
- package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +44 -0
- package/.tap/test-results/test/method-missing.test.js.tap +8 -0
- package/.tap/test-results/test/middleware.test.js.tap +17 -0
- package/.tap/test-results/test/mkcalendar.test.js.tap +43 -0
- package/.tap/test-results/test/mkcol.test.js.tap +14 -0
- package/.tap/test-results/test/move.test.js.tap +15 -0
- package/.tap/test-results/test/noop-set.test.js.tap +8 -0
- package/.tap/test-results/test/nullable-validation.test.js.tap +36 -0
- package/.tap/test-results/test/options.error-handler.test.js.tap +186 -0
- package/.tap/test-results/test/options.test.js.tap +174 -0
- package/.tap/test-results/test/output-validation.test.js.tap +66 -0
- package/.tap/test-results/test/patch.error-handler.test.js.tap +206 -0
- package/.tap/test-results/test/patch.test.js.tap +182 -0
- package/.tap/test-results/test/plugin.1.test.js.tap +78 -0
- package/.tap/test-results/test/plugin.2.test.js.tap +102 -0
- package/.tap/test-results/test/plugin.3.test.js.tap +58 -0
- package/.tap/test-results/test/plugin.4.test.js.tap +164 -0
- package/.tap/test-results/test/post-empty-body.test.js.tap +8 -0
- package/.tap/test-results/test/pretty-print.test.js.tap +82 -0
- package/.tap/test-results/test/promises.test.js.tap +46 -0
- package/.tap/test-results/test/propfind.test.js.tap +43 -0
- package/.tap/test-results/test/proppatch.test.js.tap +29 -0
- package/.tap/test-results/test/proto-poisoning.test.js.tap +47 -0
- package/.tap/test-results/test/put.error-handler.test.js.tap +206 -0
- package/.tap/test-results/test/put.test.js.tap +182 -0
- package/.tap/test-results/test/register.test.js.tap +61 -0
- package/.tap/test-results/test/reply-code.test.js.tap +40 -0
- package/.tap/test-results/test/reply-earlyHints.test.js.tap +22 -0
- package/.tap/test-results/test/reply-error.test.js.tap +643 -0
- package/.tap/test-results/test/reply-trailers.test.js.tap +176 -0
- package/.tap/test-results/test/report.test.js.tap +43 -0
- package/.tap/test-results/test/request-error.test.js.tap +98 -0
- package/.tap/test-results/test/request-id.test.js.tap +38 -0
- package/.tap/test-results/test/request.deprecated.test.js.tap +13 -0
- package/.tap/test-results/test/requestTimeout.test.js.tap +21 -0
- package/.tap/test-results/test/route-hooks.test.js.tap +498 -0
- package/.tap/test-results/test/route-prefix.test.js.tap +195 -0
- package/.tap/test-results/test/route-shorthand.test.js.tap +190 -0
- package/.tap/test-results/test/route.1.test.js.tap +93 -0
- package/.tap/test-results/test/route.2.test.js.tap +28 -0
- package/.tap/test-results/test/route.3.test.js.tap +39 -0
- package/.tap/test-results/test/route.4.test.js.tap +32 -0
- package/.tap/test-results/test/route.5.test.js.tap +54 -0
- package/.tap/test-results/test/route.6.test.js.tap +81 -0
- package/.tap/test-results/test/route.7.test.js.tap +93 -0
- package/.tap/test-results/test/route.8.test.js.tap +38 -0
- package/.tap/test-results/test/router-options.test.js.tap +104 -0
- package/.tap/test-results/test/same-shape.test.js.tap +22 -0
- package/.tap/test-results/test/schema-examples.test.js.tap +85 -0
- package/.tap/test-results/test/schema-feature.test.js.tap +445 -0
- package/.tap/test-results/test/schema-serialization.test.js.tap +194 -0
- package/.tap/test-results/test/schema-special-usage.test.js.tap +186 -0
- package/.tap/test-results/test/schema-validation.test.js.tap +199 -0
- package/.tap/test-results/test/search.test.js.tap +77 -0
- package/.tap/test-results/test/serialize-response.test.js.tap +26 -0
- package/.tap/test-results/test/server.test.js.tap +65 -0
- package/.tap/test-results/test/set-error-handler.test.js.tap +7 -0
- package/.tap/test-results/test/skip-reply-send.test.js.tap +272 -0
- package/.tap/test-results/test/stream.1.test.js.tap +36 -0
- package/.tap/test-results/test/stream.2.test.js.tap +20 -0
- package/.tap/test-results/test/stream.3.test.js.tap +34 -0
- package/.tap/test-results/test/stream.4.test.js.tap +40 -0
- package/.tap/test-results/test/stream.5.test.js.tap +37 -0
- package/.tap/test-results/test/sync-routes.test.js.tap +19 -0
- package/.tap/test-results/test/throw.test.js.tap +116 -0
- package/.tap/test-results/test/trace.test.js.tap +7 -0
- package/.tap/test-results/test/trust-proxy.test.js.tap +109 -0
- package/.tap/test-results/test/type-provider.test.js.tap +12 -0
- package/.tap/test-results/test/unlock.test.js.tap +14 -0
- package/.tap/test-results/test/upgrade.test.js.tap +8 -0
- package/.tap/test-results/test/url-rewriting.test.js.tap +39 -0
- package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +33 -0
- package/.tap/test-results/test/validation-error-handling.test.js.tap +180 -0
- package/.tap/test-results/test/versioned-routes.test.js.tap +151 -0
- package/.tap/test-results/test/web-api.test.js.tap +51 -0
- package/.tap/test-results/test/wrapThenable.test.js.tap +11 -0
- package/.taprc +4 -8
- package/README.md +3 -6
- package/build/build-error-serializer.js +4 -1
- package/build/build-validation.js +5 -4
- package/docs/Guides/Database.md +1 -1
- package/docs/Guides/Delay-Accepting-Requests.md +3 -3
- package/docs/Guides/Ecosystem.md +2 -0
- package/docs/Guides/Migration-Guide-V5.md +20 -0
- package/docs/Guides/Write-Type-Provider.md +4 -2
- package/docs/Reference/ContentTypeParser.md +30 -1
- package/docs/Reference/Decorators.md +42 -16
- package/docs/Reference/Errors.md +10 -2
- package/docs/Reference/Hooks.md +48 -14
- package/docs/Reference/Logging.md +5 -5
- package/docs/Reference/Reply.md +29 -24
- package/docs/Reference/Request.md +5 -1
- package/docs/Reference/Routes.md +24 -28
- package/docs/Reference/Server.md +14 -53
- package/docs/Reference/Type-Providers.md +21 -26
- package/docs/Reference/TypeScript.md +46 -29
- package/docs/Reference/Warnings.md +2 -8
- package/eslint.config.js +27 -0
- package/examples/typescript-server.ts +14 -14
- package/fastify.d.ts +15 -14
- package/fastify.js +41 -15
- package/lib/configValidator.js +94 -76
- package/lib/contentTypeParser.js +54 -88
- package/lib/decorate.js +3 -7
- package/lib/error-serializer.js +77 -19
- package/lib/errors.js +31 -6
- package/lib/handleRequest.js +70 -39
- package/lib/httpMethods.js +34 -18
- package/lib/logger.js +24 -6
- package/lib/pluginUtils.js +5 -5
- package/lib/reply.js +16 -13
- package/lib/request.js +37 -19
- package/lib/route.js +7 -31
- package/lib/server.js +62 -123
- package/lib/warnings.js +28 -27
- package/lib/wrapThenable.js +46 -22
- package/package.json +38 -58
- package/test/404s.test.js +8 -12
- package/test/async-await.test.js +46 -2
- package/test/build/error-serializer.test.js +4 -2
- package/test/check.test.js +225 -0
- package/test/close-pipelining.test.js +2 -34
- package/test/close.test.js +1 -41
- package/test/content-parser.test.js +69 -117
- package/test/custom-parser.1.test.js +40 -1
- package/test/decorator-namespace.test._js_ +31 -0
- package/test/decorator.test.js +92 -43
- package/test/delete.test.js +21 -1
- package/test/diagnostics-channel/404.test.js +57 -0
- package/test/diagnostics-channel/async-delay-request.test.js +74 -0
- package/test/diagnostics-channel/async-request.test.js +72 -0
- package/test/diagnostics-channel/error-before-handler.test.js +36 -0
- package/test/diagnostics-channel/error-request.test.js +61 -0
- package/test/diagnostics-channel/error-status.test.js +39 -0
- package/test/{diagnostics-channel.test.js → diagnostics-channel/init.test.js} +6 -16
- package/test/diagnostics-channel/sync-delay-request.test.js +58 -0
- package/test/diagnostics-channel/sync-request-reply.test.js +58 -0
- package/test/diagnostics-channel/sync-request.test.js +61 -0
- package/test/encapsulated-error-handler.test.js +201 -14
- package/test/esm/index.test.js +2 -12
- package/test/findRoute.test.js +16 -0
- package/test/genReqId.test.js +9 -0
- package/test/get.test.js +28 -0
- package/test/has-route.test.js +18 -2
- package/test/helper.js +1 -5
- package/test/hooks.test.js +0 -4
- package/test/http2/constraint.test.js +22 -1
- package/test/http2/plain.test.js +21 -6
- package/test/http2/secure.test.js +12 -1
- package/test/https/https.test.js +57 -0
- package/test/inject.test.js +1 -2
- package/test/internals/decorator.test.js +0 -2
- package/test/internals/errors.test.js +57 -17
- package/test/internals/handleRequest.test.js +5 -1
- package/test/internals/initialConfig.test.js +5 -5
- package/test/internals/logger.test.js +31 -2
- package/test/internals/reply.test.js +38 -80
- package/test/internals/request.test.js +13 -11
- package/test/listen.1.test.js +5 -15
- package/test/listen.5.test.js +88 -0
- package/test/logger/instantiation.test.js +8 -8
- package/test/logger/logging.test.js +4 -4
- package/test/logger/options.test.js +102 -21
- package/test/logger/response.test.js +6 -6
- package/test/maxRequestsPerSocket.test.js +2 -5
- package/test/method-missing.test.js +24 -0
- package/test/plugin.1.test.js +2 -4
- package/test/plugin.2.test.js +0 -2
- package/test/plugin.3.test.js +0 -2
- package/test/plugin.4.test.js +92 -56
- package/test/register.test.js +2 -4
- package/test/reply-earlyHints.test.js +98 -0
- package/test/reply-error.test.js +0 -2
- package/test/route-hooks.test.js +0 -1
- package/test/route-shorthand.test.js +60 -0
- package/test/schema-special-usage.test.js +1 -1
- package/test/server.test.js +17 -2
- package/test/stream.2.test.js +1 -1
- package/test/stream.4.test.js +0 -42
- package/test/stream.5.test.js +2 -2
- package/test/trust-proxy.test.js +33 -27
- package/test/types/errors.test-d.ts +0 -2
- package/test/types/fastify.test-d.ts +14 -12
- package/test/types/hooks.test-d.ts +1 -0
- package/test/types/import.ts +1 -0
- package/test/types/instance.test-d.ts +10 -51
- package/test/types/logger.test-d.ts +43 -6
- package/test/types/plugin.test-d.ts +5 -2
- package/test/types/register.test-d.ts +2 -2
- package/test/types/reply.test-d.ts +13 -12
- package/test/types/request.test-d.ts +19 -8
- package/test/types/route.test-d.ts +30 -2
- package/test/types/schema.test-d.ts +2 -2
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +60 -13
- package/test/types/using.test-d.ts +4 -1
- package/test/url-rewriting.test.js +3 -2
- package/test/useSemicolonDelimiter.test.js +3 -6
- package/test/versioned-routes.test.js +1 -1
- package/test/web-api.test.js +0 -6
- package/types/content-type-parser.d.ts +3 -3
- package/types/context.d.ts +0 -1
- package/types/errors.d.ts +1 -0
- package/types/hooks.d.ts +6 -6
- package/types/instance.d.ts +28 -41
- package/types/logger.d.ts +3 -3
- package/types/plugin.d.ts +3 -3
- package/types/reply.d.ts +13 -14
- package/types/request.d.ts +5 -3
- package/types/route.d.ts +29 -29
- package/types/schema.d.ts +3 -3
- package/types/serverFactory.d.ts +2 -2
- package/types/type-provider.d.ts +22 -12
- package/types/utils.d.ts +18 -18
- package/.c8rc.json +0 -8
- package/.eslintrc +0 -4
- package/test/default-route.test.js +0 -88
- package/test/listen.deprecated.test.js +0 -229
- package/test/unsupported-httpversion.test.js +0 -31
- package/types/.eslintrc.json +0 -48
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('tap')
|
|
4
|
+
const net = require('node:net')
|
|
5
|
+
const Fastify = require('../fastify')
|
|
6
|
+
const { once } = require('node:events')
|
|
7
|
+
|
|
8
|
+
test('same port conflict and success should not fire callback multiple times - callback', async (t) => {
|
|
9
|
+
t.plan(7)
|
|
10
|
+
const server = net.createServer()
|
|
11
|
+
server.listen({ port: 0, host: '127.0.0.1' })
|
|
12
|
+
await once(server, 'listening')
|
|
13
|
+
const option = { port: server.address().port, host: server.address().address }
|
|
14
|
+
let count = 0
|
|
15
|
+
const fastify = Fastify()
|
|
16
|
+
function callback (err) {
|
|
17
|
+
switch (count) {
|
|
18
|
+
case 6: {
|
|
19
|
+
// success in here
|
|
20
|
+
t.error(err)
|
|
21
|
+
fastify.close((err) => {
|
|
22
|
+
t.error(err)
|
|
23
|
+
})
|
|
24
|
+
break
|
|
25
|
+
}
|
|
26
|
+
case 5: {
|
|
27
|
+
server.close()
|
|
28
|
+
setTimeout(() => {
|
|
29
|
+
fastify.listen(option, callback)
|
|
30
|
+
}, 100)
|
|
31
|
+
break
|
|
32
|
+
}
|
|
33
|
+
default: {
|
|
34
|
+
// expect error
|
|
35
|
+
t.equal(err.code, 'EADDRINUSE')
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
fastify.listen(option, callback)
|
|
38
|
+
}, 100)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
count++
|
|
42
|
+
}
|
|
43
|
+
fastify.listen(option, callback)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
test('same port conflict and success should not fire callback multiple times - promise', async (t) => {
|
|
47
|
+
t.plan(5)
|
|
48
|
+
const server = net.createServer()
|
|
49
|
+
server.listen({ port: 0, host: '127.0.0.1' })
|
|
50
|
+
await once(server, 'listening')
|
|
51
|
+
const option = { port: server.address().port, host: server.address().address }
|
|
52
|
+
const fastify = Fastify()
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
await fastify.listen(option)
|
|
56
|
+
} catch (err) {
|
|
57
|
+
t.equal(err.code, 'EADDRINUSE')
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
await fastify.listen(option)
|
|
61
|
+
} catch (err) {
|
|
62
|
+
t.equal(err.code, 'EADDRINUSE')
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await fastify.listen(option)
|
|
66
|
+
} catch (err) {
|
|
67
|
+
t.equal(err.code, 'EADDRINUSE')
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
await fastify.listen(option)
|
|
71
|
+
} catch (err) {
|
|
72
|
+
t.equal(err.code, 'EADDRINUSE')
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
await fastify.listen(option)
|
|
76
|
+
} catch (err) {
|
|
77
|
+
t.equal(err.code, 'EADDRINUSE')
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
server.close()
|
|
81
|
+
|
|
82
|
+
await once(server, 'close')
|
|
83
|
+
|
|
84
|
+
// when ever we can listen, and close properly
|
|
85
|
+
// which means there is no problem on the callback
|
|
86
|
+
await fastify.listen()
|
|
87
|
+
await fastify.close()
|
|
88
|
+
})
|
|
@@ -32,9 +32,9 @@ t.test('logger instantiation', (t) => {
|
|
|
32
32
|
|
|
33
33
|
const stream = split(JSON.parse)
|
|
34
34
|
|
|
35
|
-
const
|
|
35
|
+
const loggerInstance = require('pino')(stream)
|
|
36
36
|
|
|
37
|
-
const fastify = Fastify({
|
|
37
|
+
const fastify = Fastify({ loggerInstance })
|
|
38
38
|
t.teardown(fastify.close.bind(fastify))
|
|
39
39
|
|
|
40
40
|
fastify.get('/foo', function (req, reply) {
|
|
@@ -203,17 +203,17 @@ t.test('logger instantiation', (t) => {
|
|
|
203
203
|
t.test('should be able to use a custom logger', (t) => {
|
|
204
204
|
t.plan(7)
|
|
205
205
|
|
|
206
|
-
const
|
|
206
|
+
const loggerInstance = {
|
|
207
207
|
fatal: (msg) => { t.equal(msg, 'fatal') },
|
|
208
208
|
error: (msg) => { t.equal(msg, 'error') },
|
|
209
209
|
warn: (msg) => { t.equal(msg, 'warn') },
|
|
210
210
|
info: (msg) => { t.equal(msg, 'info') },
|
|
211
211
|
debug: (msg) => { t.equal(msg, 'debug') },
|
|
212
212
|
trace: (msg) => { t.equal(msg, 'trace') },
|
|
213
|
-
child: () =>
|
|
213
|
+
child: () => loggerInstance
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
const fastify = Fastify({
|
|
216
|
+
const fastify = Fastify({ loggerInstance })
|
|
217
217
|
t.teardown(fastify.close.bind(fastify))
|
|
218
218
|
|
|
219
219
|
fastify.log.fatal('fatal')
|
|
@@ -223,7 +223,7 @@ t.test('logger instantiation', (t) => {
|
|
|
223
223
|
fastify.log.debug('debug')
|
|
224
224
|
fastify.log.trace('trace')
|
|
225
225
|
const child = fastify.log.child()
|
|
226
|
-
t.equal(child,
|
|
226
|
+
t.equal(child, loggerInstance)
|
|
227
227
|
})
|
|
228
228
|
|
|
229
229
|
t.test('should throw in case a partially matching logger is provided', async (t) => {
|
|
@@ -246,7 +246,7 @@ t.test('logger instantiation', (t) => {
|
|
|
246
246
|
t.plan(lines.length + 1)
|
|
247
247
|
|
|
248
248
|
const stream = split(JSON.parse)
|
|
249
|
-
const
|
|
249
|
+
const loggerInstance = require('pino')({
|
|
250
250
|
level: 'info',
|
|
251
251
|
serializers: {
|
|
252
252
|
req: function (req) {
|
|
@@ -258,7 +258,7 @@ t.test('logger instantiation', (t) => {
|
|
|
258
258
|
}, stream)
|
|
259
259
|
|
|
260
260
|
const fastify = Fastify({
|
|
261
|
-
|
|
261
|
+
loggerInstance
|
|
262
262
|
})
|
|
263
263
|
t.teardown(fastify.close.bind(fastify))
|
|
264
264
|
|
|
@@ -29,10 +29,10 @@ t.test('logging', (t) => {
|
|
|
29
29
|
|
|
30
30
|
const stream = split(JSON.parse)
|
|
31
31
|
|
|
32
|
-
const
|
|
32
|
+
const loggerInstance = pino({ level: 'trace' }, stream)
|
|
33
33
|
|
|
34
34
|
const fastify = Fastify({
|
|
35
|
-
|
|
35
|
+
loggerInstance
|
|
36
36
|
})
|
|
37
37
|
t.teardown(fastify.close.bind(fastify))
|
|
38
38
|
|
|
@@ -229,10 +229,10 @@ t.test('logging', (t) => {
|
|
|
229
229
|
t.plan(lines.length + 1)
|
|
230
230
|
|
|
231
231
|
const stream = split(JSON.parse)
|
|
232
|
-
const
|
|
232
|
+
const loggerInstance = pino(stream)
|
|
233
233
|
|
|
234
234
|
const fastify = Fastify({
|
|
235
|
-
|
|
235
|
+
loggerInstance
|
|
236
236
|
})
|
|
237
237
|
t.teardown(fastify.close.bind(fastify))
|
|
238
238
|
|
|
@@ -12,7 +12,7 @@ const { on } = stream
|
|
|
12
12
|
t.test('logger options', (t) => {
|
|
13
13
|
t.setTimeout(60000)
|
|
14
14
|
|
|
15
|
-
t.plan(
|
|
15
|
+
t.plan(16)
|
|
16
16
|
|
|
17
17
|
t.test('logger can be silenced', (t) => {
|
|
18
18
|
t.plan(17)
|
|
@@ -48,10 +48,10 @@ t.test('logger options', (t) => {
|
|
|
48
48
|
|
|
49
49
|
const stream = split(JSON.parse)
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
52
52
|
|
|
53
53
|
const fastify = Fastify({
|
|
54
|
-
|
|
54
|
+
loggerInstance
|
|
55
55
|
})
|
|
56
56
|
t.teardown(fastify.close.bind(fastify))
|
|
57
57
|
|
|
@@ -94,10 +94,10 @@ t.test('logger options', (t) => {
|
|
|
94
94
|
|
|
95
95
|
const stream = split(JSON.parse)
|
|
96
96
|
|
|
97
|
-
const
|
|
97
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
98
98
|
|
|
99
99
|
const fastify = Fastify({
|
|
100
|
-
|
|
100
|
+
loggerInstance
|
|
101
101
|
})
|
|
102
102
|
t.teardown(fastify.close.bind(fastify))
|
|
103
103
|
|
|
@@ -130,10 +130,10 @@ t.test('logger options', (t) => {
|
|
|
130
130
|
|
|
131
131
|
const stream = split(JSON.parse)
|
|
132
132
|
|
|
133
|
-
const
|
|
133
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
134
134
|
|
|
135
135
|
const fastify = Fastify({
|
|
136
|
-
|
|
136
|
+
loggerInstance
|
|
137
137
|
})
|
|
138
138
|
t.teardown(fastify.close.bind(fastify))
|
|
139
139
|
|
|
@@ -193,9 +193,9 @@ t.test('logger options', (t) => {
|
|
|
193
193
|
|
|
194
194
|
const stream = split(JSON.parse)
|
|
195
195
|
|
|
196
|
-
const
|
|
196
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
197
197
|
const fastify = Fastify({
|
|
198
|
-
|
|
198
|
+
loggerInstance
|
|
199
199
|
})
|
|
200
200
|
t.teardown(fastify.close.bind(fastify))
|
|
201
201
|
|
|
@@ -252,9 +252,9 @@ t.test('logger options', (t) => {
|
|
|
252
252
|
|
|
253
253
|
const stream = split(JSON.parse)
|
|
254
254
|
|
|
255
|
-
const
|
|
255
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
256
256
|
const fastify = Fastify({
|
|
257
|
-
|
|
257
|
+
loggerInstance
|
|
258
258
|
})
|
|
259
259
|
t.teardown(fastify.close.bind(fastify))
|
|
260
260
|
|
|
@@ -290,9 +290,9 @@ t.test('logger options', (t) => {
|
|
|
290
290
|
|
|
291
291
|
const stream = split(JSON.parse)
|
|
292
292
|
|
|
293
|
-
const
|
|
293
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
294
294
|
const fastify = Fastify({
|
|
295
|
-
|
|
295
|
+
loggerInstance
|
|
296
296
|
})
|
|
297
297
|
t.teardown(fastify.close.bind(fastify))
|
|
298
298
|
|
|
@@ -333,10 +333,10 @@ t.test('logger options', (t) => {
|
|
|
333
333
|
|
|
334
334
|
const stream = split(JSON.parse)
|
|
335
335
|
|
|
336
|
-
const
|
|
336
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
337
337
|
|
|
338
338
|
const fastify = Fastify({
|
|
339
|
-
|
|
339
|
+
loggerInstance
|
|
340
340
|
})
|
|
341
341
|
t.teardown(fastify.close.bind(fastify))
|
|
342
342
|
|
|
@@ -369,10 +369,10 @@ t.test('logger options', (t) => {
|
|
|
369
369
|
|
|
370
370
|
const stream = split(JSON.parse)
|
|
371
371
|
|
|
372
|
-
const
|
|
372
|
+
const loggerInstance = pino({ level: 'warn' }, stream)
|
|
373
373
|
|
|
374
374
|
const fastify = Fastify({
|
|
375
|
-
|
|
375
|
+
loggerInstance
|
|
376
376
|
})
|
|
377
377
|
t.teardown(fastify.close.bind(fastify))
|
|
378
378
|
|
|
@@ -404,10 +404,10 @@ t.test('logger options', (t) => {
|
|
|
404
404
|
|
|
405
405
|
const stream = split(JSON.parse)
|
|
406
406
|
|
|
407
|
-
const
|
|
407
|
+
const loggerInstance = pino({ level: 'warn' }, stream)
|
|
408
408
|
|
|
409
409
|
const fastify = Fastify({
|
|
410
|
-
|
|
410
|
+
loggerInstance
|
|
411
411
|
})
|
|
412
412
|
t.teardown(fastify.close.bind(fastify))
|
|
413
413
|
|
|
@@ -444,10 +444,10 @@ t.test('logger options', (t) => {
|
|
|
444
444
|
|
|
445
445
|
const stream = split(JSON.parse)
|
|
446
446
|
|
|
447
|
-
const
|
|
447
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
448
448
|
|
|
449
449
|
const fastify = Fastify({
|
|
450
|
-
|
|
450
|
+
loggerInstance
|
|
451
451
|
})
|
|
452
452
|
t.teardown(fastify.close.bind(fastify))
|
|
453
453
|
|
|
@@ -497,4 +497,85 @@ t.test('logger options', (t) => {
|
|
|
497
497
|
t.equal(typeof fastify.log.trace, 'function')
|
|
498
498
|
t.equal(typeof fastify.log.child, 'function')
|
|
499
499
|
})
|
|
500
|
+
|
|
501
|
+
t.test('Should throw an error if logger instance is passed to `logger`', async (t) => {
|
|
502
|
+
t.plan(2)
|
|
503
|
+
const stream = split(JSON.parse)
|
|
504
|
+
|
|
505
|
+
const logger = require('pino')(stream)
|
|
506
|
+
|
|
507
|
+
try {
|
|
508
|
+
Fastify({ logger })
|
|
509
|
+
} catch (err) {
|
|
510
|
+
t.ok(err)
|
|
511
|
+
t.equal(err.code, 'FST_ERR_LOG_INVALID_LOGGER_CONFIG')
|
|
512
|
+
}
|
|
513
|
+
})
|
|
514
|
+
|
|
515
|
+
t.test('Should throw an error if options are passed to `loggerInstance`', async (t) => {
|
|
516
|
+
t.plan(2)
|
|
517
|
+
try {
|
|
518
|
+
Fastify({ loggerInstance: { level: 'log' } })
|
|
519
|
+
} catch (err) {
|
|
520
|
+
t.ok(err)
|
|
521
|
+
t.equal(err.code, 'FST_ERR_LOG_INVALID_LOGGER_INSTANCE')
|
|
522
|
+
}
|
|
523
|
+
})
|
|
524
|
+
|
|
525
|
+
t.test('If both `loggerInstance` and `logger` are provided, an error should be thrown', async (t) => {
|
|
526
|
+
t.plan(2)
|
|
527
|
+
const loggerInstanceStream = split(JSON.parse)
|
|
528
|
+
const loggerInstance = pino({ level: 'error' }, loggerInstanceStream)
|
|
529
|
+
const loggerStream = split(JSON.parse)
|
|
530
|
+
try {
|
|
531
|
+
Fastify({
|
|
532
|
+
logger: {
|
|
533
|
+
stream: loggerStream,
|
|
534
|
+
level: 'info'
|
|
535
|
+
},
|
|
536
|
+
loggerInstance
|
|
537
|
+
})
|
|
538
|
+
} catch (err) {
|
|
539
|
+
t.ok(err)
|
|
540
|
+
t.equal(err.code, 'FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED')
|
|
541
|
+
}
|
|
542
|
+
})
|
|
543
|
+
|
|
544
|
+
t.test('`logger` should take pino configuration and create a pino logger', async (t) => {
|
|
545
|
+
const lines = ['hello', 'world']
|
|
546
|
+
t.plan(2 * lines.length + 2)
|
|
547
|
+
const loggerStream = split(JSON.parse)
|
|
548
|
+
const fastify = Fastify({
|
|
549
|
+
logger: {
|
|
550
|
+
stream: loggerStream,
|
|
551
|
+
level: 'error'
|
|
552
|
+
}
|
|
553
|
+
})
|
|
554
|
+
t.teardown(fastify.close.bind(fastify))
|
|
555
|
+
fastify.get('/hello', (req, reply) => {
|
|
556
|
+
req.log.error('hello')
|
|
557
|
+
reply.code(404).send()
|
|
558
|
+
})
|
|
559
|
+
|
|
560
|
+
fastify.get('/world', (req, reply) => {
|
|
561
|
+
req.log.error('world')
|
|
562
|
+
reply.code(201).send()
|
|
563
|
+
})
|
|
564
|
+
|
|
565
|
+
await fastify.ready()
|
|
566
|
+
{
|
|
567
|
+
const response = await fastify.inject({ method: 'GET', url: '/hello' })
|
|
568
|
+
t.equal(response.statusCode, 404)
|
|
569
|
+
}
|
|
570
|
+
{
|
|
571
|
+
const response = await fastify.inject({ method: 'GET', url: '/world' })
|
|
572
|
+
t.equal(response.statusCode, 201)
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
for await (const [line] of on(loggerStream, 'data')) {
|
|
576
|
+
t.equal(line.level, 50)
|
|
577
|
+
t.equal(line.msg, lines.shift())
|
|
578
|
+
if (lines.length === 0) break
|
|
579
|
+
}
|
|
580
|
+
})
|
|
500
581
|
})
|
|
@@ -24,9 +24,9 @@ t.test('response serialization', (t) => {
|
|
|
24
24
|
|
|
25
25
|
const stream = split(JSON.parse)
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
28
28
|
const fastify = Fastify({
|
|
29
|
-
|
|
29
|
+
loggerInstance
|
|
30
30
|
})
|
|
31
31
|
t.teardown(fastify.close.bind(fastify))
|
|
32
32
|
|
|
@@ -70,7 +70,7 @@ t.test('response serialization', (t) => {
|
|
|
70
70
|
|
|
71
71
|
const stream = split(JSON.parse)
|
|
72
72
|
|
|
73
|
-
const
|
|
73
|
+
const loggerInstance = pino({
|
|
74
74
|
level: 'info',
|
|
75
75
|
serializers: {
|
|
76
76
|
test: value => 'X' + value,
|
|
@@ -78,7 +78,7 @@ t.test('response serialization', (t) => {
|
|
|
78
78
|
}
|
|
79
79
|
}, stream)
|
|
80
80
|
const fastify = Fastify({
|
|
81
|
-
|
|
81
|
+
loggerInstance
|
|
82
82
|
})
|
|
83
83
|
t.teardown(fastify.close.bind(fastify))
|
|
84
84
|
|
|
@@ -115,14 +115,14 @@ t.test('response serialization', (t) => {
|
|
|
115
115
|
|
|
116
116
|
const stream = split(JSON.parse)
|
|
117
117
|
|
|
118
|
-
const
|
|
118
|
+
const loggerInstance = pino({
|
|
119
119
|
level: 'info',
|
|
120
120
|
serializers: {
|
|
121
121
|
test: value => 'X' + value
|
|
122
122
|
}
|
|
123
123
|
}, stream)
|
|
124
124
|
|
|
125
|
-
const fastify = Fastify({
|
|
125
|
+
const fastify = Fastify({ loggerInstance })
|
|
126
126
|
t.teardown(fastify.close.bind(fastify))
|
|
127
127
|
|
|
128
128
|
fastify.register(context1, { logSerializers: { test2: value => 'Y' + value } })
|
|
@@ -2,12 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
const net = require('node:net')
|
|
4
4
|
const { test } = require('tap')
|
|
5
|
-
const semver = require('semver')
|
|
6
5
|
const Fastify = require('../fastify')
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
test('maxRequestsPerSocket on node version >= 16.10.0', { skip }, t => {
|
|
7
|
+
test('maxRequestsPerSocket', t => {
|
|
11
8
|
t.plan(8)
|
|
12
9
|
|
|
13
10
|
const fastify = Fastify({ maxRequestsPerSocket: 2 })
|
|
@@ -48,7 +45,7 @@ test('maxRequestsPerSocket on node version >= 16.10.0', { skip }, t => {
|
|
|
48
45
|
})
|
|
49
46
|
})
|
|
50
47
|
|
|
51
|
-
test('maxRequestsPerSocket zero should behave same as null',
|
|
48
|
+
test('maxRequestsPerSocket zero should behave same as null', t => {
|
|
52
49
|
t.plan(10)
|
|
53
50
|
|
|
54
51
|
const fastify = Fastify({ maxRequestsPerSocket: 0 })
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const http = require('http')
|
|
2
|
+
const { test } = require('tap')
|
|
3
|
+
const Fastify = require('../fastify')
|
|
4
|
+
|
|
5
|
+
test('missing method from http client', t => {
|
|
6
|
+
t.plan(2)
|
|
7
|
+
const fastify = Fastify()
|
|
8
|
+
|
|
9
|
+
fastify.listen({ port: 3000 }, (err) => {
|
|
10
|
+
t.error(err)
|
|
11
|
+
|
|
12
|
+
const port = fastify.server.address().port
|
|
13
|
+
const req = http.request({
|
|
14
|
+
port,
|
|
15
|
+
method: 'REBIND',
|
|
16
|
+
path: '/'
|
|
17
|
+
}, (res) => {
|
|
18
|
+
t.equal(res.statusCode, 404)
|
|
19
|
+
fastify.close()
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
req.end()
|
|
23
|
+
})
|
|
24
|
+
})
|
package/test/plugin.1.test.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const t = require('tap')
|
|
6
4
|
const test = t.test
|
|
7
5
|
const Fastify = require('../fastify')
|
|
@@ -117,8 +115,8 @@ test('fastify.register with fastify-plugin should provide access to external fas
|
|
|
117
115
|
|
|
118
116
|
instance.register((i, o, n) => n(), p => {
|
|
119
117
|
t.notOk(p === instance || p === fastify)
|
|
120
|
-
t.ok(
|
|
121
|
-
t.ok(
|
|
118
|
+
t.ok(Object.prototype.isPrototypeOf.call(instance, p))
|
|
119
|
+
t.ok(Object.prototype.isPrototypeOf.call(fastify, p))
|
|
122
120
|
t.ok(p.global)
|
|
123
121
|
})
|
|
124
122
|
|
package/test/plugin.2.test.js
CHANGED