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
package/lib/reply.js
CHANGED
|
@@ -55,7 +55,7 @@ const {
|
|
|
55
55
|
FST_ERR_MISSING_SERIALIZATION_FN,
|
|
56
56
|
FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN
|
|
57
57
|
} = require('./errors')
|
|
58
|
-
const { FSTDEP010, FSTDEP013, FSTDEP019,
|
|
58
|
+
const { FSTDEP010, FSTDEP013, FSTDEP019, FSTDEP021 } = require('./warnings')
|
|
59
59
|
|
|
60
60
|
const toString = Object.prototype.toString
|
|
61
61
|
|
|
@@ -137,6 +137,11 @@ Object.defineProperties(Reply.prototype, {
|
|
|
137
137
|
}
|
|
138
138
|
})
|
|
139
139
|
|
|
140
|
+
Reply.prototype.writeEarlyHints = function (hints, callback) {
|
|
141
|
+
this.raw.writeEarlyHints(hints, callback)
|
|
142
|
+
return this
|
|
143
|
+
}
|
|
144
|
+
|
|
140
145
|
Reply.prototype.hijack = function () {
|
|
141
146
|
this[kReplyHijacked] = true
|
|
142
147
|
return this
|
|
@@ -477,13 +482,6 @@ Reply.prototype.callNotFound = function () {
|
|
|
477
482
|
return this
|
|
478
483
|
}
|
|
479
484
|
|
|
480
|
-
// TODO: should be removed in fastify@5
|
|
481
|
-
Reply.prototype.getResponseTime = function () {
|
|
482
|
-
FSTDEP020()
|
|
483
|
-
|
|
484
|
-
return this.elapsedTime
|
|
485
|
-
}
|
|
486
|
-
|
|
487
485
|
// Make reply a thenable, so it could be used with async/await.
|
|
488
486
|
// See
|
|
489
487
|
// - https://github.com/fastify/fastify/issues/1864 for the discussions
|
|
@@ -910,9 +908,8 @@ function buildReply (R) {
|
|
|
910
908
|
this[kReplyEndTime] = undefined
|
|
911
909
|
this.log = log
|
|
912
910
|
|
|
913
|
-
// eslint-disable-next-line no-var
|
|
914
911
|
var prop
|
|
915
|
-
|
|
912
|
+
|
|
916
913
|
for (var i = 0; i < props.length; i++) {
|
|
917
914
|
prop = props[i]
|
|
918
915
|
this[prop.key] = prop.value
|
package/lib/request.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const proxyAddr = require('proxy-addr')
|
|
4
|
-
const semver = require('semver')
|
|
5
4
|
const {
|
|
6
5
|
FSTDEP005,
|
|
7
6
|
FSTDEP012,
|
|
@@ -49,8 +48,8 @@ function getTrustProxyFn (tp) {
|
|
|
49
48
|
return tp
|
|
50
49
|
}
|
|
51
50
|
if (tp === true) {
|
|
52
|
-
// Support
|
|
53
|
-
return
|
|
51
|
+
// Support trusting everything
|
|
52
|
+
return null
|
|
54
53
|
}
|
|
55
54
|
if (typeof tp === 'number') {
|
|
56
55
|
// Support trusting hop count
|
|
@@ -115,7 +114,8 @@ function buildRequestWithTrustProxy (R, trustProxy) {
|
|
|
115
114
|
Object.defineProperties(_Request.prototype, {
|
|
116
115
|
ip: {
|
|
117
116
|
get () {
|
|
118
|
-
|
|
117
|
+
const addrs = proxyAddr.all(this.raw, proxyFn)
|
|
118
|
+
return addrs[addrs.length - 1]
|
|
119
119
|
}
|
|
120
120
|
},
|
|
121
121
|
ips: {
|
|
@@ -123,7 +123,7 @@ function buildRequestWithTrustProxy (R, trustProxy) {
|
|
|
123
123
|
return proxyAddr.all(this.raw, proxyFn)
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
|
-
|
|
126
|
+
host: {
|
|
127
127
|
get () {
|
|
128
128
|
if (this.ip !== undefined && this.headers['x-forwarded-host']) {
|
|
129
129
|
return getLastEntryInMultiHeaderValue(this.headers['x-forwarded-host'])
|
|
@@ -238,10 +238,7 @@ Object.defineProperties(Request.prototype, {
|
|
|
238
238
|
},
|
|
239
239
|
connection: {
|
|
240
240
|
get () {
|
|
241
|
-
|
|
242
|
-
if (semver.gte(process.versions.node, '13.0.0')) {
|
|
243
|
-
FSTDEP005()
|
|
244
|
-
}
|
|
241
|
+
FSTDEP005()
|
|
245
242
|
return this.raw.connection
|
|
246
243
|
}
|
|
247
244
|
},
|
|
@@ -257,11 +254,32 @@ Object.defineProperties(Request.prototype, {
|
|
|
257
254
|
}
|
|
258
255
|
}
|
|
259
256
|
},
|
|
260
|
-
|
|
257
|
+
host: {
|
|
261
258
|
get () {
|
|
262
259
|
return this.raw.headers.host || this.raw.headers[':authority']
|
|
263
260
|
}
|
|
264
261
|
},
|
|
262
|
+
hostname: {
|
|
263
|
+
get () {
|
|
264
|
+
return (this.host).split(':')[0]
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
port: {
|
|
268
|
+
get () {
|
|
269
|
+
// first try taking port from host
|
|
270
|
+
const portFromHost = parseInt((this.host).split(':').slice(-1)[0])
|
|
271
|
+
if (!isNaN(portFromHost)) {
|
|
272
|
+
return portFromHost
|
|
273
|
+
}
|
|
274
|
+
// now fall back to port from host/:authority header
|
|
275
|
+
const portFromHeader = parseInt((this.headers.host || this.headers[':authority']).split(':').slice(-1)[0])
|
|
276
|
+
if (!isNaN(portFromHeader)) {
|
|
277
|
+
return portFromHeader
|
|
278
|
+
}
|
|
279
|
+
// fall back to null
|
|
280
|
+
return null
|
|
281
|
+
}
|
|
282
|
+
},
|
|
265
283
|
protocol: {
|
|
266
284
|
get () {
|
|
267
285
|
if (this.socket) {
|
|
@@ -299,13 +317,13 @@ Object.defineProperties(Request.prototype, {
|
|
|
299
317
|
}
|
|
300
318
|
|
|
301
319
|
const validatorCompiler = this[kRouteContext].validatorCompiler ||
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
320
|
+
this.server[kSchemaController].validatorCompiler ||
|
|
321
|
+
(
|
|
322
|
+
// We compile the schemas if no custom validatorCompiler is provided
|
|
323
|
+
// nor set
|
|
324
|
+
this.server[kSchemaController].setupValidator(this.server[kOptions]) ||
|
|
325
|
+
this.server[kSchemaController].validatorCompiler
|
|
326
|
+
)
|
|
309
327
|
|
|
310
328
|
const validateFn = validatorCompiler({
|
|
311
329
|
schema,
|
|
@@ -342,8 +360,8 @@ Object.defineProperties(Request.prototype, {
|
|
|
342
360
|
|
|
343
361
|
// We cannot compile if the schema is missed
|
|
344
362
|
if (validate == null && (schema == null ||
|
|
345
|
-
|
|
346
|
-
|
|
363
|
+
typeof schema !== 'object' ||
|
|
364
|
+
Array.isArray(schema))
|
|
347
365
|
) {
|
|
348
366
|
throw new FST_ERR_REQ_INVALID_VALIDATION_INVOCATION(httpPart)
|
|
349
367
|
}
|
package/lib/route.js
CHANGED
|
@@ -9,8 +9,7 @@ const { normalizeSchema } = require('./schemas')
|
|
|
9
9
|
const { parseHeadOnSendHandlers } = require('./headRoute')
|
|
10
10
|
const {
|
|
11
11
|
FSTDEP007,
|
|
12
|
-
FSTDEP008
|
|
13
|
-
FSTDEP014
|
|
12
|
+
FSTDEP008
|
|
14
13
|
} = require('./warnings')
|
|
15
14
|
|
|
16
15
|
const {
|
|
@@ -21,7 +20,6 @@ const {
|
|
|
21
20
|
const {
|
|
22
21
|
FST_ERR_SCH_VALIDATION_BUILD,
|
|
23
22
|
FST_ERR_SCH_SERIALIZATION_BUILD,
|
|
24
|
-
FST_ERR_DEFAULT_ROUTE_INVALID_TYPE,
|
|
25
23
|
FST_ERR_DUPLICATED_ROUTE,
|
|
26
24
|
FST_ERR_INVALID_URL,
|
|
27
25
|
FST_ERR_HOOK_INVALID_HANDLER,
|
|
@@ -72,7 +70,6 @@ function buildRouting (options) {
|
|
|
72
70
|
let ignoreDuplicateSlashes
|
|
73
71
|
let return503OnClosing
|
|
74
72
|
let globalExposeHeadRoutes
|
|
75
|
-
let validateHTTPVersion
|
|
76
73
|
let keepAliveConnections
|
|
77
74
|
|
|
78
75
|
let closing = false
|
|
@@ -89,7 +86,6 @@ function buildRouting (options) {
|
|
|
89
86
|
hasLogger = fastifyArgs.hasLogger
|
|
90
87
|
setupResponseListeners = fastifyArgs.setupResponseListeners
|
|
91
88
|
throwIfAlreadyStarted = fastifyArgs.throwIfAlreadyStarted
|
|
92
|
-
validateHTTPVersion = fastifyArgs.validateHTTPVersion
|
|
93
89
|
|
|
94
90
|
globalExposeHeadRoutes = options.exposeHeadRoutes
|
|
95
91
|
disableRequestLogging = options.disableRequestLogging
|
|
@@ -102,18 +98,6 @@ function buildRouting (options) {
|
|
|
102
98
|
route, // configure a route in the fastify instance
|
|
103
99
|
hasRoute,
|
|
104
100
|
prepareRoute,
|
|
105
|
-
getDefaultRoute: function () {
|
|
106
|
-
FSTDEP014()
|
|
107
|
-
return router.defaultRoute
|
|
108
|
-
},
|
|
109
|
-
setDefaultRoute: function (defaultRoute) {
|
|
110
|
-
FSTDEP014()
|
|
111
|
-
if (typeof defaultRoute !== 'function') {
|
|
112
|
-
throw new FST_ERR_DEFAULT_ROUTE_INVALID_TYPE()
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
router.defaultRoute = defaultRoute
|
|
116
|
-
},
|
|
117
101
|
routeHandler,
|
|
118
102
|
closeRoutes: () => { closing = true },
|
|
119
103
|
printRoutes: router.prettyPrint.bind(router),
|
|
@@ -169,10 +153,11 @@ function buildRouting (options) {
|
|
|
169
153
|
|
|
170
154
|
function hasRoute ({ options }) {
|
|
171
155
|
const normalizedMethod = options.method?.toUpperCase() ?? ''
|
|
172
|
-
return
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
156
|
+
return router.hasRoute(
|
|
157
|
+
normalizedMethod,
|
|
158
|
+
options.url || '',
|
|
159
|
+
options.constraints
|
|
160
|
+
)
|
|
176
161
|
}
|
|
177
162
|
|
|
178
163
|
function findRoute (options) {
|
|
@@ -460,19 +445,6 @@ function buildRouting (options) {
|
|
|
460
445
|
const childLogger = createChildLogger(context, logger, req, id, loggerOpts)
|
|
461
446
|
childLogger[kDisableRequestLogging] = disableRequestLogging
|
|
462
447
|
|
|
463
|
-
// TODO: The check here should be removed once https://github.com/nodejs/node/issues/43115 resolve in core.
|
|
464
|
-
if (!validateHTTPVersion(req.httpVersion)) {
|
|
465
|
-
childLogger.info({ res: { statusCode: 505 } }, 'request aborted - invalid HTTP version')
|
|
466
|
-
const message = '{"error":"HTTP Version Not Supported","message":"HTTP Version Not Supported","statusCode":505}'
|
|
467
|
-
const headers = {
|
|
468
|
-
'Content-Type': 'application/json',
|
|
469
|
-
'Content-Length': message.length
|
|
470
|
-
}
|
|
471
|
-
res.writeHead(505, headers)
|
|
472
|
-
res.end(message)
|
|
473
|
-
return
|
|
474
|
-
}
|
|
475
|
-
|
|
476
448
|
if (closing === true) {
|
|
477
449
|
/* istanbul ignore next mac, windows */
|
|
478
450
|
if (req.httpVersionMajor !== 2) {
|
package/lib/server.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
const http = require('node:http')
|
|
4
4
|
const https = require('node:https')
|
|
5
5
|
const dns = require('node:dns')
|
|
6
|
+
const os = require('node:os')
|
|
6
7
|
|
|
7
|
-
const { FSTDEP011 } = require('./warnings')
|
|
8
8
|
const { kState, kOptions, kServerBindings } = require('./symbols')
|
|
9
9
|
const { onListenHookRunner } = require('./hooks')
|
|
10
10
|
const {
|
|
@@ -15,7 +15,6 @@ const {
|
|
|
15
15
|
} = require('./errors')
|
|
16
16
|
|
|
17
17
|
module.exports.createServer = createServer
|
|
18
|
-
module.exports.compileValidateHTTPVersion = compileValidateHTTPVersion
|
|
19
18
|
|
|
20
19
|
function defaultResolveServerListeningText (address) {
|
|
21
20
|
return `Server listening at ${address}`
|
|
@@ -25,27 +24,11 @@ function createServer (options, httpHandler) {
|
|
|
25
24
|
const server = getServerInstance(options, httpHandler)
|
|
26
25
|
|
|
27
26
|
// `this` is the Fastify object
|
|
28
|
-
function listen (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// Upon doing so, the `normalizeListenArgs` function is no longer needed,
|
|
34
|
-
// and all of this preamble to feed it correctly also no longer needed.
|
|
35
|
-
const firstArgType = Object.prototype.toString.call(arguments[0])
|
|
36
|
-
if (arguments.length === 0) {
|
|
37
|
-
listenOptions = normalizeListenArgs([])
|
|
38
|
-
} else if (arguments.length > 0 && (firstArgType !== '[object Object]' && firstArgType !== '[object Function]')) {
|
|
39
|
-
FSTDEP011()
|
|
40
|
-
listenOptions = normalizeListenArgs(Array.from(arguments))
|
|
41
|
-
cb = listenOptions.cb
|
|
42
|
-
} else if (args.length > 1) {
|
|
43
|
-
// `.listen(obj, a, ..., n, callback )`
|
|
44
|
-
FSTDEP011()
|
|
45
|
-
// Deal with `.listen(port, host, backlog, [cb])`
|
|
46
|
-
const hostPath = listenOptions.path ? [listenOptions.path] : [listenOptions.port ?? 0, listenOptions.host ?? 'localhost']
|
|
47
|
-
Object.assign(listenOptions, normalizeListenArgs([...hostPath, ...args]))
|
|
48
|
-
} else {
|
|
27
|
+
function listen (
|
|
28
|
+
listenOptions = { port: 0, host: 'localhost' },
|
|
29
|
+
cb = undefined
|
|
30
|
+
) {
|
|
31
|
+
if (typeof cb === 'function') {
|
|
49
32
|
listenOptions.cb = cb
|
|
50
33
|
}
|
|
51
34
|
if (listenOptions.signal) {
|
|
@@ -220,6 +203,7 @@ function multipleBindings (mainServer, httpHandler, serverOpts, listenOptions, o
|
|
|
220
203
|
function listenCallback (server, listenOptions) {
|
|
221
204
|
const wrap = (err) => {
|
|
222
205
|
server.removeListener('error', wrap)
|
|
206
|
+
server.removeListener('listening', wrap)
|
|
223
207
|
if (!err) {
|
|
224
208
|
const address = logServerAddress.call(this, server, listenOptions.listenTextResolver || defaultResolveServerListeningText)
|
|
225
209
|
listenOptions.cb(null, address)
|
|
@@ -240,7 +224,8 @@ function listenCallback (server, listenOptions) {
|
|
|
240
224
|
|
|
241
225
|
server.once('error', wrap)
|
|
242
226
|
if (!this[kState].closing) {
|
|
243
|
-
server.
|
|
227
|
+
server.once('listening', wrap)
|
|
228
|
+
server.listen(listenOptions)
|
|
244
229
|
this[kState].listening = true
|
|
245
230
|
}
|
|
246
231
|
}
|
|
@@ -255,79 +240,37 @@ function listenPromise (server, listenOptions) {
|
|
|
255
240
|
|
|
256
241
|
return this.ready().then(() => {
|
|
257
242
|
let errEventHandler
|
|
243
|
+
let listeningEventHandler
|
|
244
|
+
function cleanup () {
|
|
245
|
+
server.removeListener('error', errEventHandler)
|
|
246
|
+
server.removeListener('listening', listeningEventHandler)
|
|
247
|
+
}
|
|
258
248
|
const errEvent = new Promise((resolve, reject) => {
|
|
259
249
|
errEventHandler = (err) => {
|
|
250
|
+
cleanup()
|
|
260
251
|
this[kState].listening = false
|
|
261
252
|
reject(err)
|
|
262
253
|
}
|
|
263
254
|
server.once('error', errEventHandler)
|
|
264
255
|
})
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
|
|
256
|
+
const listeningEvent = new Promise((resolve, reject) => {
|
|
257
|
+
listeningEventHandler = () => {
|
|
258
|
+
cleanup()
|
|
259
|
+
this[kState].listening = true
|
|
268
260
|
resolve(logServerAddress.call(this, server, listenOptions.listenTextResolver || defaultResolveServerListeningText))
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
this[kState].listening = true
|
|
261
|
+
}
|
|
262
|
+
server.once('listening', listeningEventHandler)
|
|
272
263
|
})
|
|
273
264
|
|
|
265
|
+
server.listen(listenOptions)
|
|
266
|
+
|
|
274
267
|
return Promise.race([
|
|
275
268
|
errEvent, // e.g invalid port range error is always emitted before the server listening
|
|
276
|
-
|
|
269
|
+
listeningEvent
|
|
277
270
|
])
|
|
278
271
|
})
|
|
279
272
|
}
|
|
280
273
|
|
|
281
|
-
/**
|
|
282
|
-
* Creates a function that, based upon initial configuration, will
|
|
283
|
-
* verify that every incoming request conforms to allowed
|
|
284
|
-
* HTTP versions for the Fastify instance, e.g. a Fastify HTTP/1.1
|
|
285
|
-
* server will not serve HTTP/2 requests upon the result of the
|
|
286
|
-
* verification function.
|
|
287
|
-
*
|
|
288
|
-
* @param {object} options fastify option
|
|
289
|
-
* @param {function} [options.serverFactory] If present, the
|
|
290
|
-
* validator function will skip all checks.
|
|
291
|
-
* @param {boolean} [options.http2 = false] If true, the validator
|
|
292
|
-
* function will allow HTTP/2 requests.
|
|
293
|
-
* @param {object} [options.https = null] https server options
|
|
294
|
-
* @param {boolean} [options.https.allowHTTP1] If true and use
|
|
295
|
-
* with options.http2 the validator function will allow HTTP/1
|
|
296
|
-
* request to http2 server.
|
|
297
|
-
*
|
|
298
|
-
* @returns {function} HTTP version validator function.
|
|
299
|
-
*/
|
|
300
|
-
function compileValidateHTTPVersion (options) {
|
|
301
|
-
let bypass = false
|
|
302
|
-
// key-value map to store valid http version
|
|
303
|
-
const map = new Map()
|
|
304
|
-
if (options.serverFactory) {
|
|
305
|
-
// When serverFactory is passed, we cannot identify how to check http version reliably
|
|
306
|
-
// So, we should skip the http version check
|
|
307
|
-
bypass = true
|
|
308
|
-
}
|
|
309
|
-
if (options.http2) {
|
|
310
|
-
// HTTP2 must serve HTTP/2.0
|
|
311
|
-
map.set('2.0', true)
|
|
312
|
-
if (options.https && options.https.allowHTTP1 === true) {
|
|
313
|
-
// HTTP2 with HTTPS.allowHTTP1 allow fallback to HTTP/1.1 and HTTP/1.0
|
|
314
|
-
map.set('1.1', true)
|
|
315
|
-
map.set('1.0', true)
|
|
316
|
-
}
|
|
317
|
-
} else {
|
|
318
|
-
// HTTP must server HTTP/1.1 and HTTP/1.0
|
|
319
|
-
map.set('1.1', true)
|
|
320
|
-
map.set('1.0', true)
|
|
321
|
-
}
|
|
322
|
-
// The compiled function here placed in one of the hottest path inside fastify
|
|
323
|
-
// the implementation here must be as performant as possible
|
|
324
|
-
return function validateHTTPVersion (httpVersion) {
|
|
325
|
-
// `bypass` skip the check when custom server factory provided
|
|
326
|
-
// `httpVersion in obj` check for the valid http version we should support
|
|
327
|
-
return bypass || map.has(httpVersion)
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
|
|
331
274
|
function getServerInstance (options, httpHandler) {
|
|
332
275
|
let server = null
|
|
333
276
|
// node@20 do not accepts options as boolean
|
|
@@ -364,57 +307,53 @@ function getServerInstance (options, httpHandler) {
|
|
|
364
307
|
}
|
|
365
308
|
return server
|
|
366
309
|
}
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
options.host = argsLength >= 2 && args[1] ? args[1] : 'localhost'
|
|
390
|
-
options.backlog = argsLength >= 3 ? args[2] : undefined
|
|
310
|
+
/**
|
|
311
|
+
* Inspects the provided `server.address` object and returns a
|
|
312
|
+
* normalized list of IP address strings. Normalization in this
|
|
313
|
+
* case refers to mapping wildcard `0.0.0.0` to the list of IP
|
|
314
|
+
* addresses the wildcard refers to.
|
|
315
|
+
*
|
|
316
|
+
* @see https://nodejs.org/docs/latest/api/net.html#serveraddress
|
|
317
|
+
*
|
|
318
|
+
* @param {object} A server address object as described in the
|
|
319
|
+
* linked docs.
|
|
320
|
+
*
|
|
321
|
+
* @returns {string[]}
|
|
322
|
+
*/
|
|
323
|
+
function getAddresses (address) {
|
|
324
|
+
if (address.address === '0.0.0.0') {
|
|
325
|
+
return Object.values(os.networkInterfaces()).flatMap((iface) => {
|
|
326
|
+
return iface.filter((iface) => iface.family === 'IPv4')
|
|
327
|
+
}).sort((iface) => {
|
|
328
|
+
/* c8 ignore next 2 */
|
|
329
|
+
// Order the interfaces so that internal ones come first
|
|
330
|
+
return iface.internal ? -1 : 1
|
|
331
|
+
}).map((iface) => { return iface.address })
|
|
391
332
|
}
|
|
392
|
-
|
|
393
|
-
return options
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
function normalizePort (firstArg) {
|
|
397
|
-
const port = Number(firstArg)
|
|
398
|
-
return port >= 0 && !Number.isNaN(port) && Number.isInteger(port) ? port : 0
|
|
333
|
+
return [address.address]
|
|
399
334
|
}
|
|
400
335
|
|
|
401
336
|
function logServerAddress (server, listenTextResolver) {
|
|
402
|
-
let
|
|
403
|
-
const isUnixSocket = typeof address === 'string'
|
|
404
|
-
/* istanbul ignore next */
|
|
337
|
+
let addresses
|
|
338
|
+
const isUnixSocket = typeof server.address() === 'string'
|
|
405
339
|
if (!isUnixSocket) {
|
|
406
|
-
if (address.address.indexOf(':') === -1) {
|
|
407
|
-
|
|
340
|
+
if (server.address().address.indexOf(':') === -1) {
|
|
341
|
+
// IPv4
|
|
342
|
+
addresses = getAddresses(server.address()).map((address) => address + ':' + server.address().port)
|
|
408
343
|
} else {
|
|
409
|
-
|
|
344
|
+
// IPv6
|
|
345
|
+
addresses = ['[' + server.address().address + ']:' + server.address().port]
|
|
410
346
|
}
|
|
347
|
+
|
|
348
|
+
addresses = addresses.map((address) => ('http' + (this[kOptions].https ? 's' : '') + '://') + address)
|
|
349
|
+
} else {
|
|
350
|
+
addresses = [server.address()]
|
|
411
351
|
}
|
|
412
|
-
/* istanbul ignore next */
|
|
413
|
-
address = (isUnixSocket ? '' : ('http' + (this[kOptions].https ? 's' : '') + '://')) + address
|
|
414
352
|
|
|
415
|
-
const
|
|
416
|
-
|
|
417
|
-
|
|
353
|
+
for (const address of addresses) {
|
|
354
|
+
this.log.info(listenTextResolver(address))
|
|
355
|
+
}
|
|
356
|
+
return addresses[0]
|
|
418
357
|
}
|
|
419
358
|
|
|
420
359
|
function http2 () {
|
package/lib/warnings.js
CHANGED
|
@@ -2,16 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
const { createDeprecation, createWarning } = require('process-warning')
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Deprecation codes:
|
|
7
|
+
* - FSTDEP005
|
|
8
|
+
* - FSTDEP007
|
|
9
|
+
* - FSTDEP008
|
|
10
|
+
* - FSTDEP009
|
|
11
|
+
* - FSTDEP010
|
|
12
|
+
* - FSTDEP012
|
|
13
|
+
* - FSTDEP013
|
|
14
|
+
* - FSTDEP015
|
|
15
|
+
* - FSTDEP016
|
|
16
|
+
* - FSTDEP017
|
|
17
|
+
* - FSTDEP018
|
|
18
|
+
* - FSTDEP019
|
|
19
|
+
* - FSTDEP021
|
|
20
|
+
* - FSTWRN001
|
|
21
|
+
* - FSTSEC001
|
|
22
|
+
*/
|
|
23
|
+
|
|
5
24
|
const FSTDEP005 = createDeprecation({
|
|
6
25
|
code: 'FSTDEP005',
|
|
7
26
|
message: 'You are accessing the deprecated "request.connection" property. Use "request.socket" instead.'
|
|
8
27
|
})
|
|
9
28
|
|
|
10
|
-
const FSTDEP006 = createDeprecation({
|
|
11
|
-
code: 'FSTDEP006',
|
|
12
|
-
message: 'You are decorating Request/Reply with a reference type. This reference is shared amongst all requests. Use onRequest hook instead. Property: %s'
|
|
13
|
-
})
|
|
14
|
-
|
|
15
29
|
const FSTDEP007 = createDeprecation({
|
|
16
30
|
code: 'FSTDEP007',
|
|
17
31
|
message: 'You are trying to set a HEAD route using "exposeHeadRoute" route flag when a sibling route is already set. See documentation for more info.'
|
|
@@ -32,11 +46,6 @@ const FSTDEP010 = createDeprecation({
|
|
|
32
46
|
message: 'Modifying the "reply.sent" property is deprecated. Use the "reply.hijack()" method instead.'
|
|
33
47
|
})
|
|
34
48
|
|
|
35
|
-
const FSTDEP011 = createDeprecation({
|
|
36
|
-
code: 'FSTDEP011',
|
|
37
|
-
message: 'Variadic listen method is deprecated. Please use ".listen(optionsObject)" instead. The variadic signature will be removed in `fastify@5`.'
|
|
38
|
-
})
|
|
39
|
-
|
|
40
49
|
const FSTDEP012 = createDeprecation({
|
|
41
50
|
code: 'FSTDEP012',
|
|
42
51
|
message: 'request.context property access is deprecated. Please use "request.routeOptions.config" or "request.routeOptions.schema" instead for accessing Route settings. The "request.context" will be removed in `fastify@5`.'
|
|
@@ -47,11 +56,6 @@ const FSTDEP013 = createDeprecation({
|
|
|
47
56
|
message: 'Direct return of "trailers" function is deprecated. Please use "callback" or "async-await" for return value. The support of direct return will removed in `fastify@5`.'
|
|
48
57
|
})
|
|
49
58
|
|
|
50
|
-
const FSTDEP014 = createDeprecation({
|
|
51
|
-
code: 'FSTDEP014',
|
|
52
|
-
message: 'You are trying to set/access the default route. This property is deprecated. Please, use setNotFoundHandler if you want to custom a 404 handler or the wildcard (*) to match all routes.'
|
|
53
|
-
})
|
|
54
|
-
|
|
55
59
|
const FSTDEP015 = createDeprecation({
|
|
56
60
|
code: 'FSTDEP015',
|
|
57
61
|
message: 'You are accessing the deprecated "request.routeSchema" property. Use "request.routeOptions.schema" instead. Property "req.routeSchema" will be removed in `fastify@5`.'
|
|
@@ -77,11 +81,6 @@ const FSTDEP019 = createDeprecation({
|
|
|
77
81
|
message: 'reply.context property access is deprecated. Please use "request.routeOptions.config" or "request.routeOptions.schema" instead for accessing Route settings. The "reply.context" will be removed in `fastify@5`.'
|
|
78
82
|
})
|
|
79
83
|
|
|
80
|
-
const FSTDEP020 = createDeprecation({
|
|
81
|
-
code: 'FSTDEP020',
|
|
82
|
-
message: 'You are using the deprecated "reply.getResponseTime()" method. Use the "reply.elapsedTime" property instead. Method "reply.getResponseTime()" will be removed in `fastify@5`.'
|
|
83
|
-
})
|
|
84
|
-
|
|
85
84
|
const FSTDEP021 = createDeprecation({
|
|
86
85
|
code: 'FSTDEP021',
|
|
87
86
|
message: 'The `reply.redirect()` method has a new signature: `reply.redirect(url: string, code?: number)`. It will be enforced in `fastify@v5`'
|
|
@@ -94,31 +93,27 @@ const FSTWRN001 = createWarning({
|
|
|
94
93
|
unlimited: true
|
|
95
94
|
})
|
|
96
95
|
|
|
97
|
-
const
|
|
98
|
-
name: '
|
|
99
|
-
code: '
|
|
100
|
-
message: '
|
|
96
|
+
const FSTSEC001 = createWarning({
|
|
97
|
+
name: 'FastifySecurity',
|
|
98
|
+
code: 'FSTSEC001',
|
|
99
|
+
message: 'You are using /%s/ Content-Type which may be vulnerable to CORS attack. Please make sure your RegExp start with "^" or include ";?" to proper detection of the essence MIME type.',
|
|
101
100
|
unlimited: true
|
|
102
101
|
})
|
|
103
102
|
|
|
104
103
|
module.exports = {
|
|
105
104
|
FSTDEP005,
|
|
106
|
-
FSTDEP006,
|
|
107
105
|
FSTDEP007,
|
|
108
106
|
FSTDEP008,
|
|
109
107
|
FSTDEP009,
|
|
110
108
|
FSTDEP010,
|
|
111
|
-
FSTDEP011,
|
|
112
109
|
FSTDEP012,
|
|
113
110
|
FSTDEP013,
|
|
114
|
-
FSTDEP014,
|
|
115
111
|
FSTDEP015,
|
|
116
112
|
FSTDEP016,
|
|
117
113
|
FSTDEP017,
|
|
118
114
|
FSTDEP018,
|
|
119
115
|
FSTDEP019,
|
|
120
|
-
FSTDEP020,
|
|
121
116
|
FSTDEP021,
|
|
122
117
|
FSTWRN001,
|
|
123
|
-
|
|
118
|
+
FSTSEC001
|
|
124
119
|
}
|