fastify 4.28.0 → 5.0.0-alpha.3
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/.idea/fastify.iml +12 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/jsLinters/eslint.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.markdownlint-cli2.yaml +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 +99 -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/70168912-9bb2-4334-bb89-041f1764cddf.json +0 -268
- 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/86b9786f-4a98-43b8-882a-5f936b876f08.json +0 -241
- 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/.tap/test-results/test/404s.test.js.tap +0 -623
- package/.tap/test-results/test/500s.test.js.tap +0 -64
- package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +0 -36
- package/.tap/test-results/test/als.test.js.tap +0 -15
- package/.tap/test-results/test/async-await.test.js.tap +0 -184
- package/.tap/test-results/test/async-dispose.test.js.tap +0 -8
- package/.tap/test-results/test/async_hooks.test.js.tap +0 -10
- package/.tap/test-results/test/bodyLimit.test.js.tap +0 -48
- package/.tap/test-results/test/buffer.test.js.tap +0 -20
- package/.tap/test-results/test/build/error-serializer.test.js.tap +0 -8
- package/.tap/test-results/test/build/version.test.js.tap +0 -7
- package/.tap/test-results/test/case-insensitive.test.js.tap +0 -36
- package/.tap/test-results/test/chainable.test.js.tap +0 -17
- package/.tap/test-results/test/check.test.js.tap +0 -10
- package/.tap/test-results/test/childLoggerFactory.test.js.tap +0 -23
- package/.tap/test-results/test/client-timeout.test.js.tap +0 -7
- package/.tap/test-results/test/close-pipelining.test.js.tap +0 -15
- package/.tap/test-results/test/close.test.js.tap +0 -172
- package/.tap/test-results/test/connectionTimeout.test.js.tap +0 -12
- package/.tap/test-results/test/constrained-routes.test.js.tap +0 -173
- package/.tap/test-results/test/content-length.test.js.tap +0 -46
- package/.tap/test-results/test/content-parser.test.js.tap +0 -266
- package/.tap/test-results/test/content-type.test.js.tap +0 -14
- package/.tap/test-results/test/context-config.test.js.tap +0 -41
- package/.tap/test-results/test/copy.test.js.tap +0 -14
- package/.tap/test-results/test/custom-http-server.test.js.tap +0 -30
- package/.tap/test-results/test/custom-parser-async.test.js.tap +0 -21
- package/.tap/test-results/test/custom-parser.0.test.js.tap +0 -199
- package/.tap/test-results/test/custom-parser.1.test.js.tap +0 -90
- package/.tap/test-results/test/custom-parser.2.test.js.tap +0 -22
- package/.tap/test-results/test/custom-parser.3.test.js.tap +0 -53
- package/.tap/test-results/test/custom-parser.4.test.js.tap +0 -45
- package/.tap/test-results/test/custom-parser.5.test.js.tap +0 -41
- package/.tap/test-results/test/custom-querystring-parser.test.js.tap +0 -46
- package/.tap/test-results/test/decorator.test.js.tap +0 -465
- package/.tap/test-results/test/delete.test.js.tap +0 -110
- package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +0 -15
- package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +0 -25
- package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +0 -24
- package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +0 -9
- package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +0 -20
- package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +0 -10
- package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +0 -14
- package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +0 -16
- package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +0 -16
- package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +0 -19
- package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +0 -18
- package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +0 -243
- package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +0 -9
- package/.tap/test-results/test/esm/esm.test.mjs.tap +0 -8
- package/.tap/test-results/test/esm/index.test.js.tap +0 -8
- package/.tap/test-results/test/fastify-instance.test.js.tap +0 -114
- package/.tap/test-results/test/findRoute.test.js.tap +0 -37
- package/.tap/test-results/test/fluent-schema.test.js.tap +0 -36
- package/.tap/test-results/test/genReqId.test.js.tap +0 -106
- package/.tap/test-results/test/get.test.js.tap +0 -151
- package/.tap/test-results/test/handler-context.test.js.tap +0 -19
- package/.tap/test-results/test/has-route.test.js.tap +0 -30
- package/.tap/test-results/test/head.test.js.tap +0 -130
- package/.tap/test-results/test/header-overflow.test.js.tap +0 -16
- package/.tap/test-results/test/hooks-async.test.js.tap +0 -286
- package/.tap/test-results/test/hooks.on-listen.test.js.tap +0 -311
- package/.tap/test-results/test/hooks.on-ready.test.js.tap +0 -151
- package/.tap/test-results/test/hooks.test.js.tap +0 -966
- package/.tap/test-results/test/http2/closing.test.js.tap +0 -35
- package/.tap/test-results/test/http2/constraint.test.js.tap +0 -32
- package/.tap/test-results/test/http2/head.test.js.tap +0 -9
- package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +0 -8
- package/.tap/test-results/test/http2/plain.test.js.tap +0 -22
- package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +0 -40
- package/.tap/test-results/test/http2/secure.test.js.tap +0 -27
- package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +0 -9
- package/.tap/test-results/test/https/custom-https-server.test.js.tap +0 -10
- package/.tap/test-results/test/https/https.test.js.tap +0 -45
- package/.tap/test-results/test/imports.test.js.tap +0 -14
- package/.tap/test-results/test/inject.test.js.tap +0 -165
- package/.tap/test-results/test/internals/all.test.js.tap +0 -42
- package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +0 -14
- package/.tap/test-results/test/internals/context.test.js.tap +0 -14
- package/.tap/test-results/test/internals/decorator.test.js.tap +0 -51
- package/.tap/test-results/test/internals/errors.test.js.tap +0 -1212
- package/.tap/test-results/test/internals/handleRequest.test.js.tap +0 -69
- package/.tap/test-results/test/internals/hookRunner.test.js.tap +0 -143
- package/.tap/test-results/test/internals/hooks.test.js.tap +0 -45
- package/.tap/test-results/test/internals/initialConfig.test.js.tap +0 -125
- package/.tap/test-results/test/internals/logger.test.js.tap +0 -71
- package/.tap/test-results/test/internals/plugin.test.js.tap +0 -48
- package/.tap/test-results/test/internals/reply-serialize.test.js.tap +0 -166
- package/.tap/test-results/test/internals/reply.test.js.tap +0 -688
- package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +0 -74
- package/.tap/test-results/test/internals/request-validate.test.js.tap +0 -384
- package/.tap/test-results/test/internals/request.test.js.tap +0 -163
- package/.tap/test-results/test/internals/server.test.js.tap +0 -30
- package/.tap/test-results/test/internals/validation.test.js.tap +0 -121
- package/.tap/test-results/test/keepAliveTimeout.test.js.tap +0 -12
- package/.tap/test-results/test/listen.1.test.js.tap +0 -31
- package/.tap/test-results/test/listen.2.test.js.tap +0 -46
- package/.tap/test-results/test/listen.3.test.js.tap +0 -25
- package/.tap/test-results/test/listen.4.test.js.tap +0 -51
- package/.tap/test-results/test/lock.test.js.tap +0 -29
- package/.tap/test-results/test/logger/instantiation.test.js.tap +0 -92
- package/.tap/test-results/test/logger/logging.test.js.tap +0 -117
- package/.tap/test-results/test/logger/options.test.js.tap +0 -165
- package/.tap/test-results/test/logger/request.test.js.tap +0 -82
- package/.tap/test-results/test/logger/response.test.js.tap +0 -38
- package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +0 -44
- package/.tap/test-results/test/method-missing.test.js.tap +0 -8
- package/.tap/test-results/test/middleware.test.js.tap +0 -17
- package/.tap/test-results/test/mkcalendar.test.js.tap +0 -43
- package/.tap/test-results/test/mkcol.test.js.tap +0 -14
- package/.tap/test-results/test/move.test.js.tap +0 -15
- package/.tap/test-results/test/noop-set.test.js.tap +0 -8
- package/.tap/test-results/test/nullable-validation.test.js.tap +0 -36
- package/.tap/test-results/test/options.error-handler.test.js.tap +0 -186
- package/.tap/test-results/test/options.test.js.tap +0 -174
- package/.tap/test-results/test/output-validation.test.js.tap +0 -66
- package/.tap/test-results/test/patch.error-handler.test.js.tap +0 -206
- package/.tap/test-results/test/patch.test.js.tap +0 -182
- package/.tap/test-results/test/plugin.1.test.js.tap +0 -78
- package/.tap/test-results/test/plugin.2.test.js.tap +0 -102
- package/.tap/test-results/test/plugin.3.test.js.tap +0 -58
- package/.tap/test-results/test/plugin.4.test.js.tap +0 -164
- package/.tap/test-results/test/post-empty-body.test.js.tap +0 -8
- package/.tap/test-results/test/pretty-print.test.js.tap +0 -82
- package/.tap/test-results/test/promises.test.js.tap +0 -46
- package/.tap/test-results/test/propfind.test.js.tap +0 -43
- package/.tap/test-results/test/proppatch.test.js.tap +0 -29
- package/.tap/test-results/test/proto-poisoning.test.js.tap +0 -47
- package/.tap/test-results/test/put.error-handler.test.js.tap +0 -206
- package/.tap/test-results/test/put.test.js.tap +0 -182
- package/.tap/test-results/test/register.test.js.tap +0 -61
- package/.tap/test-results/test/reply-code.test.js.tap +0 -40
- package/.tap/test-results/test/reply-earlyHints.test.js.tap +0 -22
- package/.tap/test-results/test/reply-error.test.js.tap +0 -643
- package/.tap/test-results/test/reply-trailers.test.js.tap +0 -176
- package/.tap/test-results/test/report.test.js.tap +0 -43
- package/.tap/test-results/test/request-error.test.js.tap +0 -98
- package/.tap/test-results/test/request-id.test.js.tap +0 -38
- package/.tap/test-results/test/request.deprecated.test.js.tap +0 -13
- package/.tap/test-results/test/requestTimeout.test.js.tap +0 -21
- package/.tap/test-results/test/route-hooks.test.js.tap +0 -498
- package/.tap/test-results/test/route-prefix.test.js.tap +0 -195
- package/.tap/test-results/test/route-shorthand.test.js.tap +0 -190
- package/.tap/test-results/test/route.1.test.js.tap +0 -93
- package/.tap/test-results/test/route.2.test.js.tap +0 -28
- package/.tap/test-results/test/route.3.test.js.tap +0 -39
- package/.tap/test-results/test/route.4.test.js.tap +0 -32
- package/.tap/test-results/test/route.5.test.js.tap +0 -54
- package/.tap/test-results/test/route.6.test.js.tap +0 -81
- package/.tap/test-results/test/route.7.test.js.tap +0 -93
- package/.tap/test-results/test/route.8.test.js.tap +0 -38
- package/.tap/test-results/test/router-options.test.js.tap +0 -104
- package/.tap/test-results/test/same-shape.test.js.tap +0 -22
- package/.tap/test-results/test/schema-examples.test.js.tap +0 -85
- package/.tap/test-results/test/schema-feature.test.js.tap +0 -445
- package/.tap/test-results/test/schema-serialization.test.js.tap +0 -194
- package/.tap/test-results/test/schema-special-usage.test.js.tap +0 -186
- package/.tap/test-results/test/schema-validation.test.js.tap +0 -199
- package/.tap/test-results/test/search.test.js.tap +0 -77
- package/.tap/test-results/test/serialize-response.test.js.tap +0 -26
- package/.tap/test-results/test/server.test.js.tap +0 -65
- package/.tap/test-results/test/set-error-handler.test.js.tap +0 -7
- package/.tap/test-results/test/skip-reply-send.test.js.tap +0 -272
- package/.tap/test-results/test/stream.1.test.js.tap +0 -36
- package/.tap/test-results/test/stream.2.test.js.tap +0 -20
- package/.tap/test-results/test/stream.3.test.js.tap +0 -34
- package/.tap/test-results/test/stream.4.test.js.tap +0 -40
- package/.tap/test-results/test/stream.5.test.js.tap +0 -37
- package/.tap/test-results/test/sync-routes.test.js.tap +0 -19
- package/.tap/test-results/test/throw.test.js.tap +0 -116
- package/.tap/test-results/test/trace.test.js.tap +0 -7
- package/.tap/test-results/test/trust-proxy.test.js.tap +0 -109
- package/.tap/test-results/test/type-provider.test.js.tap +0 -12
- package/.tap/test-results/test/unlock.test.js.tap +0 -14
- package/.tap/test-results/test/upgrade.test.js.tap +0 -8
- package/.tap/test-results/test/url-rewriting.test.js.tap +0 -39
- package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +0 -33
- package/.tap/test-results/test/validation-error-handling.test.js.tap +0 -180
- package/.tap/test-results/test/versioned-routes.test.js.tap +0 -151
- package/.tap/test-results/test/web-api.test.js.tap +0 -51
- package/.tap/test-results/test/wrapThenable.test.js.tap +0 -11
- package/EXPENSE_POLICY.md +0 -105
- 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/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
|
}
|
package/lib/wrapThenable.js
CHANGED
|
@@ -5,44 +5,68 @@ const {
|
|
|
5
5
|
kReplyHijacked
|
|
6
6
|
} = require('./symbols')
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
const diagnostics = require('dc-polyfill')
|
|
9
|
+
const channels = diagnostics.tracingChannel('fastify.request.handler')
|
|
10
|
+
|
|
11
|
+
function wrapThenable (thenable, reply, store) {
|
|
12
|
+
if (store) store.async = true
|
|
9
13
|
thenable.then(function (payload) {
|
|
10
14
|
if (reply[kReplyHijacked] === true) {
|
|
11
15
|
return
|
|
12
16
|
}
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
if (store) {
|
|
19
|
+
channels.asyncStart.publish(store)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
// this is for async functions that are using reply.send directly
|
|
24
|
+
//
|
|
25
|
+
// since wrap-thenable will be called when using reply.send directly
|
|
26
|
+
// without actual return. the response can be sent already or
|
|
27
|
+
// the request may be terminated during the reply. in this situation,
|
|
28
|
+
// it require an extra checking of request.aborted to see whether
|
|
29
|
+
// the request is killed by client.
|
|
30
|
+
if (payload !== undefined || (reply.sent === false && reply.raw.headersSent === false && reply.request.raw.aborted === false)) {
|
|
31
|
+
// we use a try-catch internally to avoid adding a catch to another
|
|
32
|
+
// promise, increase promise perf by 10%
|
|
33
|
+
try {
|
|
34
|
+
reply.send(payload)
|
|
35
|
+
} catch (err) {
|
|
36
|
+
reply[kReplyIsError] = true
|
|
37
|
+
reply.send(err)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
} finally {
|
|
41
|
+
if (store) {
|
|
42
|
+
channels.asyncEnd.publish(store)
|
|
29
43
|
}
|
|
30
44
|
}
|
|
31
45
|
}, function (err) {
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
46
|
+
if (store) {
|
|
47
|
+
store.error = err
|
|
48
|
+
channels.error.publish(store) // note that error happens before asyncStart
|
|
49
|
+
channels.asyncStart.publish(store)
|
|
35
50
|
}
|
|
36
51
|
|
|
37
|
-
reply[kReplyIsError] = true
|
|
38
|
-
|
|
39
|
-
// try-catch allow to re-throw error in error handler for async handler
|
|
40
52
|
try {
|
|
53
|
+
if (reply.sent === true) {
|
|
54
|
+
reply.log.error({ err }, 'Promise errored, but reply.sent = true was set')
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
reply[kReplyIsError] = true
|
|
59
|
+
|
|
41
60
|
reply.send(err)
|
|
42
61
|
// The following should not happen
|
|
43
62
|
/* c8 ignore next 3 */
|
|
44
63
|
} catch (err) {
|
|
64
|
+
// try-catch allow to re-throw error in error handler for async handler
|
|
45
65
|
reply.send(err)
|
|
66
|
+
} finally {
|
|
67
|
+
if (store) {
|
|
68
|
+
channels.asyncEnd.publish(store)
|
|
69
|
+
}
|
|
46
70
|
}
|
|
47
71
|
})
|
|
48
72
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fastify",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-alpha.3",
|
|
4
4
|
"description": "Fast and low overhead web framework, for Node.js",
|
|
5
5
|
"main": "fastify.js",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -11,24 +11,22 @@
|
|
|
11
11
|
"benchmark:parser": "concurrently -k -s first \"node ./examples/benchmark/parser.js\" \"autocannon -c 100 -d 30 -p 10 -i ./examples/benchmark/body.json -H \"content-type:application/jsoff\" -m POST localhost:3000/\"",
|
|
12
12
|
"build:validation": "node build/build-error-serializer.js && node build/build-validation.js",
|
|
13
13
|
"coverage": "npm run unit -- --coverage-report=html",
|
|
14
|
-
"coverage:ci": "
|
|
15
|
-
"coverage:ci-check-coverage": "
|
|
16
|
-
"lint": "npm run lint:
|
|
17
|
-
"lint:fix": "
|
|
14
|
+
"coverage:ci": "tap --coverage-report=html --coverage-report=lcov --allow-incomplete-coverage",
|
|
15
|
+
"coverage:ci-check-coverage": "tap replay",
|
|
16
|
+
"lint": "npm run lint:eslint",
|
|
17
|
+
"lint:fix": "eslint --fix",
|
|
18
18
|
"lint:markdown": "markdownlint-cli2",
|
|
19
|
-
"lint:
|
|
20
|
-
"
|
|
21
|
-
"lint:typescript:fix": "npm run lint:typescript -- --fix",
|
|
22
|
-
"prepublishOnly": "cross-env PREPUBLISH=true tap --no-check-coverage test/build/**.test.js && npm run test:validator:integrity",
|
|
19
|
+
"lint:eslint": "eslint",
|
|
20
|
+
"prepublishOnly": "cross-env PREPUBLISH=true tap --allow-incomplete-coverage test/build/**.test.js && npm run test:validator:integrity",
|
|
23
21
|
"test": "npm run lint && npm run unit && npm run test:typescript",
|
|
24
|
-
"test:ci": "npm run unit -- --
|
|
22
|
+
"test:ci": "npm run unit -- --coverage-report=lcovonly && npm run test:typescript",
|
|
25
23
|
"test:report": "npm run lint && npm run unit:report && npm run test:typescript",
|
|
26
24
|
"test:validator:integrity": "npm run build:validation && git diff --quiet --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol lib/error-serializer.js && git diff --quiet --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol lib/configValidator.js",
|
|
27
25
|
"test:typescript": "tsc test/types/import.ts && tsd",
|
|
28
|
-
"test:watch": "npm run unit -- --watch --
|
|
29
|
-
"unit": "
|
|
26
|
+
"test:watch": "npm run unit -- --watch --coverage-report=none --reporter=terse",
|
|
27
|
+
"unit": "tap",
|
|
30
28
|
"unit:junit": "tap-mocha-reporter xunit < out.tap > test/junit-testresults.xml",
|
|
31
|
-
"unit:report": "tap --
|
|
29
|
+
"unit:report": "tap --coverage-report=html --coverage-report=cobertura | tee out.tap",
|
|
32
30
|
"citgm": "tap --jobs=1 --timeout=120"
|
|
33
31
|
},
|
|
34
32
|
"repository": {
|
|
@@ -153,79 +151,61 @@
|
|
|
153
151
|
}
|
|
154
152
|
],
|
|
155
153
|
"devDependencies": {
|
|
156
|
-
"@fastify/pre-commit": "^2.0
|
|
157
|
-
"@sinclair/typebox": "^0.
|
|
158
|
-
"@sinonjs/fake-timers": "^11.
|
|
159
|
-
"@
|
|
160
|
-
"@
|
|
161
|
-
"@
|
|
154
|
+
"@fastify/pre-commit": "^2.1.0",
|
|
155
|
+
"@sinclair/typebox": "^0.32.22",
|
|
156
|
+
"@sinonjs/fake-timers": "^11.2.2",
|
|
157
|
+
"@stylistic/eslint-plugin": "^2.1.0",
|
|
158
|
+
"@stylistic/eslint-plugin-js": "^2.1.0",
|
|
159
|
+
"@types/node": "^20.12.7",
|
|
162
160
|
"ajv": "^8.12.0",
|
|
163
161
|
"ajv-errors": "^3.0.0",
|
|
164
|
-
"ajv-formats": "^
|
|
162
|
+
"ajv-formats": "^3.0.1",
|
|
165
163
|
"ajv-i18n": "^4.2.0",
|
|
166
164
|
"ajv-merge-patch": "^5.0.1",
|
|
167
|
-
"autocannon": "^7.
|
|
165
|
+
"autocannon": "^7.15.0",
|
|
168
166
|
"branch-comparer": "^1.1.0",
|
|
169
|
-
"c8": "^8.0.1",
|
|
170
167
|
"concurrently": "^8.2.2",
|
|
171
168
|
"cross-env": "^7.0.3",
|
|
172
|
-
"eslint": "^
|
|
173
|
-
"eslint-config-standard": "^17.1.0",
|
|
174
|
-
"eslint-import-resolver-node": "^0.3.9",
|
|
175
|
-
"eslint-plugin-import": "^2.28.1",
|
|
176
|
-
"eslint-plugin-n": "^16.2.0",
|
|
177
|
-
"eslint-plugin-promise": "^6.1.1",
|
|
169
|
+
"eslint": "^9.0.0",
|
|
178
170
|
"fast-json-body": "^1.1.0",
|
|
179
171
|
"fastify-plugin": "^4.5.1",
|
|
180
|
-
"fluent-json-schema": "^4.1
|
|
181
|
-
"form-data": "^4.0.0",
|
|
172
|
+
"fluent-json-schema": "^4.2.1",
|
|
182
173
|
"h2url": "^0.2.0",
|
|
183
174
|
"http-errors": "^2.0.0",
|
|
184
|
-
"joi": "^17.
|
|
185
|
-
"json-schema-to-ts": "^
|
|
175
|
+
"joi": "^17.12.3",
|
|
176
|
+
"json-schema-to-ts": "^3.0.1",
|
|
186
177
|
"JSONStream": "^1.3.5",
|
|
187
|
-
"markdownlint-cli2": "^0.
|
|
178
|
+
"markdownlint-cli2": "^0.13.0",
|
|
179
|
+
"neostandard": "^0.8.0",
|
|
188
180
|
"node-forge": "^1.3.1",
|
|
189
181
|
"proxyquire": "^2.1.3",
|
|
190
182
|
"send": "^0.18.0",
|
|
191
183
|
"simple-get": "^4.0.1",
|
|
192
|
-
"snazzy": "^9.0.0",
|
|
193
184
|
"split2": "^4.2.0",
|
|
194
|
-
"
|
|
195
|
-
"
|
|
196
|
-
"
|
|
197
|
-
"
|
|
198
|
-
"undici": "^5.26.0",
|
|
185
|
+
"tap": "^19.0.0",
|
|
186
|
+
"tsd": "^0.31.0",
|
|
187
|
+
"typescript": "^5.4.5",
|
|
188
|
+
"undici": "^6.13.0",
|
|
199
189
|
"vary": "^1.1.2",
|
|
200
|
-
"yup": "^1.
|
|
190
|
+
"yup": "^1.4.0"
|
|
201
191
|
},
|
|
202
192
|
"dependencies": {
|
|
203
193
|
"@fastify/ajv-compiler": "^3.5.0",
|
|
204
|
-
"@fastify/error": "^
|
|
194
|
+
"@fastify/error": "^4.0.0",
|
|
205
195
|
"@fastify/fast-json-stringify-compiler": "^4.3.0",
|
|
206
196
|
"abstract-logging": "^2.0.1",
|
|
207
197
|
"avvio": "^8.3.0",
|
|
208
|
-
"
|
|
209
|
-
"fast-json-stringify": "^
|
|
210
|
-
"find-my-way": "^8.
|
|
211
|
-
"light-my-request": "^5.
|
|
198
|
+
"dc-polyfill": "^0.1.6",
|
|
199
|
+
"fast-json-stringify": "^6.0.0",
|
|
200
|
+
"find-my-way": "^8.1.0",
|
|
201
|
+
"light-my-request": "^5.13.0",
|
|
212
202
|
"pino": "^9.0.0",
|
|
213
203
|
"process-warning": "^3.0.0",
|
|
214
204
|
"proxy-addr": "^2.0.7",
|
|
215
|
-
"rfdc": "^1.3.
|
|
205
|
+
"rfdc": "^1.3.1",
|
|
216
206
|
"secure-json-parse": "^2.7.0",
|
|
217
|
-
"semver": "^7.
|
|
218
|
-
"toad-cache": "^3.
|
|
219
|
-
},
|
|
220
|
-
"standard": {
|
|
221
|
-
"ignore": [
|
|
222
|
-
"lib/configValidator.js",
|
|
223
|
-
"lib/error-serializer.js",
|
|
224
|
-
"fastify.d.ts",
|
|
225
|
-
"types/*",
|
|
226
|
-
"test/types/*",
|
|
227
|
-
"test/same-shape.test.js"
|
|
228
|
-
]
|
|
207
|
+
"semver": "^7.6.0",
|
|
208
|
+
"toad-cache": "^3.7.0"
|
|
229
209
|
},
|
|
230
210
|
"tsd": {
|
|
231
211
|
"directory": "test/types"
|
package/test/404s.test.js
CHANGED
|
@@ -6,7 +6,6 @@ const fp = require('fastify-plugin')
|
|
|
6
6
|
const sget = require('simple-get').concat
|
|
7
7
|
const errors = require('http-errors')
|
|
8
8
|
const split = require('split2')
|
|
9
|
-
const FormData = require('form-data')
|
|
10
9
|
const Fastify = require('..')
|
|
11
10
|
const { getServerUrl } = require('./helper')
|
|
12
11
|
|
|
@@ -68,21 +67,18 @@ test('default 404', t => {
|
|
|
68
67
|
})
|
|
69
68
|
})
|
|
70
69
|
|
|
71
|
-
test('using post method and multipart/formdata', t => {
|
|
70
|
+
test('using post method and multipart/formdata', async t => {
|
|
72
71
|
t.plan(3)
|
|
73
|
-
const form = FormData()
|
|
74
|
-
form.
|
|
72
|
+
const form = new FormData()
|
|
73
|
+
form.set('test-field', 'just some field')
|
|
75
74
|
|
|
76
|
-
|
|
75
|
+
const response = await fetch(getServerUrl(fastify) + '/notSupported', {
|
|
77
76
|
method: 'POST',
|
|
78
|
-
|
|
79
|
-
body: form,
|
|
80
|
-
json: false
|
|
81
|
-
}, (err, response, body) => {
|
|
82
|
-
t.error(err)
|
|
83
|
-
t.equal(response.statusCode, 404)
|
|
84
|
-
t.equal(response.headers['content-type'], 'application/json; charset=utf-8')
|
|
77
|
+
body: form
|
|
85
78
|
})
|
|
79
|
+
t.equal(response.status, 404)
|
|
80
|
+
t.equal(response.statusText, 'Not Found')
|
|
81
|
+
t.equal(response.headers.get('content-type'), 'application/json; charset=utf-8')
|
|
86
82
|
})
|
|
87
83
|
})
|
|
88
84
|
})
|