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
|
@@ -12,7 +12,7 @@ const { on } = stream
|
|
|
12
12
|
t.test('logger options', (t) => {
|
|
13
13
|
t.setTimeout(60000)
|
|
14
14
|
|
|
15
|
-
t.plan(
|
|
15
|
+
t.plan(16)
|
|
16
16
|
|
|
17
17
|
t.test('logger can be silenced', (t) => {
|
|
18
18
|
t.plan(17)
|
|
@@ -48,10 +48,10 @@ t.test('logger options', (t) => {
|
|
|
48
48
|
|
|
49
49
|
const stream = split(JSON.parse)
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
52
52
|
|
|
53
53
|
const fastify = Fastify({
|
|
54
|
-
|
|
54
|
+
loggerInstance
|
|
55
55
|
})
|
|
56
56
|
t.teardown(fastify.close.bind(fastify))
|
|
57
57
|
|
|
@@ -94,10 +94,10 @@ t.test('logger options', (t) => {
|
|
|
94
94
|
|
|
95
95
|
const stream = split(JSON.parse)
|
|
96
96
|
|
|
97
|
-
const
|
|
97
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
98
98
|
|
|
99
99
|
const fastify = Fastify({
|
|
100
|
-
|
|
100
|
+
loggerInstance
|
|
101
101
|
})
|
|
102
102
|
t.teardown(fastify.close.bind(fastify))
|
|
103
103
|
|
|
@@ -130,10 +130,10 @@ t.test('logger options', (t) => {
|
|
|
130
130
|
|
|
131
131
|
const stream = split(JSON.parse)
|
|
132
132
|
|
|
133
|
-
const
|
|
133
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
134
134
|
|
|
135
135
|
const fastify = Fastify({
|
|
136
|
-
|
|
136
|
+
loggerInstance
|
|
137
137
|
})
|
|
138
138
|
t.teardown(fastify.close.bind(fastify))
|
|
139
139
|
|
|
@@ -193,9 +193,9 @@ t.test('logger options', (t) => {
|
|
|
193
193
|
|
|
194
194
|
const stream = split(JSON.parse)
|
|
195
195
|
|
|
196
|
-
const
|
|
196
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
197
197
|
const fastify = Fastify({
|
|
198
|
-
|
|
198
|
+
loggerInstance
|
|
199
199
|
})
|
|
200
200
|
t.teardown(fastify.close.bind(fastify))
|
|
201
201
|
|
|
@@ -252,9 +252,9 @@ t.test('logger options', (t) => {
|
|
|
252
252
|
|
|
253
253
|
const stream = split(JSON.parse)
|
|
254
254
|
|
|
255
|
-
const
|
|
255
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
256
256
|
const fastify = Fastify({
|
|
257
|
-
|
|
257
|
+
loggerInstance
|
|
258
258
|
})
|
|
259
259
|
t.teardown(fastify.close.bind(fastify))
|
|
260
260
|
|
|
@@ -290,9 +290,9 @@ t.test('logger options', (t) => {
|
|
|
290
290
|
|
|
291
291
|
const stream = split(JSON.parse)
|
|
292
292
|
|
|
293
|
-
const
|
|
293
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
294
294
|
const fastify = Fastify({
|
|
295
|
-
|
|
295
|
+
loggerInstance
|
|
296
296
|
})
|
|
297
297
|
t.teardown(fastify.close.bind(fastify))
|
|
298
298
|
|
|
@@ -333,10 +333,10 @@ t.test('logger options', (t) => {
|
|
|
333
333
|
|
|
334
334
|
const stream = split(JSON.parse)
|
|
335
335
|
|
|
336
|
-
const
|
|
336
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
337
337
|
|
|
338
338
|
const fastify = Fastify({
|
|
339
|
-
|
|
339
|
+
loggerInstance
|
|
340
340
|
})
|
|
341
341
|
t.teardown(fastify.close.bind(fastify))
|
|
342
342
|
|
|
@@ -369,10 +369,10 @@ t.test('logger options', (t) => {
|
|
|
369
369
|
|
|
370
370
|
const stream = split(JSON.parse)
|
|
371
371
|
|
|
372
|
-
const
|
|
372
|
+
const loggerInstance = pino({ level: 'warn' }, stream)
|
|
373
373
|
|
|
374
374
|
const fastify = Fastify({
|
|
375
|
-
|
|
375
|
+
loggerInstance
|
|
376
376
|
})
|
|
377
377
|
t.teardown(fastify.close.bind(fastify))
|
|
378
378
|
|
|
@@ -404,10 +404,10 @@ t.test('logger options', (t) => {
|
|
|
404
404
|
|
|
405
405
|
const stream = split(JSON.parse)
|
|
406
406
|
|
|
407
|
-
const
|
|
407
|
+
const loggerInstance = pino({ level: 'warn' }, stream)
|
|
408
408
|
|
|
409
409
|
const fastify = Fastify({
|
|
410
|
-
|
|
410
|
+
loggerInstance
|
|
411
411
|
})
|
|
412
412
|
t.teardown(fastify.close.bind(fastify))
|
|
413
413
|
|
|
@@ -444,10 +444,10 @@ t.test('logger options', (t) => {
|
|
|
444
444
|
|
|
445
445
|
const stream = split(JSON.parse)
|
|
446
446
|
|
|
447
|
-
const
|
|
447
|
+
const loggerInstance = pino({ level: 'error' }, stream)
|
|
448
448
|
|
|
449
449
|
const fastify = Fastify({
|
|
450
|
-
|
|
450
|
+
loggerInstance
|
|
451
451
|
})
|
|
452
452
|
t.teardown(fastify.close.bind(fastify))
|
|
453
453
|
|
|
@@ -497,4 +497,85 @@ t.test('logger options', (t) => {
|
|
|
497
497
|
t.equal(typeof fastify.log.trace, 'function')
|
|
498
498
|
t.equal(typeof fastify.log.child, 'function')
|
|
499
499
|
})
|
|
500
|
+
|
|
501
|
+
t.test('Should throw an error if logger instance is passed to `logger`', async (t) => {
|
|
502
|
+
t.plan(2)
|
|
503
|
+
const stream = split(JSON.parse)
|
|
504
|
+
|
|
505
|
+
const logger = require('pino')(stream)
|
|
506
|
+
|
|
507
|
+
try {
|
|
508
|
+
Fastify({ logger })
|
|
509
|
+
} catch (err) {
|
|
510
|
+
t.ok(err)
|
|
511
|
+
t.equal(err.code, 'FST_ERR_LOG_INVALID_LOGGER_CONFIG')
|
|
512
|
+
}
|
|
513
|
+
})
|
|
514
|
+
|
|
515
|
+
t.test('Should throw an error if options are passed to `loggerInstance`', async (t) => {
|
|
516
|
+
t.plan(2)
|
|
517
|
+
try {
|
|
518
|
+
Fastify({ loggerInstance: { level: 'log' } })
|
|
519
|
+
} catch (err) {
|
|
520
|
+
t.ok(err)
|
|
521
|
+
t.equal(err.code, 'FST_ERR_LOG_INVALID_LOGGER_INSTANCE')
|
|
522
|
+
}
|
|
523
|
+
})
|
|
524
|
+
|
|
525
|
+
t.test('If both `loggerInstance` and `logger` are provided, an error should be thrown', async (t) => {
|
|
526
|
+
t.plan(2)
|
|
527
|
+
const loggerInstanceStream = split(JSON.parse)
|
|
528
|
+
const loggerInstance = pino({ level: 'error' }, loggerInstanceStream)
|
|
529
|
+
const loggerStream = split(JSON.parse)
|
|
530
|
+
try {
|
|
531
|
+
Fastify({
|
|
532
|
+
logger: {
|
|
533
|
+
stream: loggerStream,
|
|
534
|
+
level: 'info'
|
|
535
|
+
},
|
|
536
|
+
loggerInstance
|
|
537
|
+
})
|
|
538
|
+
} catch (err) {
|
|
539
|
+
t.ok(err)
|
|
540
|
+
t.equal(err.code, 'FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED')
|
|
541
|
+
}
|
|
542
|
+
})
|
|
543
|
+
|
|
544
|
+
t.test('`logger` should take pino configuration and create a pino logger', async (t) => {
|
|
545
|
+
const lines = ['hello', 'world']
|
|
546
|
+
t.plan(2 * lines.length + 2)
|
|
547
|
+
const loggerStream = split(JSON.parse)
|
|
548
|
+
const fastify = Fastify({
|
|
549
|
+
logger: {
|
|
550
|
+
stream: loggerStream,
|
|
551
|
+
level: 'error'
|
|
552
|
+
}
|
|
553
|
+
})
|
|
554
|
+
t.teardown(fastify.close.bind(fastify))
|
|
555
|
+
fastify.get('/hello', (req, reply) => {
|
|
556
|
+
req.log.error('hello')
|
|
557
|
+
reply.code(404).send()
|
|
558
|
+
})
|
|
559
|
+
|
|
560
|
+
fastify.get('/world', (req, reply) => {
|
|
561
|
+
req.log.error('world')
|
|
562
|
+
reply.code(201).send()
|
|
563
|
+
})
|
|
564
|
+
|
|
565
|
+
await fastify.ready()
|
|
566
|
+
{
|
|
567
|
+
const response = await fastify.inject({ method: 'GET', url: '/hello' })
|
|
568
|
+
t.equal(response.statusCode, 404)
|
|
569
|
+
}
|
|
570
|
+
{
|
|
571
|
+
const response = await fastify.inject({ method: 'GET', url: '/world' })
|
|
572
|
+
t.equal(response.statusCode, 201)
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
for await (const [line] of on(loggerStream, 'data')) {
|
|
576
|
+
t.equal(line.level, 50)
|
|
577
|
+
t.equal(line.msg, lines.shift())
|
|
578
|
+
if (lines.length === 0) break
|
|
579
|
+
}
|
|
580
|
+
})
|
|
500
581
|
})
|
|
@@ -24,9 +24,9 @@ t.test('response serialization', (t) => {
|
|
|
24
24
|
|
|
25
25
|
const stream = split(JSON.parse)
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const loggerInstance = pino({ level: 'info' }, stream)
|
|
28
28
|
const fastify = Fastify({
|
|
29
|
-
|
|
29
|
+
loggerInstance
|
|
30
30
|
})
|
|
31
31
|
t.teardown(fastify.close.bind(fastify))
|
|
32
32
|
|
|
@@ -70,7 +70,7 @@ t.test('response serialization', (t) => {
|
|
|
70
70
|
|
|
71
71
|
const stream = split(JSON.parse)
|
|
72
72
|
|
|
73
|
-
const
|
|
73
|
+
const loggerInstance = pino({
|
|
74
74
|
level: 'info',
|
|
75
75
|
serializers: {
|
|
76
76
|
test: value => 'X' + value,
|
|
@@ -78,7 +78,7 @@ t.test('response serialization', (t) => {
|
|
|
78
78
|
}
|
|
79
79
|
}, stream)
|
|
80
80
|
const fastify = Fastify({
|
|
81
|
-
|
|
81
|
+
loggerInstance
|
|
82
82
|
})
|
|
83
83
|
t.teardown(fastify.close.bind(fastify))
|
|
84
84
|
|
|
@@ -115,14 +115,14 @@ t.test('response serialization', (t) => {
|
|
|
115
115
|
|
|
116
116
|
const stream = split(JSON.parse)
|
|
117
117
|
|
|
118
|
-
const
|
|
118
|
+
const loggerInstance = pino({
|
|
119
119
|
level: 'info',
|
|
120
120
|
serializers: {
|
|
121
121
|
test: value => 'X' + value
|
|
122
122
|
}
|
|
123
123
|
}, stream)
|
|
124
124
|
|
|
125
|
-
const fastify = Fastify({
|
|
125
|
+
const fastify = Fastify({ loggerInstance })
|
|
126
126
|
t.teardown(fastify.close.bind(fastify))
|
|
127
127
|
|
|
128
128
|
fastify.register(context1, { logSerializers: { test2: value => 'Y' + value } })
|
|
@@ -2,12 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
const net = require('node:net')
|
|
4
4
|
const { test } = require('tap')
|
|
5
|
-
const semver = require('semver')
|
|
6
5
|
const Fastify = require('../fastify')
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
test('maxRequestsPerSocket on node version >= 16.10.0', { skip }, t => {
|
|
7
|
+
test('maxRequestsPerSocket', t => {
|
|
11
8
|
t.plan(8)
|
|
12
9
|
|
|
13
10
|
const fastify = Fastify({ maxRequestsPerSocket: 2 })
|
|
@@ -48,7 +45,7 @@ test('maxRequestsPerSocket on node version >= 16.10.0', { skip }, t => {
|
|
|
48
45
|
})
|
|
49
46
|
})
|
|
50
47
|
|
|
51
|
-
test('maxRequestsPerSocket zero should behave same as null',
|
|
48
|
+
test('maxRequestsPerSocket zero should behave same as null', t => {
|
|
52
49
|
t.plan(10)
|
|
53
50
|
|
|
54
51
|
const fastify = Fastify({ maxRequestsPerSocket: 0 })
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const http = require('http')
|
|
2
|
+
const { test } = require('tap')
|
|
3
|
+
const Fastify = require('../fastify')
|
|
4
|
+
|
|
5
|
+
test('missing method from http client', t => {
|
|
6
|
+
t.plan(2)
|
|
7
|
+
const fastify = Fastify()
|
|
8
|
+
|
|
9
|
+
fastify.listen({ port: 3000 }, (err) => {
|
|
10
|
+
t.error(err)
|
|
11
|
+
|
|
12
|
+
const port = fastify.server.address().port
|
|
13
|
+
const req = http.request({
|
|
14
|
+
port,
|
|
15
|
+
method: 'REBIND',
|
|
16
|
+
path: '/'
|
|
17
|
+
}, (res) => {
|
|
18
|
+
t.equal(res.statusCode, 404)
|
|
19
|
+
fastify.close()
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
req.end()
|
|
23
|
+
})
|
|
24
|
+
})
|
package/test/plugin.1.test.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const t = require('tap')
|
|
6
4
|
const test = t.test
|
|
7
5
|
const Fastify = require('../fastify')
|
|
@@ -117,8 +115,8 @@ test('fastify.register with fastify-plugin should provide access to external fas
|
|
|
117
115
|
|
|
118
116
|
instance.register((i, o, n) => n(), p => {
|
|
119
117
|
t.notOk(p === instance || p === fastify)
|
|
120
|
-
t.ok(
|
|
121
|
-
t.ok(
|
|
118
|
+
t.ok(Object.prototype.isPrototypeOf.call(instance, p))
|
|
119
|
+
t.ok(Object.prototype.isPrototypeOf.call(fastify, p))
|
|
122
120
|
t.ok(p.global)
|
|
123
121
|
})
|
|
124
122
|
|
package/test/plugin.2.test.js
CHANGED
package/test/plugin.3.test.js
CHANGED
package/test/plugin.4.test.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const t = require('tap')
|
|
6
4
|
const test = t.test
|
|
7
5
|
const Fastify = require('../fastify')
|
|
8
6
|
const fp = require('fastify-plugin')
|
|
9
7
|
const fakeTimer = require('@sinonjs/fake-timers')
|
|
8
|
+
const { FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER } = require('../lib/errors')
|
|
10
9
|
|
|
11
10
|
test('pluginTimeout', t => {
|
|
12
11
|
t.plan(5)
|
|
@@ -133,6 +132,9 @@ test('plugin metadata - version not matching requirement', t => {
|
|
|
133
132
|
test('plugin metadata - version not matching requirement 2', t => {
|
|
134
133
|
t.plan(2)
|
|
135
134
|
const fastify = Fastify()
|
|
135
|
+
Object.defineProperty(fastify, 'version', {
|
|
136
|
+
value: '99.0.0'
|
|
137
|
+
})
|
|
136
138
|
|
|
137
139
|
plugin[Symbol.for('skip-override')] = true
|
|
138
140
|
plugin[Symbol.for('plugin-meta')] = {
|
|
@@ -198,36 +200,75 @@ test('plugin metadata - release candidate', t => {
|
|
|
198
200
|
}
|
|
199
201
|
})
|
|
200
202
|
|
|
201
|
-
test('fastify-rc loads prior version plugins', t => {
|
|
202
|
-
t.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
203
|
+
test('fastify-rc loads prior version plugins', async t => {
|
|
204
|
+
t.test('baseline (rc)', t => {
|
|
205
|
+
t.plan(2)
|
|
206
|
+
|
|
207
|
+
const fastify = Fastify()
|
|
208
|
+
Object.defineProperty(fastify, 'version', {
|
|
209
|
+
value: '99.0.0-rc.1'
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
plugin[Symbol.for('plugin-meta')] = {
|
|
213
|
+
name: 'plugin',
|
|
214
|
+
fastify: '^98.1.0'
|
|
215
|
+
}
|
|
216
|
+
plugin2[Symbol.for('plugin-meta')] = {
|
|
217
|
+
name: 'plugin2',
|
|
218
|
+
fastify: '98.x'
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
fastify.register(plugin)
|
|
222
|
+
|
|
223
|
+
fastify.ready((err) => {
|
|
224
|
+
t.error(err)
|
|
225
|
+
t.pass('everything right')
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
function plugin (instance, opts, done) {
|
|
229
|
+
done()
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function plugin2 (instance, opts, done) {
|
|
233
|
+
done()
|
|
234
|
+
}
|
|
206
235
|
})
|
|
207
236
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
fastify: '^98.1.0'
|
|
211
|
-
}
|
|
212
|
-
plugin2[Symbol.for('plugin-meta')] = {
|
|
213
|
-
name: 'plugin2',
|
|
214
|
-
fastify: '98.x'
|
|
215
|
-
}
|
|
237
|
+
t.test('pre', t => {
|
|
238
|
+
t.plan(2)
|
|
216
239
|
|
|
217
|
-
|
|
240
|
+
const fastify = Fastify()
|
|
241
|
+
Object.defineProperty(fastify, 'version', { value: '99.0.0-pre.1' })
|
|
218
242
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
243
|
+
plugin[Symbol.for('plugin-meta')] = { name: 'plugin', fastify: '^98.x' }
|
|
244
|
+
|
|
245
|
+
fastify.register(plugin)
|
|
246
|
+
|
|
247
|
+
fastify.ready((err) => {
|
|
248
|
+
t.error(err)
|
|
249
|
+
t.pass()
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
function plugin (instance, opts, done) { done() }
|
|
222
253
|
})
|
|
223
254
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
255
|
+
t.test('alpha', t => {
|
|
256
|
+
t.plan(2)
|
|
227
257
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
258
|
+
const fastify = Fastify()
|
|
259
|
+
Object.defineProperty(fastify, 'version', { value: '99.0.0-pre.1' })
|
|
260
|
+
|
|
261
|
+
plugin[Symbol.for('plugin-meta')] = { name: 'plugin', fastify: '^98.x' }
|
|
262
|
+
|
|
263
|
+
fastify.register(plugin)
|
|
264
|
+
|
|
265
|
+
fastify.ready((err) => {
|
|
266
|
+
t.error(err)
|
|
267
|
+
t.pass()
|
|
268
|
+
})
|
|
269
|
+
|
|
270
|
+
function plugin (instance, opts, done) { done() }
|
|
271
|
+
})
|
|
231
272
|
})
|
|
232
273
|
|
|
233
274
|
test('hasPlugin method exists as a function', t => {
|
|
@@ -415,49 +456,44 @@ test('hasPlugin returns true when using encapsulation', async t => {
|
|
|
415
456
|
await fastify.ready()
|
|
416
457
|
})
|
|
417
458
|
|
|
418
|
-
test('registering
|
|
419
|
-
t.plan(
|
|
420
|
-
|
|
421
|
-
const pluginNames = ['error-plugin', 'anonymous', 'anotherPlugin', 'anotherPluginNamed']
|
|
422
|
-
|
|
423
|
-
const oldWarnings = process.listeners('warning')
|
|
424
|
-
process.removeAllListeners('warning')
|
|
425
|
-
process.on('warning', onWarning)
|
|
426
|
-
function onWarning (warning) {
|
|
427
|
-
t.match(warning.message, new RegExp(`.*${pluginNames.shift()} plugin being registered mixes async and callback styles.*`))
|
|
428
|
-
t.equal(warning.name, 'FastifyWarning')
|
|
429
|
-
t.equal(warning.code, 'FSTWRN002')
|
|
430
|
-
}
|
|
431
|
-
t.teardown(() => {
|
|
432
|
-
process.removeListener('warning', onWarning)
|
|
433
|
-
for (const warning of oldWarnings) {
|
|
434
|
-
process.on('warning', warning)
|
|
435
|
-
}
|
|
436
|
-
})
|
|
459
|
+
test('registering anonymous plugin with mixed style should throw', async t => {
|
|
460
|
+
t.plan(2)
|
|
437
461
|
|
|
438
462
|
const fastify = Fastify()
|
|
439
463
|
|
|
440
|
-
const
|
|
441
|
-
const errorPlugin = async (app, opts, done) => {
|
|
464
|
+
const anonymousPlugin = async (app, opts, done) => {
|
|
442
465
|
done()
|
|
443
466
|
}
|
|
444
467
|
|
|
445
|
-
|
|
468
|
+
fastify.register(anonymousPlugin)
|
|
446
469
|
|
|
447
|
-
|
|
448
|
-
|
|
470
|
+
try {
|
|
471
|
+
await fastify.ready()
|
|
472
|
+
t.fail('should throw')
|
|
473
|
+
} catch (error) {
|
|
474
|
+
t.type(error, FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER)
|
|
475
|
+
t.equal(error.message, 'The anonymousPlugin plugin being registered mixes async and callback styles. Async plugin should not mix async and callback style.')
|
|
449
476
|
}
|
|
477
|
+
})
|
|
478
|
+
|
|
479
|
+
test('registering named plugin with mixed style should throw', async t => {
|
|
480
|
+
t.plan(2)
|
|
481
|
+
|
|
482
|
+
const fastify = Fastify()
|
|
450
483
|
|
|
451
|
-
const
|
|
484
|
+
const pluginName = 'error-plugin'
|
|
485
|
+
const errorPlugin = async (app, opts, done) => {
|
|
452
486
|
done()
|
|
453
487
|
}
|
|
488
|
+
const namedPlugin = fp(errorPlugin, { name: pluginName })
|
|
454
489
|
|
|
455
490
|
fastify.register(namedPlugin)
|
|
456
|
-
fastify.register(async (app, opts, done) => {
|
|
457
|
-
done()
|
|
458
|
-
})
|
|
459
|
-
fastify.register(anotherPlugin)
|
|
460
|
-
fastify.register(anotherPluginNamed)
|
|
461
491
|
|
|
462
|
-
|
|
492
|
+
try {
|
|
493
|
+
await fastify.ready()
|
|
494
|
+
t.fail('should throw')
|
|
495
|
+
} catch (error) {
|
|
496
|
+
t.type(error, FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER)
|
|
497
|
+
t.equal(error.message, 'The error-plugin plugin being registered mixes async and callback styles. Async plugin should not mix async and callback style.')
|
|
498
|
+
}
|
|
463
499
|
})
|
package/test/register.test.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const t = require('tap')
|
|
6
4
|
const test = t.test
|
|
7
5
|
const sget = require('simple-get').concat
|
|
@@ -14,7 +12,7 @@ test('register', t => {
|
|
|
14
12
|
|
|
15
13
|
fastify.register(function (instance, opts, done) {
|
|
16
14
|
t.not(instance, fastify)
|
|
17
|
-
t.ok(
|
|
15
|
+
t.ok(Object.prototype.isPrototypeOf.call(fastify, instance))
|
|
18
16
|
|
|
19
17
|
t.equal(typeof opts, 'object')
|
|
20
18
|
t.equal(typeof done, 'function')
|
|
@@ -27,7 +25,7 @@ test('register', t => {
|
|
|
27
25
|
|
|
28
26
|
fastify.register(function (instance, opts, done) {
|
|
29
27
|
t.not(instance, fastify)
|
|
30
|
-
t.ok(
|
|
28
|
+
t.ok(Object.prototype.isPrototypeOf.call(fastify, instance))
|
|
31
29
|
|
|
32
30
|
t.equal(typeof opts, 'object')
|
|
33
31
|
t.equal(typeof done, 'function')
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const Fastify = require('..')
|
|
4
|
+
const { test } = require('tap')
|
|
5
|
+
const http = require('http')
|
|
6
|
+
const http2 = require('http2')
|
|
7
|
+
|
|
8
|
+
const testResBody = 'Hello, world!'
|
|
9
|
+
|
|
10
|
+
test('sends early hints', (t) => {
|
|
11
|
+
t.plan(6)
|
|
12
|
+
|
|
13
|
+
const fastify = Fastify({
|
|
14
|
+
logger: false
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
fastify.get('/', async (request, reply) => {
|
|
18
|
+
reply.writeEarlyHints({
|
|
19
|
+
link: '</styles.css>; rel=preload; as=style'
|
|
20
|
+
}, () => {
|
|
21
|
+
t.pass('callback called')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
return testResBody
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
fastify.listen({ port: 0 }, (err, address) => {
|
|
28
|
+
t.error(err)
|
|
29
|
+
|
|
30
|
+
const req = http.get(address)
|
|
31
|
+
|
|
32
|
+
req.on('information', (res) => {
|
|
33
|
+
t.equal(res.statusCode, 103)
|
|
34
|
+
t.equal(res.headers.link, '</styles.css>; rel=preload; as=style')
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
req.on('response', (res) => {
|
|
38
|
+
t.equal(res.statusCode, 200)
|
|
39
|
+
|
|
40
|
+
let data = ''
|
|
41
|
+
res.on('data', (chunk) => {
|
|
42
|
+
data += chunk
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
res.on('end', () => {
|
|
46
|
+
t.equal(data, testResBody)
|
|
47
|
+
fastify.close(t.end)
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('sends early hints (http2)', (t) => {
|
|
54
|
+
t.plan(6)
|
|
55
|
+
|
|
56
|
+
const fastify = Fastify({
|
|
57
|
+
http2: true,
|
|
58
|
+
logger: false
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
fastify.get('/', async (request, reply) => {
|
|
62
|
+
reply.writeEarlyHints({
|
|
63
|
+
link: '</styles.css>; rel=preload; as=style'
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
return testResBody
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
fastify.listen({ port: 0 }, (err, address) => {
|
|
70
|
+
t.error(err)
|
|
71
|
+
|
|
72
|
+
const client = http2.connect(address)
|
|
73
|
+
const req = client.request()
|
|
74
|
+
|
|
75
|
+
req.on('headers', (headers) => {
|
|
76
|
+
t.not(headers, undefined)
|
|
77
|
+
t.equal(headers[':status'], 103)
|
|
78
|
+
t.equal(headers.link, '</styles.css>; rel=preload; as=style')
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
req.on('response', (headers) => {
|
|
82
|
+
t.equal(headers[':status'], 200)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
let data = ''
|
|
86
|
+
req.on('data', (chunk) => {
|
|
87
|
+
data += chunk
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
req.on('end', () => {
|
|
91
|
+
t.equal(data, testResBody)
|
|
92
|
+
client.close()
|
|
93
|
+
fastify.close(t.end)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
req.end()
|
|
97
|
+
})
|
|
98
|
+
})
|
package/test/reply-error.test.js
CHANGED
|
@@ -603,7 +603,6 @@ test('error handler is triggered when a string is thrown from sync handler', t =
|
|
|
603
603
|
const payload = 'error'
|
|
604
604
|
|
|
605
605
|
fastify.get('/', function (req, reply) {
|
|
606
|
-
// eslint-disable-next-line no-throw-literal
|
|
607
606
|
throw throwable
|
|
608
607
|
})
|
|
609
608
|
|
|
@@ -666,7 +665,6 @@ test('should trigger error handlers if a sync route throws any non-error object'
|
|
|
666
665
|
const payload = 'error'
|
|
667
666
|
|
|
668
667
|
fastify.get('/', function async (req, reply) {
|
|
669
|
-
// eslint-disable-next-line no-throw-literal
|
|
670
668
|
throw throwable
|
|
671
669
|
})
|
|
672
670
|
|