fastify 4.28.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/{86b9786f-4a98-43b8-882a-5f936b876f08.json → 09002e93-10ad-430c-bc86-c0576928b0ed.json} +60 -60
- package/.tap/processinfo/{70168912-9bb2-4334-bb89-041f1764cddf.json → ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json} +71 -71
- package/.tap/test-results/test/build/error-serializer.test.js.tap +6 -2
- package/.tap/test-results/test/build/version.test.js.tap +1 -1
- 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 +23 -18
- 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 +0 -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 +2 -1
- 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 +7 -10
- package/lib/request.js +37 -19
- package/lib/route.js +6 -34
- package/lib/server.js +62 -123
- package/lib/warnings.js +24 -29
- 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 -41
- 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 +1 -1
- 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 +6 -78
- 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 +59 -12
- 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 +9 -12
- package/types/request.d.ts +5 -3
- package/types/route.d.ts +31 -31
- 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 -23
- package/.c8rc.json +0 -8
- package/.eslintrc +0 -4
- package/.tap/processinfo/029eb7a1-1942-40bc-98e2-cef3b7a14b5e.json +0 -268
- package/.tap/processinfo/03c196c6-01c3-4268-a9b5-298dff18a873.json +0 -269
- package/.tap/processinfo/04bbabba-8611-4908-9092-dfa9fcc13327.json +0 -268
- package/.tap/processinfo/05d8a743-3edf-4e2d-ae5a-dc99d0855ba5.json +0 -272
- package/.tap/processinfo/07718963-36a8-4d87-82ad-366c877a5247.json +0 -268
- package/.tap/processinfo/08fe3bde-5814-4308-9158-cdf1e47391b7.json +0 -268
- package/.tap/processinfo/0a3e3fb0-eabf-4532-ae80-20434da22678.json +0 -268
- package/.tap/processinfo/0caf2a75-4b3a-46c4-9b41-c7e450e5e15f.json +0 -268
- package/.tap/processinfo/0cf35d52-e5b2-4884-bcf0-b0ab3017b689.json +0 -268
- package/.tap/processinfo/0e666134-5013-4ecd-9ee6-59b22716c39c.json +0 -268
- package/.tap/processinfo/1087b811-4ec4-4f91-92b4-a78a51a437de.json +0 -268
- package/.tap/processinfo/13709ed3-b68c-42cf-8472-b0c4b8a89d2b.json +0 -268
- package/.tap/processinfo/13ac2f18-d0e0-439f-bc86-2ff0119af857.json +0 -268
- package/.tap/processinfo/13e47e0e-f6e8-4381-8a42-923b661f4a4f.json +0 -268
- package/.tap/processinfo/143f7d43-b8e8-4666-b482-f28fb37160ee.json +0 -268
- package/.tap/processinfo/14f3801d-03ab-4db3-9df5-c5d47e0a8cf0.json +0 -270
- package/.tap/processinfo/15a07dad-4bcd-442c-95e0-30c31f2b9818.json +0 -273
- package/.tap/processinfo/191ad3ad-04d8-4fb9-b119-ad2811f9b925.json +0 -243
- package/.tap/processinfo/1b25d54b-62d3-44cd-b581-31e705522fae.json +0 -268
- package/.tap/processinfo/1b7cb260-f04b-4135-a4fe-093081c4706f.json +0 -268
- package/.tap/processinfo/1e395d63-4815-4c77-aa47-df3709cc0ef9.json +0 -268
- package/.tap/processinfo/1e7f6a54-3abf-4771-863a-585cba110aec.json +0 -268
- package/.tap/processinfo/21a15e1d-0b41-47d8-b03d-0ba130969034.json +0 -244
- package/.tap/processinfo/21e02016-9ecd-4983-8417-9c74d224644f.json +0 -269
- package/.tap/processinfo/2327d941-d0d5-4762-b386-02a9a27ad28e.json +0 -268
- package/.tap/processinfo/23d39204-eac9-4f57-8db4-ffa996227fbd.json +0 -268
- package/.tap/processinfo/2493875a-0ac6-4d53-993c-f44471fd0678.json +0 -268
- package/.tap/processinfo/2698669f-f1e7-4a12-a687-8d58177be2b0.json +0 -269
- package/.tap/processinfo/2862b053-0a3d-46d7-9381-ffcb06287609.json +0 -268
- package/.tap/processinfo/2ac1b8d6-ac92-40e2-a59a-7681069f487c.json +0 -268
- package/.tap/processinfo/2c75e5f7-c4ef-47e4-a1c4-105eef6c0fab.json +0 -242
- package/.tap/processinfo/2e2c45cd-718b-4e5a-bf88-f801630f2803.json +0 -268
- package/.tap/processinfo/2f9ca478-3e03-4cce-a0bc-fcdc86d7c316.json +0 -268
- package/.tap/processinfo/30e3117f-fb74-456f-8f02-527e9eb9fcc3.json +0 -268
- package/.tap/processinfo/332be679-63c7-4b49-8b87-ef55995ada2d.json +0 -268
- package/.tap/processinfo/37c36f95-07f9-4ef0-8ab4-9e107d51b605.json +0 -269
- package/.tap/processinfo/3874eae2-f3db-44ef-9a9f-c8169d4b2b76.json +0 -268
- package/.tap/processinfo/38a7c3da-a411-41d0-8993-9deefd23500d.json +0 -268
- package/.tap/processinfo/3a7b6dbd-e153-4ce5-b557-21fb82009983.json +0 -269
- package/.tap/processinfo/3c6731ec-936d-470f-b7b0-0c87b54be051.json +0 -268
- package/.tap/processinfo/3c850ea9-4ef0-4044-a3fd-fbadfa9d543e.json +0 -268
- package/.tap/processinfo/3e4e15e0-a325-46f0-be57-5fd374560b7a.json +0 -269
- package/.tap/processinfo/3ed868e0-887c-402a-9f22-b1fdb74b4da0.json +0 -268
- package/.tap/processinfo/405498d7-5854-4ce1-a7dc-06920932f26d.json +0 -268
- package/.tap/processinfo/40b7eb19-ae35-4490-8a11-eb91a573c590.json +0 -268
- package/.tap/processinfo/40bb1260-d856-4248-8939-a0a05e322041.json +0 -268
- package/.tap/processinfo/41252e0b-7f69-44cc-b356-dd94bcbfdb29.json +0 -268
- package/.tap/processinfo/418fa710-e2fd-4508-b533-c179958da464.json +0 -269
- package/.tap/processinfo/433ef009-63aa-48fe-8e5d-c725228fa2fc.json +0 -268
- package/.tap/processinfo/44bf577c-9c01-4197-bd29-2e1ae888c4d4.json +0 -268
- package/.tap/processinfo/458fb7f2-20b9-48a2-8853-403c9851f605.json +0 -268
- package/.tap/processinfo/46b9892b-bb23-4b86-b0fa-9297f08c611a.json +0 -268
- package/.tap/processinfo/46bd9aaf-6cf3-4bd5-b90d-e136a7299a8e.json +0 -268
- package/.tap/processinfo/4779aa5f-e57a-4fcc-87e2-7d0bd4fca27f.json +0 -268
- package/.tap/processinfo/47b73f4b-ab31-49e1-97fd-8436dbe4bdf3.json +0 -269
- package/.tap/processinfo/49dba52e-e0c9-445d-8e9d-6d9ebe3ce6c4.json +0 -268
- package/.tap/processinfo/4b1dbc61-4e65-4c56-9784-2036f369038a.json +0 -268
- package/.tap/processinfo/4b6f0b40-43ef-4668-83a0-e07e28509df5.json +0 -268
- package/.tap/processinfo/4c236f70-f532-460b-8f7a-dd973301d493.json +0 -268
- package/.tap/processinfo/4d92b707-a268-48b8-885b-004d3a288c41.json +0 -269
- package/.tap/processinfo/4ff10bae-7c97-4c0a-b712-6c0d2f8c0e8e.json +0 -270
- package/.tap/processinfo/50f95bd5-ae12-4d83-99f4-ae9b0690c6a8.json +0 -268
- package/.tap/processinfo/557e4a49-d99c-4a63-b2f2-f33d897ab874.json +0 -268
- package/.tap/processinfo/589fd21a-8319-4abf-8cf7-82cb4a463a4b.json +0 -269
- package/.tap/processinfo/5a872f3a-949f-40be-8004-d739d034255c.json +0 -272
- package/.tap/processinfo/5abc301a-23da-424d-891e-3afbaff9156c.json +0 -269
- package/.tap/processinfo/5c31614c-a766-4837-ab59-dd6977166f72.json +0 -253
- package/.tap/processinfo/5d1e90c8-d819-4901-b022-f9ea4cd81978.json +0 -268
- package/.tap/processinfo/5d283e67-f31d-4fa8-a559-a1d8e82ee046.json +0 -269
- package/.tap/processinfo/5df505bc-6a4b-4c41-822f-51e2d7111de8.json +0 -268
- package/.tap/processinfo/5eaf64a2-fbfd-40e7-b391-c30f744b2bf1.json +0 -269
- package/.tap/processinfo/5ef5ede0-6436-4938-8401-d32ad4bffd5d.json +0 -268
- package/.tap/processinfo/606f05c0-8293-41db-bc92-eea82123697f.json +0 -269
- package/.tap/processinfo/6446806d-6cab-4c1d-a9ed-6bccaf3c4ea9.json +0 -268
- package/.tap/processinfo/64da7e08-925d-444d-98de-6568c6115d8d.json +0 -269
- package/.tap/processinfo/6917da6d-d2dc-466a-a893-7fb7412dde96.json +0 -268
- package/.tap/processinfo/69bbeee0-c398-4ccf-98b3-fb625a63bab4.json +0 -268
- package/.tap/processinfo/6da6ea8f-3370-4703-b230-90159531f766.json +0 -268
- package/.tap/processinfo/6ecffe1f-3016-4c11-9294-b488baced99f.json +0 -268
- package/.tap/processinfo/6f23f41f-ccbd-48cb-9ab6-311db0cfb65c.json +0 -270
- package/.tap/processinfo/713a674e-40e1-46b4-866e-949d57c1a9f9.json +0 -270
- package/.tap/processinfo/730254d4-eacb-4cdf-80f4-8da22341cde5.json +0 -268
- package/.tap/processinfo/7344e559-c546-416f-8f1b-0f9fe12c6f02.json +0 -268
- package/.tap/processinfo/7556217a-0155-448f-b4d4-bec1bb0f6040.json +0 -269
- package/.tap/processinfo/7572079c-166c-4c4c-85ff-89b9430b214f.json +0 -268
- package/.tap/processinfo/7808180f-1974-47cd-bba2-2d6b8b711d65.json +0 -273
- package/.tap/processinfo/796dde83-da66-4db2-8d27-d45a3627c9c7.json +0 -268
- package/.tap/processinfo/7979819f-3723-48be-9f55-be700e689441.json +0 -270
- package/.tap/processinfo/7a664d39-d7f5-42f9-89df-15563048fab6.json +0 -268
- package/.tap/processinfo/7b047b72-01d9-4217-857c-93341651b4b3.json +0 -269
- package/.tap/processinfo/7ce41af6-7961-45ae-8c6f-b6e1c5692a48.json +0 -268
- package/.tap/processinfo/7e1de1c6-127e-463d-9357-081ee33ef5ce.json +0 -269
- package/.tap/processinfo/81ac7a7f-b0c0-4ef6-82cb-c718ea84e152.json +0 -268
- package/.tap/processinfo/851a058f-a497-4b10-a0b7-c9182d9c4d5a.json +0 -268
- package/.tap/processinfo/86502974-c245-4194-ade4-d9c6fdbb757e.json +0 -268
- package/.tap/processinfo/8a3fe726-86ab-4300-8d73-7eacbbc02a05.json +0 -268
- package/.tap/processinfo/8adf928b-c963-4ba0-9c35-606fcbd8a2aa.json +0 -272
- package/.tap/processinfo/8b31a6d8-1a33-4a27-93ca-1c5b364be068.json +0 -240
- package/.tap/processinfo/8ec12773-6b18-49a2-8e52-874c797df965.json +0 -833
- package/.tap/processinfo/8edb9502-3420-42fb-a602-e5de93be2df1.json +0 -268
- package/.tap/processinfo/8fc572e6-9828-4f98-a49c-9e081b2193c4.json +0 -242
- package/.tap/processinfo/8fee2d30-c5dd-4fae-9cf2-2ef8dd0f90de.json +0 -834
- package/.tap/processinfo/92cc0496-5f26-4370-8212-18136b972f99.json +0 -268
- package/.tap/processinfo/93a3f064-3f6e-4f49-becb-f7925f2961a9.json +0 -268
- package/.tap/processinfo/967e3697-8310-4a19-8dd5-927ac8bd6c79.json +0 -269
- package/.tap/processinfo/97225e23-9d30-4287-b3f5-72bccebec50b.json +0 -268
- package/.tap/processinfo/9a363bc6-4e65-47e8-94ca-26a9db428fb4.json +0 -268
- package/.tap/processinfo/9d2fe462-57fa-43f1-b02c-d188f15de30b.json +0 -270
- package/.tap/processinfo/a00b6cda-feb7-4b8a-8179-4c43bc29d670.json +0 -269
- package/.tap/processinfo/a017cbd5-4ac7-49e1-8c77-1bf4f6e7f2a6.json +0 -271
- package/.tap/processinfo/a1277309-1984-48f8-b60b-f5e8639736be.json +0 -271
- package/.tap/processinfo/a16bf53e-4337-48ff-88fa-67f55738e0f5.json +0 -268
- package/.tap/processinfo/a3a9848f-440e-41bb-9b0b-568bcfee0ddc.json +0 -268
- package/.tap/processinfo/a468c11f-f2f1-4e92-9ba0-6d28b6569b72.json +0 -268
- package/.tap/processinfo/a5880465-68f1-46b3-84a5-0da389d0bc67.json +0 -268
- package/.tap/processinfo/a666f394-39b4-44ad-8e74-abebf74dde3b.json +0 -270
- package/.tap/processinfo/af09d8ca-7053-4410-b514-b22c47f5979f.json +0 -268
- package/.tap/processinfo/af203309-28aa-459d-a56e-d88833695521.json +0 -268
- package/.tap/processinfo/afa2f7b6-dcd2-4d90-bf3c-54ba8b6800eb.json +0 -268
- package/.tap/processinfo/b231291d-ef14-4ff0-85f9-38a73a5408f8.json +0 -268
- package/.tap/processinfo/b3d3f2a1-a9fc-4d88-b122-fae90248cd59.json +0 -268
- package/.tap/processinfo/b834bf83-26c4-403a-8e91-eb15fe4b0b5d.json +0 -268
- package/.tap/processinfo/b8786fd7-47df-4ac1-8d6f-2d4c7623c681.json +0 -268
- package/.tap/processinfo/b9758f53-7f5a-4b03-8684-8a42ad644e5a.json +0 -268
- package/.tap/processinfo/bd194ea2-a21a-4604-b225-ee48abf1e607.json +0 -242
- package/.tap/processinfo/bd7ced53-3872-43b7-ad73-3352e50b728b.json +0 -268
- package/.tap/processinfo/be50295b-7e50-46cd-8bf1-637bf222699c.json +0 -268
- package/.tap/processinfo/bec61dd9-aa52-4e6c-8e37-5c9c10e935fd.json +0 -268
- package/.tap/processinfo/c015adf9-1d60-447e-87b5-b2031fe55bba.json +0 -268
- package/.tap/processinfo/c0666afa-7f64-45bd-97fb-145df1380157.json +0 -268
- package/.tap/processinfo/c2c0c012-c1c0-4457-84d6-dadba8396c94.json +0 -268
- package/.tap/processinfo/c3dd3ecd-737b-47ce-a917-54341c7bbed3.json +0 -268
- package/.tap/processinfo/c41ac06d-64b8-4bb3-bf56-0551f5a48f4b.json +0 -268
- package/.tap/processinfo/c4235bfb-a2aa-4271-9c6b-3ceb370219b1.json +0 -268
- package/.tap/processinfo/c4e6f24f-288c-493c-b6f0-02924aeb6758.json +0 -270
- package/.tap/processinfo/c54227bb-4a7b-40bb-bfe6-b54fe55078f3.json +0 -268
- package/.tap/processinfo/c699de91-3b0b-4466-9418-6910a3eb640a.json +0 -269
- package/.tap/processinfo/c74e2f37-451a-4577-ac18-e597fbd9a1d4.json +0 -269
- package/.tap/processinfo/c90cccec-5b4b-445f-a935-ac22859675d0.json +0 -252
- package/.tap/processinfo/c9dd6c7d-0d16-45e5-87ae-117388bf2994.json +0 -268
- package/.tap/processinfo/ca2e48fb-58c5-47fc-ad2e-263838aea42c.json +0 -272
- package/.tap/processinfo/ca87351d-c710-45c1-838a-16bccac59874.json +0 -273
- package/.tap/processinfo/cdb4a671-5776-4944-91b9-c456c58841ef.json +0 -268
- package/.tap/processinfo/cf10fdc8-6a87-447a-9e12-45f447af61f3.json +0 -244
- package/.tap/processinfo/cf3f1f08-643e-4f24-82ca-40f7a349c3d1.json +0 -268
- package/.tap/processinfo/d091172a-06a5-469b-82a9-8fefe3dd99da.json +0 -240
- package/.tap/processinfo/d1675431-61d6-45f8-a010-6e654112a00a.json +0 -272
- package/.tap/processinfo/d2d54aa2-c221-4ad4-b6b7-0c58e3c3679c.json +0 -269
- package/.tap/processinfo/d4f3c95a-ddbe-419d-bce0-dd6acceee21f.json +0 -268
- package/.tap/processinfo/d54ed8f1-43c3-478a-90d3-2c8aced723f2.json +0 -269
- package/.tap/processinfo/d6e5a2a6-4647-4d98-916c-aec4ace54a65.json +0 -268
- package/.tap/processinfo/d7280c64-45e6-4b12-affc-3ac9a5d4014a.json +0 -268
- package/.tap/processinfo/d82c8367-d825-4405-88df-07298f6ef840.json +0 -269
- package/.tap/processinfo/d8f97e53-e921-4d33-9c8d-2f7e807a9425.json +0 -268
- package/.tap/processinfo/da546a73-9714-4f8c-bdbb-e42730edbcfa.json +0 -268
- package/.tap/processinfo/da7fb7fb-1da4-49f8-a3ee-d4ea623c01a5.json +0 -268
- package/.tap/processinfo/daa6a016-4f0c-4050-923c-2022e0bb21d8.json +0 -268
- package/.tap/processinfo/db9a251d-8540-4719-b464-e7d5febd97d1.json +0 -240
- package/.tap/processinfo/dc10c603-8e58-4611-baa3-44da2578d07a.json +0 -268
- package/.tap/processinfo/dde56c1a-858c-47cc-b0bb-61279620ac17.json +0 -268
- package/.tap/processinfo/e0d9c4ea-f7c7-4c64-8ced-66dc6f0ac5d2.json +0 -271
- package/.tap/processinfo/e121454f-5dfa-4209-ba15-4c39840871f2.json +0 -831
- package/.tap/processinfo/e1f43e40-c3fe-4eb8-a713-d5910cc6b25a.json +0 -268
- package/.tap/processinfo/e4575e7a-f00e-488b-94e1-8f877b54725e.json +0 -268
- package/.tap/processinfo/e9ad667e-8603-4488-af64-449cc9532803.json +0 -268
- package/.tap/processinfo/eb26a697-e5e2-4730-aeea-bcb9c49afd4d.json +0 -268
- package/.tap/processinfo/eb29d1c3-feaf-4744-9d84-cf257e8269b0.json +0 -268
- package/.tap/processinfo/ee720c0a-ed64-4e7e-8c0a-139c7b9725d2.json +0 -268
- package/.tap/processinfo/ef88c13a-87b2-49e4-a683-7b812505cd6f.json +0 -268
- package/.tap/processinfo/f4ed6948-dac0-4128-9f86-d083b6918ea7.json +0 -268
- package/.tap/processinfo/f7544c01-8ac7-4e42-8ad5-c4d62e094d1f.json +0 -270
- package/.tap/processinfo/f7cee4b3-7bcc-4591-a628-5629b0b41c9e.json +0 -268
- package/.tap/processinfo/f9c0a1f7-c1a4-44d3-ae3f-8c1eb42cd746.json +0 -269
- package/.tap/processinfo/fc46b4da-79db-4201-af7e-34bb17f92d69.json +0 -270
- package/.tap/processinfo/fccc0056-03c4-40cb-9d0b-2db4bbe573c1.json +0 -268
- package/.tap/processinfo/fd2df572-54d7-4ce7-b7aa-a2b4b00d4127.json +0 -254
- package/.tap/processinfo/fea9377f-b473-484d-bee6-ac7f49e50937.json +0 -269
- package/.tap/processinfo/feb516dc-abda-46e6-9b42-d37adfc63366.json +0 -268
- package/.tap/processinfo/ff0fda4c-aa2e-4236-906e-fdfb6bd6632e.json +0 -269
- 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
|
@@ -5,7 +5,7 @@ const errors = require('../../lib/errors')
|
|
|
5
5
|
const { readFileSync } = require('node:fs')
|
|
6
6
|
const { resolve } = require('node:path')
|
|
7
7
|
|
|
8
|
-
test('should expose
|
|
8
|
+
test('should expose 84 errors', t => {
|
|
9
9
|
t.plan(1)
|
|
10
10
|
const exportedKeys = Object.keys(errors)
|
|
11
11
|
let counter = 0
|
|
@@ -14,11 +14,11 @@ test('should expose 80 errors', t => {
|
|
|
14
14
|
counter++
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
t.equal(counter,
|
|
17
|
+
t.equal(counter, 84)
|
|
18
18
|
})
|
|
19
19
|
|
|
20
20
|
test('ensure name and codes of Errors are identical', t => {
|
|
21
|
-
t.plan(
|
|
21
|
+
t.plan(84)
|
|
22
22
|
const exportedKeys = Object.keys(errors)
|
|
23
23
|
for (const key of exportedKeys) {
|
|
24
24
|
if (errors[key].name === 'FastifyError') {
|
|
@@ -247,6 +247,16 @@ test('FST_ERR_DEC_AFTER_START', t => {
|
|
|
247
247
|
t.ok(error instanceof Error)
|
|
248
248
|
})
|
|
249
249
|
|
|
250
|
+
test('FST_ERR_DEC_REFERENCE_TYPE', t => {
|
|
251
|
+
t.plan(5)
|
|
252
|
+
const error = new errors.FST_ERR_DEC_REFERENCE_TYPE()
|
|
253
|
+
t.equal(error.name, 'FastifyError')
|
|
254
|
+
t.equal(error.code, 'FST_ERR_DEC_REFERENCE_TYPE')
|
|
255
|
+
t.equal(error.message, "The decorator '%s' of type '%s' is a reference type. Use the { getter, setter } interface instead.")
|
|
256
|
+
t.equal(error.statusCode, 500)
|
|
257
|
+
t.ok(error instanceof Error)
|
|
258
|
+
})
|
|
259
|
+
|
|
250
260
|
test('FST_ERR_HOOK_INVALID_TYPE', t => {
|
|
251
261
|
t.plan(5)
|
|
252
262
|
const error = new errors.FST_ERR_HOOK_INVALID_TYPE()
|
|
@@ -327,6 +337,36 @@ test('FST_ERR_LOG_INVALID_LOGGER', t => {
|
|
|
327
337
|
t.ok(error instanceof TypeError)
|
|
328
338
|
})
|
|
329
339
|
|
|
340
|
+
test('FST_ERR_LOG_INVALID_LOGGER_INSTANCE', t => {
|
|
341
|
+
t.plan(5)
|
|
342
|
+
const error = new errors.FST_ERR_LOG_INVALID_LOGGER_INSTANCE()
|
|
343
|
+
t.equal(error.name, 'FastifyError')
|
|
344
|
+
t.equal(error.code, 'FST_ERR_LOG_INVALID_LOGGER_INSTANCE')
|
|
345
|
+
t.equal(error.message, 'loggerInstance only accepts a logger instance.')
|
|
346
|
+
t.equal(error.statusCode, 500)
|
|
347
|
+
t.ok(error instanceof TypeError)
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
test('FST_ERR_LOG_INVALID_LOGGER_CONFIG', t => {
|
|
351
|
+
t.plan(5)
|
|
352
|
+
const error = new errors.FST_ERR_LOG_INVALID_LOGGER_CONFIG()
|
|
353
|
+
t.equal(error.name, 'FastifyError')
|
|
354
|
+
t.equal(error.code, 'FST_ERR_LOG_INVALID_LOGGER_CONFIG')
|
|
355
|
+
t.equal(error.message, 'logger options only accepts a configuration object.')
|
|
356
|
+
t.equal(error.statusCode, 500)
|
|
357
|
+
t.ok(error instanceof TypeError)
|
|
358
|
+
})
|
|
359
|
+
|
|
360
|
+
test('FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED', t => {
|
|
361
|
+
t.plan(5)
|
|
362
|
+
const error = new errors.FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED()
|
|
363
|
+
t.equal(error.name, 'FastifyError')
|
|
364
|
+
t.equal(error.code, 'FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED')
|
|
365
|
+
t.equal(error.message, 'You cannot provide both logger and loggerInstance. Please provide only one.')
|
|
366
|
+
t.equal(error.statusCode, 500)
|
|
367
|
+
t.ok(error instanceof TypeError)
|
|
368
|
+
})
|
|
369
|
+
|
|
330
370
|
test('FST_ERR_REP_INVALID_PAYLOAD_TYPE', t => {
|
|
331
371
|
t.plan(5)
|
|
332
372
|
const error = new errors.FST_ERR_REP_INVALID_PAYLOAD_TYPE()
|
|
@@ -587,16 +627,6 @@ test('FST_ERR_ASYNC_CONSTRAINT', t => {
|
|
|
587
627
|
t.ok(error instanceof Error)
|
|
588
628
|
})
|
|
589
629
|
|
|
590
|
-
test('FST_ERR_DEFAULT_ROUTE_INVALID_TYPE', t => {
|
|
591
|
-
t.plan(5)
|
|
592
|
-
const error = new errors.FST_ERR_DEFAULT_ROUTE_INVALID_TYPE()
|
|
593
|
-
t.equal(error.name, 'FastifyError')
|
|
594
|
-
t.equal(error.code, 'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE')
|
|
595
|
-
t.equal(error.message, 'The defaultRoute type should be a function')
|
|
596
|
-
t.equal(error.statusCode, 500)
|
|
597
|
-
t.ok(error instanceof TypeError)
|
|
598
|
-
})
|
|
599
|
-
|
|
600
630
|
test('FST_ERR_INVALID_URL', t => {
|
|
601
631
|
t.plan(5)
|
|
602
632
|
const error = new errors.FST_ERR_INVALID_URL()
|
|
@@ -757,6 +787,16 @@ test('FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE', t => {
|
|
|
757
787
|
t.ok(error instanceof Error)
|
|
758
788
|
})
|
|
759
789
|
|
|
790
|
+
test('FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER', t => {
|
|
791
|
+
t.plan(5)
|
|
792
|
+
const error = new errors.FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER('easter-egg')
|
|
793
|
+
t.equal(error.name, 'FastifyError')
|
|
794
|
+
t.equal(error.code, 'FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER')
|
|
795
|
+
t.equal(error.message, 'The easter-egg plugin being registered mixes async and callback styles. Async plugin should not mix async and callback style.')
|
|
796
|
+
t.equal(error.statusCode, 500)
|
|
797
|
+
t.ok(error instanceof TypeError)
|
|
798
|
+
})
|
|
799
|
+
|
|
760
800
|
test('FST_ERR_PLUGIN_CALLBACK_NOT_FN', t => {
|
|
761
801
|
t.plan(5)
|
|
762
802
|
const error = new errors.FST_ERR_PLUGIN_CALLBACK_NOT_FN()
|
|
@@ -838,7 +878,7 @@ test('FST_ERR_ERROR_HANDLER_NOT_FN', t => {
|
|
|
838
878
|
})
|
|
839
879
|
|
|
840
880
|
test('Ensure that all errors are in Errors.md TOC', t => {
|
|
841
|
-
t.plan(
|
|
881
|
+
t.plan(84)
|
|
842
882
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
843
883
|
|
|
844
884
|
const exportedKeys = Object.keys(errors)
|
|
@@ -850,7 +890,7 @@ test('Ensure that all errors are in Errors.md TOC', t => {
|
|
|
850
890
|
})
|
|
851
891
|
|
|
852
892
|
test('Ensure that non-existing errors are not in Errors.md TOC', t => {
|
|
853
|
-
t.plan(
|
|
893
|
+
t.plan(84)
|
|
854
894
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
855
895
|
|
|
856
896
|
const matchRE = / {4}- \[([A-Z0-9_]+)\]\(#[a-z0-9_]+\)/g
|
|
@@ -863,7 +903,7 @@ test('Ensure that non-existing errors are not in Errors.md TOC', t => {
|
|
|
863
903
|
})
|
|
864
904
|
|
|
865
905
|
test('Ensure that all errors are in Errors.md documented', t => {
|
|
866
|
-
t.plan(
|
|
906
|
+
t.plan(84)
|
|
867
907
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
868
908
|
|
|
869
909
|
const exportedKeys = Object.keys(errors)
|
|
@@ -875,7 +915,7 @@ test('Ensure that all errors are in Errors.md documented', t => {
|
|
|
875
915
|
})
|
|
876
916
|
|
|
877
917
|
test('Ensure that non-existing errors are not in Errors.md documented', t => {
|
|
878
|
-
t.plan(
|
|
918
|
+
t.plan(84)
|
|
879
919
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
880
920
|
|
|
881
921
|
const matchRE = /<a id="[0-9a-zA-Z_]+">([0-9a-zA-Z_]+)<\/a>/g
|
|
@@ -94,7 +94,11 @@ test('handler function - reply', t => {
|
|
|
94
94
|
preValidation: [],
|
|
95
95
|
preHandler: [],
|
|
96
96
|
onSend: [],
|
|
97
|
-
onError: []
|
|
97
|
+
onError: [],
|
|
98
|
+
config: {
|
|
99
|
+
url: '',
|
|
100
|
+
method: ''
|
|
101
|
+
}
|
|
98
102
|
}
|
|
99
103
|
buildSchema(context, schemaValidator)
|
|
100
104
|
internals.handler({ [kRouteContext]: context }, new Reply(res, { [kRouteContext]: context }))
|
|
@@ -45,11 +45,11 @@ test('without options passed to Fastify, initialConfig should expose default val
|
|
|
45
45
|
onProtoPoisoning: 'error',
|
|
46
46
|
onConstructorPoisoning: 'error',
|
|
47
47
|
pluginTimeout: 10000,
|
|
48
|
-
requestIdHeader:
|
|
48
|
+
requestIdHeader: false,
|
|
49
49
|
requestIdLogLabel: 'reqId',
|
|
50
50
|
http2SessionTimeout: 72000,
|
|
51
51
|
exposeHeadRoutes: true,
|
|
52
|
-
useSemicolonDelimiter:
|
|
52
|
+
useSemicolonDelimiter: false
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
t.same(Fastify().initialConfig, fastifyDefaultOptions)
|
|
@@ -105,7 +105,7 @@ test('Fastify.initialConfig should expose all options', t => {
|
|
|
105
105
|
genReqId: function (req) {
|
|
106
106
|
return reqId++
|
|
107
107
|
},
|
|
108
|
-
|
|
108
|
+
loggerInstance: pino({ level: 'info' }),
|
|
109
109
|
constraints: {
|
|
110
110
|
version: versionStrategy
|
|
111
111
|
},
|
|
@@ -285,11 +285,11 @@ test('Should not have issues when passing stream options to Pino.js', t => {
|
|
|
285
285
|
onProtoPoisoning: 'error',
|
|
286
286
|
onConstructorPoisoning: 'error',
|
|
287
287
|
pluginTimeout: 10000,
|
|
288
|
-
requestIdHeader:
|
|
288
|
+
requestIdHeader: false,
|
|
289
289
|
requestIdLogLabel: 'reqId',
|
|
290
290
|
http2SessionTimeout: 72000,
|
|
291
291
|
exposeHeadRoutes: true,
|
|
292
|
-
useSemicolonDelimiter:
|
|
292
|
+
useSemicolonDelimiter: false
|
|
293
293
|
})
|
|
294
294
|
} catch (error) {
|
|
295
295
|
t.fail()
|
|
@@ -46,13 +46,42 @@ test('The logger should add a unique id for every request', t => {
|
|
|
46
46
|
}
|
|
47
47
|
})
|
|
48
48
|
|
|
49
|
-
test('The logger should reuse request id header for req.id', t => {
|
|
49
|
+
test('The logger should not reuse request id header for req.id', t => {
|
|
50
50
|
const fastify = Fastify()
|
|
51
51
|
fastify.get('/', (req, reply) => {
|
|
52
52
|
t.ok(req.id)
|
|
53
53
|
reply.send({ id: req.id })
|
|
54
54
|
})
|
|
55
55
|
|
|
56
|
+
fastify.listen({ port: 0 }, err => {
|
|
57
|
+
t.error(err)
|
|
58
|
+
|
|
59
|
+
fastify.inject({
|
|
60
|
+
method: 'GET',
|
|
61
|
+
url: 'http://localhost:' + fastify.server.address().port,
|
|
62
|
+
headers: {
|
|
63
|
+
'Request-Id': 'request-id-1'
|
|
64
|
+
}
|
|
65
|
+
}, (err, res) => {
|
|
66
|
+
t.error(err)
|
|
67
|
+
const payload = JSON.parse(res.payload)
|
|
68
|
+
t.ok(payload.id !== 'request-id-1', 'the request id from the header should not be returned with default configuration')
|
|
69
|
+
t.ok(payload.id === 'req-1') // first request id when using the default configuration
|
|
70
|
+
fastify.close()
|
|
71
|
+
t.end()
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('The logger should reuse request id header for req.id if requestIdHeader is set', t => {
|
|
77
|
+
const fastify = Fastify({
|
|
78
|
+
requestIdHeader: 'request-id'
|
|
79
|
+
})
|
|
80
|
+
fastify.get('/', (req, reply) => {
|
|
81
|
+
t.ok(req.id)
|
|
82
|
+
reply.send({ id: req.id })
|
|
83
|
+
})
|
|
84
|
+
|
|
56
85
|
fastify.listen({ port: 0 }, err => {
|
|
57
86
|
t.error(err)
|
|
58
87
|
|
|
@@ -127,7 +156,7 @@ test('The serializer prevent fails if the request socket is undefined', t => {
|
|
|
127
156
|
method: 'GET',
|
|
128
157
|
url: '/',
|
|
129
158
|
version: undefined,
|
|
130
|
-
|
|
159
|
+
host: undefined,
|
|
131
160
|
remoteAddress: undefined,
|
|
132
161
|
remotePort: undefined
|
|
133
162
|
})
|
|
@@ -19,7 +19,7 @@ const {
|
|
|
19
19
|
} = require('../../lib/symbols')
|
|
20
20
|
const fs = require('node:fs')
|
|
21
21
|
const path = require('node:path')
|
|
22
|
-
const { FSTDEP010, FSTDEP019,
|
|
22
|
+
const { FSTDEP010, FSTDEP019, FSTDEP021 } = require('../../lib/warnings')
|
|
23
23
|
|
|
24
24
|
const agent = new http.Agent({ keepAlive: false })
|
|
25
25
|
|
|
@@ -36,7 +36,7 @@ const doGet = function (url) {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
test('Once called, Reply should return an object with methods', t => {
|
|
39
|
-
t.plan(
|
|
39
|
+
t.plan(15)
|
|
40
40
|
const response = { res: 'res' }
|
|
41
41
|
const context = { config: { onSend: [] }, schema: {} }
|
|
42
42
|
const request = { [kRouteContext]: context, [kPublicRouteContext]: { config: context.config, schema: context.schema } }
|
|
@@ -49,7 +49,6 @@ test('Once called, Reply should return an object with methods', t => {
|
|
|
49
49
|
t.equal(typeof reply.status, 'function')
|
|
50
50
|
t.equal(typeof reply.header, 'function')
|
|
51
51
|
t.equal(typeof reply.serialize, 'function')
|
|
52
|
-
t.equal(typeof reply.getResponseTime, 'function')
|
|
53
52
|
t.equal(typeof reply[kReplyHeaders], 'object')
|
|
54
53
|
t.same(reply.raw, response)
|
|
55
54
|
t.equal(reply[kRouteContext], context)
|
|
@@ -1415,9 +1414,9 @@ test('.statusCode is getter and setter', t => {
|
|
|
1415
1414
|
const fastify = Fastify()
|
|
1416
1415
|
|
|
1417
1416
|
fastify.get('/', function (req, reply) {
|
|
1418
|
-
t.
|
|
1417
|
+
t.equal(reply.statusCode, 200, 'default status value')
|
|
1419
1418
|
reply.statusCode = 418
|
|
1420
|
-
t.
|
|
1419
|
+
t.equal(reply.statusCode, 418)
|
|
1421
1420
|
reply.send()
|
|
1422
1421
|
})
|
|
1423
1422
|
|
|
@@ -1572,82 +1571,11 @@ test('should not throw error when attempting to set reply.sent if the underlinin
|
|
|
1572
1571
|
})
|
|
1573
1572
|
})
|
|
1574
1573
|
|
|
1575
|
-
test('reply.
|
|
1574
|
+
test('reply.elapsedTime should return 0 before the timer is initialised on the reply by setting up response listeners', t => {
|
|
1576
1575
|
t.plan(1)
|
|
1577
1576
|
const response = { statusCode: 200 }
|
|
1578
1577
|
const reply = new Reply(response, null)
|
|
1579
|
-
t.equal(reply.
|
|
1580
|
-
})
|
|
1581
|
-
|
|
1582
|
-
test('reply.getResponseTime() should return a number greater than 0 after the timer is initialised on the reply by setting up response listeners', t => {
|
|
1583
|
-
t.plan(1)
|
|
1584
|
-
const fastify = Fastify()
|
|
1585
|
-
fastify.route({
|
|
1586
|
-
method: 'GET',
|
|
1587
|
-
url: '/',
|
|
1588
|
-
handler: (req, reply) => {
|
|
1589
|
-
reply.send('hello world')
|
|
1590
|
-
}
|
|
1591
|
-
})
|
|
1592
|
-
|
|
1593
|
-
fastify.addHook('onResponse', (req, reply) => {
|
|
1594
|
-
t.ok(reply.getResponseTime() > 0)
|
|
1595
|
-
t.end()
|
|
1596
|
-
})
|
|
1597
|
-
|
|
1598
|
-
fastify.inject({ method: 'GET', url: '/' })
|
|
1599
|
-
})
|
|
1600
|
-
|
|
1601
|
-
test('should emit deprecation warning when trying to use reply.getResponseTime() and should return the time since a request started while inflight', t => {
|
|
1602
|
-
t.plan(5)
|
|
1603
|
-
const fastify = Fastify()
|
|
1604
|
-
fastify.route({
|
|
1605
|
-
method: 'GET',
|
|
1606
|
-
url: '/',
|
|
1607
|
-
handler: (req, reply) => {
|
|
1608
|
-
reply.send('hello world')
|
|
1609
|
-
}
|
|
1610
|
-
})
|
|
1611
|
-
|
|
1612
|
-
process.removeAllListeners('warning')
|
|
1613
|
-
process.on('warning', onWarning)
|
|
1614
|
-
function onWarning (warning) {
|
|
1615
|
-
t.equal(warning.name, 'DeprecationWarning')
|
|
1616
|
-
t.equal(warning.code, FSTDEP020.code)
|
|
1617
|
-
}
|
|
1618
|
-
|
|
1619
|
-
fastify.addHook('preValidation', (req, reply, done) => {
|
|
1620
|
-
t.equal(reply.getResponseTime(), reply.getResponseTime())
|
|
1621
|
-
done()
|
|
1622
|
-
})
|
|
1623
|
-
|
|
1624
|
-
fastify.inject({ method: 'GET', url: '/' }, (err, res) => {
|
|
1625
|
-
t.error(err)
|
|
1626
|
-
t.pass()
|
|
1627
|
-
|
|
1628
|
-
process.removeListener('warning', onWarning)
|
|
1629
|
-
})
|
|
1630
|
-
|
|
1631
|
-
FSTDEP020.emitted = false
|
|
1632
|
-
})
|
|
1633
|
-
|
|
1634
|
-
test('reply.getResponseTime() should return the same value after a request is finished', t => {
|
|
1635
|
-
t.plan(1)
|
|
1636
|
-
const fastify = Fastify()
|
|
1637
|
-
fastify.route({
|
|
1638
|
-
method: 'GET',
|
|
1639
|
-
url: '/',
|
|
1640
|
-
handler: (req, reply) => {
|
|
1641
|
-
reply.send('hello world')
|
|
1642
|
-
}
|
|
1643
|
-
})
|
|
1644
|
-
|
|
1645
|
-
fastify.addHook('onResponse', (req, reply) => {
|
|
1646
|
-
t.equal(reply.getResponseTime(), reply.getResponseTime())
|
|
1647
|
-
t.end()
|
|
1648
|
-
})
|
|
1649
|
-
|
|
1650
|
-
fastify.inject({ method: 'GET', url: '/' })
|
|
1578
|
+
t.equal(reply.elapsedTime, 0)
|
|
1651
1579
|
})
|
|
1652
1580
|
|
|
1653
1581
|
test('reply.elapsedTime should return a number greater than 0 after the timer is initialised on the reply by setting up response listeners', t => {
|
|
@@ -60,7 +60,7 @@ test('Regular request', t => {
|
|
|
60
60
|
t.equal(request.log, 'log')
|
|
61
61
|
t.equal(request.ip, 'ip')
|
|
62
62
|
t.equal(request.ips, undefined)
|
|
63
|
-
t.equal(request.
|
|
63
|
+
t.equal(request.host, 'hostname')
|
|
64
64
|
t.equal(request.body, undefined)
|
|
65
65
|
t.equal(request.method, 'GET')
|
|
66
66
|
t.equal(request.url, '/')
|
|
@@ -142,7 +142,7 @@ test('Request with undefined config', t => {
|
|
|
142
142
|
})
|
|
143
143
|
|
|
144
144
|
test('Regular request - hostname from authority', t => {
|
|
145
|
-
t.plan(
|
|
145
|
+
t.plan(3)
|
|
146
146
|
const headers = {
|
|
147
147
|
':authority': 'authority'
|
|
148
148
|
}
|
|
@@ -155,11 +155,12 @@ test('Regular request - hostname from authority', t => {
|
|
|
155
155
|
|
|
156
156
|
const request = new Request('id', 'params', req, 'query', 'log')
|
|
157
157
|
t.type(request, Request)
|
|
158
|
-
t.equal(request.
|
|
158
|
+
t.equal(request.host, 'authority')
|
|
159
|
+
t.equal(request.port, null)
|
|
159
160
|
})
|
|
160
161
|
|
|
161
162
|
test('Regular request - host header has precedence over authority', t => {
|
|
162
|
-
t.plan(
|
|
163
|
+
t.plan(3)
|
|
163
164
|
const headers = {
|
|
164
165
|
host: 'hostname',
|
|
165
166
|
':authority': 'authority'
|
|
@@ -172,7 +173,8 @@ test('Regular request - host header has precedence over authority', t => {
|
|
|
172
173
|
}
|
|
173
174
|
const request = new Request('id', 'params', req, 'query', 'log')
|
|
174
175
|
t.type(request, Request)
|
|
175
|
-
t.equal(request.
|
|
176
|
+
t.equal(request.host, 'hostname')
|
|
177
|
+
t.equal(request.port, null)
|
|
176
178
|
})
|
|
177
179
|
|
|
178
180
|
test('Request with trust proxy', t => {
|
|
@@ -222,7 +224,7 @@ test('Request with trust proxy', t => {
|
|
|
222
224
|
t.equal(request.log, 'log')
|
|
223
225
|
t.equal(request.ip, '2.2.2.2')
|
|
224
226
|
t.same(request.ips, ['ip', '1.1.1.1', '2.2.2.2'])
|
|
225
|
-
t.equal(request.
|
|
227
|
+
t.equal(request.host, 'example.com')
|
|
226
228
|
t.equal(request.body, undefined)
|
|
227
229
|
t.equal(request.method, 'GET')
|
|
228
230
|
t.equal(request.url, '/')
|
|
@@ -272,7 +274,7 @@ test('Request with trust proxy - no x-forwarded-host header', t => {
|
|
|
272
274
|
const TpRequest = Request.buildRequest(Request, true)
|
|
273
275
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
274
276
|
t.type(request, TpRequest)
|
|
275
|
-
t.equal(request.
|
|
277
|
+
t.equal(request.host, 'hostname')
|
|
276
278
|
})
|
|
277
279
|
|
|
278
280
|
test('Request with trust proxy - no x-forwarded-host header and fallback to authority', t => {
|
|
@@ -291,7 +293,7 @@ test('Request with trust proxy - no x-forwarded-host header and fallback to auth
|
|
|
291
293
|
const TpRequest = Request.buildRequest(Request, true)
|
|
292
294
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
293
295
|
t.type(request, TpRequest)
|
|
294
|
-
t.equal(request.
|
|
296
|
+
t.equal(request.host, 'authority')
|
|
295
297
|
})
|
|
296
298
|
|
|
297
299
|
test('Request with trust proxy - x-forwarded-host header has precedence over host', t => {
|
|
@@ -311,7 +313,7 @@ test('Request with trust proxy - x-forwarded-host header has precedence over hos
|
|
|
311
313
|
const TpRequest = Request.buildRequest(Request, true)
|
|
312
314
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
313
315
|
t.type(request, TpRequest)
|
|
314
|
-
t.equal(request.
|
|
316
|
+
t.equal(request.host, 'example.com')
|
|
315
317
|
})
|
|
316
318
|
|
|
317
319
|
test('Request with trust proxy - handles multiple entries in x-forwarded-host/proto', t => {
|
|
@@ -330,7 +332,7 @@ test('Request with trust proxy - handles multiple entries in x-forwarded-host/pr
|
|
|
330
332
|
const TpRequest = Request.buildRequest(Request, true)
|
|
331
333
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
332
334
|
t.type(request, TpRequest)
|
|
333
|
-
t.equal(request.
|
|
335
|
+
t.equal(request.host, 'example.com')
|
|
334
336
|
t.equal(request.protocol, 'https')
|
|
335
337
|
})
|
|
336
338
|
|
|
@@ -373,7 +375,7 @@ test('Request with undefined socket', t => {
|
|
|
373
375
|
t.equal(request.log, 'log')
|
|
374
376
|
t.equal(request.ip, undefined)
|
|
375
377
|
t.equal(request.ips, undefined)
|
|
376
|
-
t.equal(request.
|
|
378
|
+
t.equal(request.host, 'hostname')
|
|
377
379
|
t.same(request.body, null)
|
|
378
380
|
t.equal(request.method, 'GET')
|
|
379
381
|
t.equal(request.url, '/')
|
package/test/listen.1.test.js
CHANGED
|
@@ -29,25 +29,15 @@ test('Async/await listen with arguments', async t => {
|
|
|
29
29
|
t.fail('should not be deprecated')
|
|
30
30
|
})
|
|
31
31
|
|
|
32
|
-
t.plan(1)
|
|
33
32
|
const fastify = Fastify()
|
|
34
33
|
t.teardown(fastify.close.bind(fastify))
|
|
35
34
|
const addr = await fastify.listen({ port: 0, host: '0.0.0.0' })
|
|
36
35
|
const address = fastify.server.address()
|
|
37
|
-
t.equal(addr, `http
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
t.fail('should not be deprecated')
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
t.plan(1)
|
|
46
|
-
const fastify = Fastify()
|
|
47
|
-
t.teardown(fastify.close.bind(fastify))
|
|
48
|
-
fastify.listen({ port: 0, host: '0.0.0.0' }).then(addr => {
|
|
49
|
-
const address = fastify.server.address()
|
|
50
|
-
t.equal(addr, `http://${address.address}:${address.port}`)
|
|
36
|
+
t.equal(addr, `http://127.0.0.1:${address.port}`)
|
|
37
|
+
t.same(address, {
|
|
38
|
+
address: '0.0.0.0',
|
|
39
|
+
family: 'IPv4',
|
|
40
|
+
port: address.port
|
|
51
41
|
})
|
|
52
42
|
})
|
|
53
43
|
|
|
@@ -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
|
|