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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const test = t.test
|
|
5
|
+
const sget = require('simple-get').concat
|
|
6
|
+
const Fastify = require('../fastify')
|
|
7
|
+
const supportedMethods = require('../lib/httpMethods').supportedMethods
|
|
8
|
+
|
|
9
|
+
test('route-shorthand', t => {
|
|
10
|
+
t.plan(supportedMethods.length + 1)
|
|
11
|
+
const test = t.test
|
|
12
|
+
|
|
13
|
+
for (const method of supportedMethods) {
|
|
14
|
+
test(`route-shorthand - ${method.toLowerCase()}`, t => {
|
|
15
|
+
t.plan(3)
|
|
16
|
+
const fastify = new Fastify()
|
|
17
|
+
fastify[method.toLowerCase()]('/', function (req, reply) {
|
|
18
|
+
t.equal(req.method, method)
|
|
19
|
+
reply.send()
|
|
20
|
+
})
|
|
21
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
22
|
+
if (err) t.error(err)
|
|
23
|
+
t.teardown(() => { fastify.close() })
|
|
24
|
+
sget({
|
|
25
|
+
method,
|
|
26
|
+
url: 'http://localhost:' + fastify.server.address().port
|
|
27
|
+
}, (err, response, body) => {
|
|
28
|
+
t.error(err)
|
|
29
|
+
t.equal(response.statusCode, 200)
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
test('route-shorthand - all', t => {
|
|
36
|
+
t.plan(3 * supportedMethods.length)
|
|
37
|
+
const fastify = new Fastify()
|
|
38
|
+
let currentMethod = ''
|
|
39
|
+
fastify.all('/', function (req, reply) {
|
|
40
|
+
t.equal(req.method, currentMethod)
|
|
41
|
+
reply.send()
|
|
42
|
+
})
|
|
43
|
+
fastify.listen({ port: 0 }, async function (err) {
|
|
44
|
+
if (err) t.error(err)
|
|
45
|
+
t.teardown(() => { fastify.close() })
|
|
46
|
+
for (const method of supportedMethods) {
|
|
47
|
+
currentMethod = method
|
|
48
|
+
await new Promise(resolve => sget({
|
|
49
|
+
method,
|
|
50
|
+
url: 'http://localhost:' + fastify.server.address().port
|
|
51
|
+
}, (err, response, body) => {
|
|
52
|
+
t.error(err)
|
|
53
|
+
t.equal(response.statusCode, 200)
|
|
54
|
+
resolve()
|
|
55
|
+
})
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
})
|
|
@@ -704,7 +704,7 @@ test('Custom schema object should not trigger FST_ERR_SCH_DUPLICATE', async t =>
|
|
|
704
704
|
})
|
|
705
705
|
|
|
706
706
|
test('The default schema compilers should not be called when overwritten by the user', async t => {
|
|
707
|
-
const Fastify = t.
|
|
707
|
+
const Fastify = t.mockRequire('../', {
|
|
708
708
|
'@fastify/ajv-compiler': () => {
|
|
709
709
|
t.fail('The default validator compiler should not be called')
|
|
710
710
|
},
|
package/test/server.test.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const t = require('tap')
|
|
4
4
|
const test = t.test
|
|
5
5
|
const Fastify = require('..')
|
|
6
|
-
const
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
7
|
const undici = require('undici')
|
|
8
8
|
|
|
9
9
|
test('listen should accept null port', t => {
|
|
@@ -72,7 +72,22 @@ test('listen should reject string port', async (t) => {
|
|
|
72
72
|
}
|
|
73
73
|
})
|
|
74
74
|
|
|
75
|
-
test('
|
|
75
|
+
test('Test for hostname and port', t => {
|
|
76
|
+
const app = Fastify()
|
|
77
|
+
t.teardown(app.close.bind(app))
|
|
78
|
+
app.get('/host', (req, res) => {
|
|
79
|
+
const host = 'localhost:8000'
|
|
80
|
+
t.equal(req.host, host)
|
|
81
|
+
t.equal(req.hostname, req.host.split(':')[0])
|
|
82
|
+
t.equal(req.port, Number(req.host.split(':')[1]))
|
|
83
|
+
res.send('ok')
|
|
84
|
+
})
|
|
85
|
+
app.listen({ port: 8000 }, () => {
|
|
86
|
+
sget('http://localhost:8000/host', () => { t.end() })
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
test('abort signal', t => {
|
|
76
91
|
t.test('listen should not start server', t => {
|
|
77
92
|
t.plan(2)
|
|
78
93
|
function onClose (instance, done) {
|
package/test/stream.2.test.js
CHANGED
|
@@ -68,7 +68,7 @@ test('onSend hook stream should work even if payload is not a proper stream', t
|
|
|
68
68
|
child: () => { return spyLogger }
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
const fastify = Fastify({
|
|
71
|
+
const fastify = Fastify({ loggerInstance: spyLogger })
|
|
72
72
|
fastify.get('/', function (req, reply) {
|
|
73
73
|
reply.send({ hello: 'world' })
|
|
74
74
|
})
|
package/test/stream.4.test.js
CHANGED
|
@@ -3,16 +3,12 @@
|
|
|
3
3
|
const t = require('tap')
|
|
4
4
|
const test = t.test
|
|
5
5
|
const sget = require('simple-get').concat
|
|
6
|
-
const fs = require('node:fs')
|
|
7
6
|
const errors = require('http-errors')
|
|
8
7
|
const JSONStream = require('JSONStream')
|
|
9
|
-
const send = require('send')
|
|
10
8
|
const Readable = require('node:stream').Readable
|
|
11
9
|
const split = require('split2')
|
|
12
|
-
const semver = require('semver')
|
|
13
10
|
const Fastify = require('..')
|
|
14
11
|
const { kDisableRequestLogging } = require('../lib/symbols.js')
|
|
15
|
-
const { getServerUrl } = require('./helper')
|
|
16
12
|
|
|
17
13
|
test('Destroying streams prematurely should call abort method', t => {
|
|
18
14
|
t.plan(7)
|
|
@@ -183,41 +179,3 @@ test('return a 404 if the stream emits a 404 error', t => {
|
|
|
183
179
|
})
|
|
184
180
|
})
|
|
185
181
|
})
|
|
186
|
-
|
|
187
|
-
test('should support send module 200 and 404', { skip: semver.gte(process.versions.node, '17.0.0') }, t => {
|
|
188
|
-
t.plan(8)
|
|
189
|
-
const fastify = Fastify()
|
|
190
|
-
|
|
191
|
-
fastify.get('/', function (req, reply) {
|
|
192
|
-
const stream = send(req.raw, __filename)
|
|
193
|
-
reply.code(200).send(stream)
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
fastify.get('/error', function (req, reply) {
|
|
197
|
-
const stream = send(req.raw, 'non-existing-file')
|
|
198
|
-
reply.code(200).send(stream)
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
fastify.listen({ port: 0 }, err => {
|
|
202
|
-
t.error(err)
|
|
203
|
-
t.teardown(() => { fastify.close() })
|
|
204
|
-
|
|
205
|
-
const url = getServerUrl(fastify)
|
|
206
|
-
|
|
207
|
-
sget(url, function (err, response, data) {
|
|
208
|
-
t.error(err)
|
|
209
|
-
t.equal(response.headers['content-type'], 'application/javascript; charset=UTF-8')
|
|
210
|
-
t.equal(response.statusCode, 200)
|
|
211
|
-
|
|
212
|
-
fs.readFile(__filename, (err, expected) => {
|
|
213
|
-
t.error(err)
|
|
214
|
-
t.equal(expected.toString(), data.toString())
|
|
215
|
-
})
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
sget(url + '/error', function (err, response) {
|
|
219
|
-
t.error(err)
|
|
220
|
-
t.equal(response.statusCode, 404)
|
|
221
|
-
})
|
|
222
|
-
})
|
|
223
|
-
})
|
package/test/stream.5.test.js
CHANGED
|
@@ -88,7 +88,7 @@ test('reply.send handles aborted requests', t => {
|
|
|
88
88
|
child: () => { return spyLogger }
|
|
89
89
|
}
|
|
90
90
|
const fastify = Fastify({
|
|
91
|
-
|
|
91
|
+
loggerInstance: spyLogger
|
|
92
92
|
})
|
|
93
93
|
|
|
94
94
|
fastify.get('/', (req, reply) => {
|
|
@@ -136,7 +136,7 @@ test('request terminated should not crash fastify', t => {
|
|
|
136
136
|
child: () => { return spyLogger }
|
|
137
137
|
}
|
|
138
138
|
const fastify = Fastify({
|
|
139
|
-
|
|
139
|
+
loggerInstance: spyLogger
|
|
140
140
|
})
|
|
141
141
|
|
|
142
142
|
fastify.get('/', async (req, reply) => {
|
package/test/trust-proxy.test.js
CHANGED
|
@@ -26,9 +26,11 @@ const testRequestValues = (t, req, options) => {
|
|
|
26
26
|
t.ok(req.ip, 'ip is defined')
|
|
27
27
|
t.equal(req.ip, options.ip, 'gets ip from x-forwarded-for')
|
|
28
28
|
}
|
|
29
|
-
if (options.
|
|
30
|
-
t.ok(req.
|
|
31
|
-
t.equal(req.
|
|
29
|
+
if (options.host) {
|
|
30
|
+
t.ok(req.host, 'host is defined')
|
|
31
|
+
t.equal(req.host, options.host, 'gets host from x-forwarded-host')
|
|
32
|
+
t.ok(req.hostname)
|
|
33
|
+
t.equal(req.hostname, options.host, 'gets hostname from x-forwarded-host')
|
|
32
34
|
}
|
|
33
35
|
if (options.ips) {
|
|
34
36
|
t.same(req.ips, options.ips, 'gets ips from x-forwarded-for')
|
|
@@ -37,6 +39,10 @@ const testRequestValues = (t, req, options) => {
|
|
|
37
39
|
t.ok(req.protocol, 'protocol is defined')
|
|
38
40
|
t.equal(req.protocol, options.protocol, 'gets protocol from x-forwarded-proto')
|
|
39
41
|
}
|
|
42
|
+
if (options.port) {
|
|
43
|
+
t.ok(req.port, 'port is defined')
|
|
44
|
+
t.equal(req.port, options.port, 'port is taken from x-forwarded-for or host')
|
|
45
|
+
}
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
let localhost
|
|
@@ -45,18 +51,18 @@ before(async function () {
|
|
|
45
51
|
})
|
|
46
52
|
|
|
47
53
|
test('trust proxy, not add properties to node req', (t) => {
|
|
48
|
-
t.plan(
|
|
54
|
+
t.plan(14)
|
|
49
55
|
const app = fastify({
|
|
50
56
|
trustProxy: true
|
|
51
57
|
})
|
|
52
58
|
app.get('/trustproxy', function (req, reply) {
|
|
53
|
-
testRequestValues(t, req, { ip: '1.1.1.1',
|
|
54
|
-
reply.code(200).send({ ip: req.ip,
|
|
59
|
+
testRequestValues(t, req, { ip: '1.1.1.1', host: 'example.com', port: app.server.address().port })
|
|
60
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
55
61
|
})
|
|
56
62
|
|
|
57
63
|
app.get('/trustproxychain', function (req, reply) {
|
|
58
|
-
testRequestValues(t, req, { ip: '2.2.2.2', ips: [localhost, '1.1.1.1', '2.2.2.2'] })
|
|
59
|
-
reply.code(200).send({ ip: req.ip,
|
|
64
|
+
testRequestValues(t, req, { ip: '2.2.2.2', ips: [localhost, '1.1.1.1', '2.2.2.2'], port: app.server.address().port })
|
|
65
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
60
66
|
})
|
|
61
67
|
|
|
62
68
|
t.teardown(app.close.bind(app))
|
|
@@ -70,14 +76,14 @@ test('trust proxy, not add properties to node req', (t) => {
|
|
|
70
76
|
})
|
|
71
77
|
|
|
72
78
|
test('trust proxy chain', (t) => {
|
|
73
|
-
t.plan(
|
|
79
|
+
t.plan(9)
|
|
74
80
|
const app = fastify({
|
|
75
81
|
trustProxy: [localhost, '192.168.1.1']
|
|
76
82
|
})
|
|
77
83
|
|
|
78
84
|
app.get('/trustproxychain', function (req, reply) {
|
|
79
|
-
testRequestValues(t, req, { ip: '1.1.1.1' })
|
|
80
|
-
reply.code(200).send({ ip: req.ip,
|
|
85
|
+
testRequestValues(t, req, { ip: '1.1.1.1', host: 'example.com', port: app.server.address().port })
|
|
86
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
81
87
|
})
|
|
82
88
|
|
|
83
89
|
t.teardown(app.close.bind(app))
|
|
@@ -90,13 +96,13 @@ test('trust proxy chain', (t) => {
|
|
|
90
96
|
})
|
|
91
97
|
|
|
92
98
|
test('trust proxy function', (t) => {
|
|
93
|
-
t.plan(
|
|
99
|
+
t.plan(9)
|
|
94
100
|
const app = fastify({
|
|
95
101
|
trustProxy: (address) => address === localhost
|
|
96
102
|
})
|
|
97
103
|
app.get('/trustproxyfunc', function (req, reply) {
|
|
98
|
-
testRequestValues(t, req, { ip: '1.1.1.1' })
|
|
99
|
-
reply.code(200).send({ ip: req.ip,
|
|
104
|
+
testRequestValues(t, req, { ip: '1.1.1.1', host: 'example.com', port: app.server.address().port })
|
|
105
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
100
106
|
})
|
|
101
107
|
|
|
102
108
|
t.teardown(app.close.bind(app))
|
|
@@ -109,13 +115,13 @@ test('trust proxy function', (t) => {
|
|
|
109
115
|
})
|
|
110
116
|
|
|
111
117
|
test('trust proxy number', (t) => {
|
|
112
|
-
t.plan(
|
|
118
|
+
t.plan(10)
|
|
113
119
|
const app = fastify({
|
|
114
120
|
trustProxy: 1
|
|
115
121
|
})
|
|
116
122
|
app.get('/trustproxynumber', function (req, reply) {
|
|
117
|
-
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'] })
|
|
118
|
-
reply.code(200).send({ ip: req.ip,
|
|
123
|
+
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'], host: 'example.com', port: app.server.address().port })
|
|
124
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
119
125
|
})
|
|
120
126
|
|
|
121
127
|
t.teardown(app.close.bind(app))
|
|
@@ -128,13 +134,13 @@ test('trust proxy number', (t) => {
|
|
|
128
134
|
})
|
|
129
135
|
|
|
130
136
|
test('trust proxy IP addresses', (t) => {
|
|
131
|
-
t.plan(
|
|
137
|
+
t.plan(10)
|
|
132
138
|
const app = fastify({
|
|
133
139
|
trustProxy: `${localhost}, 2.2.2.2`
|
|
134
140
|
})
|
|
135
141
|
app.get('/trustproxyipaddrs', function (req, reply) {
|
|
136
|
-
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'] })
|
|
137
|
-
reply.code(200).send({ ip: req.ip,
|
|
142
|
+
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'], host: 'example.com', port: app.server.address().port })
|
|
143
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
138
144
|
})
|
|
139
145
|
|
|
140
146
|
t.teardown(app.close.bind(app))
|
|
@@ -147,21 +153,21 @@ test('trust proxy IP addresses', (t) => {
|
|
|
147
153
|
})
|
|
148
154
|
|
|
149
155
|
test('trust proxy protocol', (t) => {
|
|
150
|
-
t.plan(
|
|
156
|
+
t.plan(31)
|
|
151
157
|
const app = fastify({
|
|
152
158
|
trustProxy: true
|
|
153
159
|
})
|
|
154
160
|
app.get('/trustproxyprotocol', function (req, reply) {
|
|
155
|
-
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'lorem' })
|
|
156
|
-
reply.code(200).send({ ip: req.ip,
|
|
161
|
+
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'lorem', host: 'example.com', port: app.server.address().port })
|
|
162
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
157
163
|
})
|
|
158
164
|
app.get('/trustproxynoprotocol', function (req, reply) {
|
|
159
|
-
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'http' })
|
|
160
|
-
reply.code(200).send({ ip: req.ip,
|
|
165
|
+
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'http', host: 'example.com', port: app.server.address().port })
|
|
166
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
161
167
|
})
|
|
162
168
|
app.get('/trustproxyprotocols', function (req, reply) {
|
|
163
|
-
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'dolor' })
|
|
164
|
-
reply.code(200).send({ ip: req.ip,
|
|
169
|
+
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'dolor', host: 'example.com', port: app.server.address().port })
|
|
170
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
165
171
|
})
|
|
166
172
|
|
|
167
173
|
t.teardown(app.close.bind(app))
|
|
@@ -59,8 +59,6 @@ expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_FORCE_CLOSE_CONNECT
|
|
|
59
59
|
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_DUPLICATED_ROUTE)
|
|
60
60
|
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_BAD_URL)
|
|
61
61
|
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ASYNC_CONSTRAINT)
|
|
62
|
-
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_DEFAULT_ROUTE_INVALID_TYPE)
|
|
63
|
-
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_INVALID_URL)
|
|
64
62
|
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ROUTE_OPTIONS_NOT_OBJ)
|
|
65
63
|
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ROUTE_DUPLICATED_HANDLER)
|
|
66
64
|
expectAssignable<FastifyErrorConstructor>(errorCodes.FST_ERR_ROUTE_HANDLER_NOT_FN)
|
|
@@ -11,30 +11,32 @@ import fastify, {
|
|
|
11
11
|
RawRequestDefaultExpression,
|
|
12
12
|
RouteGenericInterface,
|
|
13
13
|
FastifyErrorCodes,
|
|
14
|
-
FastifyError
|
|
14
|
+
FastifyError,
|
|
15
|
+
SafePromiseLike
|
|
15
16
|
} from '../../fastify'
|
|
16
17
|
import { ErrorObject as AjvErrorObject } from 'ajv'
|
|
17
18
|
import * as http from 'http'
|
|
18
19
|
import * as https from 'https'
|
|
19
20
|
import * as http2 from 'http2'
|
|
20
21
|
import { expectType, expectError, expectAssignable, expectNotAssignable } from 'tsd'
|
|
21
|
-
import { FastifyLoggerInstance } from '../../types/logger'
|
|
22
22
|
import { Socket } from 'net'
|
|
23
23
|
|
|
24
24
|
// FastifyInstance
|
|
25
25
|
// http server
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> &
|
|
26
|
+
expectError<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & Promise<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
|
|
27
|
+
expectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
|
|
28
|
+
expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())
|
|
29
|
+
expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({}))
|
|
30
|
+
expectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ http: {} }))
|
|
29
31
|
// https server
|
|
30
|
-
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> &
|
|
31
|
-
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> &
|
|
32
|
+
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: {} }))
|
|
33
|
+
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: null }))
|
|
32
34
|
// http2 server
|
|
33
|
-
expectType<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse> &
|
|
34
|
-
expectType<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse> &
|
|
35
|
+
expectType<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse> & SafePromiseLike<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, http2SessionTimeout: 1000 }))
|
|
36
|
+
expectType<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse> & SafePromiseLike<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, https: {}, http2SessionTimeout: 1000 }))
|
|
35
37
|
expectType<LightMyRequestChain>(fastify({ http2: true, https: {} }).inject())
|
|
36
|
-
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> &
|
|
37
|
-
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> &
|
|
38
|
+
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ schemaController: {} }))
|
|
39
|
+
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(
|
|
38
40
|
fastify({
|
|
39
41
|
schemaController: {
|
|
40
42
|
compilersFactory: {}
|
|
@@ -92,7 +94,7 @@ expectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerR
|
|
|
92
94
|
method: 'GET',
|
|
93
95
|
url: '/',
|
|
94
96
|
version: '1.0.0',
|
|
95
|
-
|
|
97
|
+
host: 'localhost',
|
|
96
98
|
remoteAddress: '127.0.0.1',
|
|
97
99
|
remotePort: 3000
|
|
98
100
|
}
|
|
@@ -14,6 +14,7 @@ import fastify, {
|
|
|
14
14
|
RegisterOptions,
|
|
15
15
|
RouteOptions,
|
|
16
16
|
// preClose hook types should be exported correctly https://github.com/fastify/fastify/pull/5335
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
17
18
|
preCloseAsyncHookHandler,
|
|
18
19
|
preCloseHookHandler
|
|
19
20
|
} from '../../fastify'
|
package/test/types/import.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { expectAssignable,
|
|
1
|
+
import { expectAssignable, expectError, expectNotDeprecated, expectType } from 'tsd'
|
|
2
2
|
import fastify, {
|
|
3
3
|
FastifyBaseLogger,
|
|
4
4
|
FastifyBodyParser,
|
|
@@ -12,7 +12,6 @@ import fastify, {
|
|
|
12
12
|
import { HookHandlerDoneFunction } from '../../types/hooks'
|
|
13
13
|
import { FastifyReply } from '../../types/reply'
|
|
14
14
|
import { FastifyRequest } from '../../types/request'
|
|
15
|
-
import { DefaultRoute } from '../../types/route'
|
|
16
15
|
import { FastifySchemaControllerOptions, FastifySchemaCompiler, FastifySerializerCompiler } from '../../types/schema'
|
|
17
16
|
import { AddressInfo } from 'net'
|
|
18
17
|
import { Bindings, ChildLoggerOptions } from '../../types/logger'
|
|
@@ -194,48 +193,6 @@ function invalidSchemaErrorFormatter (err: Error) {
|
|
|
194
193
|
}
|
|
195
194
|
expectError(server.setSchemaErrorFormatter(invalidSchemaErrorFormatter))
|
|
196
195
|
|
|
197
|
-
// test listen method callback
|
|
198
|
-
expectAssignable<void>(server.listen(3000, '', 0, (err, address) => {
|
|
199
|
-
expectType<Error | null>(err)
|
|
200
|
-
}))
|
|
201
|
-
expectAssignable<void>(server.listen('3000', '', 0, (err, address) => {
|
|
202
|
-
expectType<Error | null>(err)
|
|
203
|
-
}))
|
|
204
|
-
expectAssignable<void>(server.listen(3000, '', (err, address) => {
|
|
205
|
-
expectType<Error | null>(err)
|
|
206
|
-
}))
|
|
207
|
-
expectAssignable<void>(server.listen('3000', '', (err, address) => {
|
|
208
|
-
expectType<Error | null>(err)
|
|
209
|
-
}))
|
|
210
|
-
expectAssignable<void>(server.listen(3000, (err, address) => {
|
|
211
|
-
expectType<Error | null>(err)
|
|
212
|
-
}))
|
|
213
|
-
expectAssignable<void>(server.listen('3000', (err, address) => {
|
|
214
|
-
expectType<Error | null>(err)
|
|
215
|
-
}))
|
|
216
|
-
|
|
217
|
-
// test listen method callback types
|
|
218
|
-
expectAssignable<void>(server.listen('3000', (err, address) => {
|
|
219
|
-
expectAssignable<Error|null>(err)
|
|
220
|
-
expectAssignable<string>(address)
|
|
221
|
-
}))
|
|
222
|
-
|
|
223
|
-
// test listen method promise
|
|
224
|
-
expectAssignable<PromiseLike<string>>(server.listen(3000))
|
|
225
|
-
expectAssignable<PromiseLike<string>>(server.listen('3000'))
|
|
226
|
-
expectAssignable<PromiseLike<string>>(server.listen(3000, '', 0))
|
|
227
|
-
expectAssignable<PromiseLike<string>>(server.listen('3000', '', 0))
|
|
228
|
-
expectAssignable<PromiseLike<string>>(server.listen(3000, ''))
|
|
229
|
-
expectAssignable<PromiseLike<string>>(server.listen('3000', ''))
|
|
230
|
-
|
|
231
|
-
// Test variadic listen signatures Typescript deprecation
|
|
232
|
-
expectDeprecated(server.listen(3000))
|
|
233
|
-
expectDeprecated(server.listen('3000'))
|
|
234
|
-
expectDeprecated(server.listen(3000, '', 0))
|
|
235
|
-
expectDeprecated(server.listen('3000', '', 0))
|
|
236
|
-
expectDeprecated(server.listen(3000, ''))
|
|
237
|
-
expectDeprecated(server.listen('3000', ''))
|
|
238
|
-
|
|
239
196
|
// test listen opts objects
|
|
240
197
|
expectAssignable<PromiseLike<string>>(server.listen())
|
|
241
198
|
expectAssignable<PromiseLike<string>>(server.listen({ port: 3000 }))
|
|
@@ -279,6 +236,12 @@ expectAssignable<FastifyInstance>(server.ready())
|
|
|
279
236
|
expectAssignable<FastifyInstance>(server.ready((err) => {
|
|
280
237
|
expectType<Error | null>(err)
|
|
281
238
|
}))
|
|
239
|
+
expectAssignable<FastifyInstance>(server.ready(async (err) => {
|
|
240
|
+
expectType<Error | null>(err)
|
|
241
|
+
}))
|
|
242
|
+
expectAssignable<Parameters<typeof server.ready>[0]>(async (err) => {
|
|
243
|
+
expectType<Error | null>(err)
|
|
244
|
+
})
|
|
282
245
|
|
|
283
246
|
expectAssignable<void>(server.routing({} as RawRequestDefaultExpression, {} as RawReplyDefaultExpression))
|
|
284
247
|
|
|
@@ -453,7 +416,7 @@ server.decorate('typedTestProperty', {
|
|
|
453
416
|
})
|
|
454
417
|
server.decorate('typedTestProperty')
|
|
455
418
|
server.decorate('typedTestProperty', null, ['foo'])
|
|
456
|
-
server.decorate('typedTestProperty', null)
|
|
419
|
+
expectError(server.decorate('typedTestProperty', null))
|
|
457
420
|
expectError(server.decorate('typedTestProperty', 'foo'))
|
|
458
421
|
expectError(server.decorate('typedTestProperty', {
|
|
459
422
|
getter () {
|
|
@@ -493,7 +456,7 @@ server.decorateRequest('typedTestRequestProperty', {
|
|
|
493
456
|
})
|
|
494
457
|
server.decorateRequest('typedTestRequestProperty')
|
|
495
458
|
server.decorateRequest('typedTestRequestProperty', null, ['foo'])
|
|
496
|
-
server.decorateRequest('typedTestRequestProperty', null)
|
|
459
|
+
expectError(server.decorateRequest('typedTestRequestProperty', null))
|
|
497
460
|
expectError(server.decorateRequest('typedTestRequestProperty', 'foo'))
|
|
498
461
|
expectError(server.decorateRequest('typedTestRequestProperty', {
|
|
499
462
|
getter () {
|
|
@@ -533,7 +496,7 @@ server.decorateReply('typedTestReplyProperty', {
|
|
|
533
496
|
})
|
|
534
497
|
server.decorateReply('typedTestReplyProperty')
|
|
535
498
|
server.decorateReply('typedTestReplyProperty', null, ['foo'])
|
|
536
|
-
server.decorateReply('typedTestReplyProperty', null)
|
|
499
|
+
expectError(server.decorateReply('typedTestReplyProperty', null))
|
|
537
500
|
expectError(server.decorateReply('typedTestReplyProperty', 'foo'))
|
|
538
501
|
expectError(server.decorateReply('typedTestReplyProperty', {
|
|
539
502
|
getter () {
|
|
@@ -570,9 +533,5 @@ const versionConstraintStrategy = {
|
|
|
570
533
|
expectType<void>(server.addConstraintStrategy(versionConstraintStrategy))
|
|
571
534
|
expectType<boolean>(server.hasConstraintStrategy(versionConstraintStrategy.name))
|
|
572
535
|
|
|
573
|
-
expectType<boolean>(server.hasPlugin(''))
|
|
574
|
-
|
|
575
|
-
expectAssignable<DefaultRoute<RawRequestDefaultExpression, RawReplyDefaultExpression>>(server.getDefaultRoute())
|
|
576
|
-
|
|
577
536
|
expectType<FastifySchemaCompiler<any> | undefined>(server.validatorCompiler)
|
|
578
537
|
expectType<FastifySerializerCompiler<any> | undefined>(server.serializerCompiler)
|
|
@@ -5,8 +5,7 @@ import fastify, {
|
|
|
5
5
|
FastifyLoggerInstance,
|
|
6
6
|
FastifyRequest,
|
|
7
7
|
FastifyReply,
|
|
8
|
-
FastifyBaseLogger
|
|
9
|
-
FastifyInstance
|
|
8
|
+
FastifyBaseLogger
|
|
10
9
|
} from '../../fastify'
|
|
11
10
|
import { Server, IncomingMessage, ServerResponse } from 'http'
|
|
12
11
|
import * as fs from 'fs'
|
|
@@ -121,14 +120,52 @@ const serverAutoInferringTypes = fastify({
|
|
|
121
120
|
|
|
122
121
|
expectType<FastifyBaseLogger>(serverAutoInferringTypes.log)
|
|
123
122
|
|
|
124
|
-
const
|
|
125
|
-
|
|
123
|
+
const serverWithLoggerInstance = fastify({
|
|
124
|
+
loggerInstance: P({
|
|
126
125
|
level: 'info',
|
|
127
126
|
redact: ['x-userinfo']
|
|
128
127
|
})
|
|
129
128
|
})
|
|
130
129
|
|
|
131
|
-
expectType<P.Logger>(
|
|
130
|
+
expectType<P.Logger>(serverWithLoggerInstance.log)
|
|
131
|
+
|
|
132
|
+
const serverWithPinoConfig = fastify({
|
|
133
|
+
logger: {
|
|
134
|
+
level: 'info',
|
|
135
|
+
serializers: {
|
|
136
|
+
req (IncomingMessage) {
|
|
137
|
+
expectType<FastifyRequest>(IncomingMessage)
|
|
138
|
+
return {
|
|
139
|
+
method: 'method',
|
|
140
|
+
url: 'url',
|
|
141
|
+
version: 'version',
|
|
142
|
+
host: 'hostname',
|
|
143
|
+
remoteAddress: 'remoteAddress',
|
|
144
|
+
remotePort: 80,
|
|
145
|
+
other: ''
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
res (ServerResponse) {
|
|
149
|
+
expectType<ResSerializerReply<Server, FastifyReply>>(ServerResponse)
|
|
150
|
+
expectAssignable<Partial<FastifyReply> & Pick<FastifyReply, 'statusCode'>>(ServerResponse)
|
|
151
|
+
expectNotAssignable<FastifyReply>(ServerResponse)
|
|
152
|
+
return {
|
|
153
|
+
statusCode: 'statusCode'
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
err (FastifyError) {
|
|
157
|
+
return {
|
|
158
|
+
other: '',
|
|
159
|
+
type: 'type',
|
|
160
|
+
message: 'msg',
|
|
161
|
+
stack: 'stack'
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
expectType<FastifyBaseLogger>(serverWithPinoConfig.log)
|
|
132
169
|
|
|
133
170
|
const serverAutoInferredFileOption = fastify({
|
|
134
171
|
logger: {
|
|
@@ -165,7 +202,7 @@ const serverAutoInferredSerializerObjectOption = fastify({
|
|
|
165
202
|
method: 'method',
|
|
166
203
|
url: 'url',
|
|
167
204
|
version: 'version',
|
|
168
|
-
|
|
205
|
+
host: 'hostname',
|
|
169
206
|
remoteAddress: 'remoteAddress',
|
|
170
207
|
remotePort: 80,
|
|
171
208
|
other: ''
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import fastify, { FastifyInstance, FastifyPluginOptions } from '../../fastify'
|
|
1
|
+
import fastify, { FastifyInstance, FastifyPluginOptions, SafePromiseLike } from '../../fastify'
|
|
2
2
|
import * as http from 'http'
|
|
3
3
|
import * as https from 'https'
|
|
4
4
|
import { expectType, expectError, expectAssignable } from 'tsd'
|
|
@@ -42,7 +42,9 @@ expectAssignable<FastifyInstance>(fastify().register(async function (instance, o
|
|
|
42
42
|
expectError(fastify().register(function (instance, opts, done) { }, { logLevel: '' })) // must use a valid logLevel
|
|
43
43
|
|
|
44
44
|
const httpsServer = fastify({ https: {} })
|
|
45
|
-
|
|
45
|
+
expectError<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & Promise<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
|
|
46
|
+
expectAssignable<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
|
|
47
|
+
expectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & SafePromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)
|
|
46
48
|
|
|
47
49
|
// Chainable
|
|
48
50
|
httpsServer
|
|
@@ -61,6 +63,7 @@ expectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWith
|
|
|
61
63
|
expectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithType, { prefix: '/test' }))
|
|
62
64
|
expectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithTypeAsync, { prefix: '/test' }))
|
|
63
65
|
|
|
66
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
64
67
|
async function testAsync (): Promise<void> {
|
|
65
68
|
await httpsServer
|
|
66
69
|
.register(testPluginOpts)
|
|
@@ -72,7 +72,7 @@ expectAssignable<ServerWithHttp2>(serverWithHttp2.register(async (instance: Serv
|
|
|
72
72
|
}))
|
|
73
73
|
|
|
74
74
|
// With Type Provider
|
|
75
|
-
type TestTypeProvider = {
|
|
75
|
+
type TestTypeProvider = { schema: 'test', validator: 'test', serializer: 'test' }
|
|
76
76
|
const serverWithTypeProvider = fastify().withTypeProvider<TestTypeProvider>()
|
|
77
77
|
type ServerWithTypeProvider = FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance, TestTypeProvider>
|
|
78
78
|
const testPluginWithTypeProvider: FastifyPluginCallback<TestOptions, RawServerDefault, TestTypeProvider> = function (instance, opts, done) { }
|
|
@@ -115,7 +115,7 @@ const customLogger = {
|
|
|
115
115
|
silent: () => { }
|
|
116
116
|
}
|
|
117
117
|
const serverWithTypeProviderAndLogger = fastify({
|
|
118
|
-
|
|
118
|
+
loggerInstance: customLogger
|
|
119
119
|
}).withTypeProvider<TestTypeProvider>()
|
|
120
120
|
type ServerWithTypeProviderAndLogger = FastifyInstance<Server, IncomingMessage, ServerResponse, typeof customLogger, TestTypeProvider>
|
|
121
121
|
const testPluginWithTypeProviderAndLogger: FastifyPluginCallback<TestOptions, RawServerDefault, TestTypeProvider, typeof customLogger> = function (instance, opts, done) { }
|