fastify 4.28.0 → 5.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/fastify.iml +12 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/jsLinters/eslint.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.markdownlint-cli2.yaml +1 -1
- package/.taprc +4 -8
- package/README.md +3 -6
- package/build/build-error-serializer.js +4 -1
- package/build/build-validation.js +5 -4
- package/docs/Guides/Database.md +1 -1
- package/docs/Guides/Delay-Accepting-Requests.md +3 -3
- package/docs/Guides/Ecosystem.md +2 -0
- package/docs/Guides/Migration-Guide-V5.md +20 -0
- package/docs/Guides/Write-Type-Provider.md +4 -2
- package/docs/Reference/ContentTypeParser.md +30 -1
- package/docs/Reference/Decorators.md +42 -16
- package/docs/Reference/Errors.md +10 -2
- package/docs/Reference/Hooks.md +48 -14
- package/docs/Reference/Logging.md +5 -5
- package/docs/Reference/Reply.md +23 -18
- package/docs/Reference/Request.md +5 -1
- package/docs/Reference/Routes.md +24 -28
- package/docs/Reference/Server.md +14 -53
- package/docs/Reference/Type-Providers.md +21 -26
- package/docs/Reference/TypeScript.md +46 -29
- package/docs/Reference/Warnings.md +0 -8
- package/eslint.config.js +27 -0
- package/examples/typescript-server.ts +14 -14
- package/fastify.d.ts +15 -14
- package/fastify.js +41 -15
- package/lib/configValidator.js +94 -76
- package/lib/contentTypeParser.js +54 -88
- package/lib/decorate.js +3 -7
- package/lib/error-serializer.js +2 -1
- package/lib/errors.js +31 -6
- package/lib/handleRequest.js +70 -39
- package/lib/httpMethods.js +34 -18
- package/lib/logger.js +24 -6
- package/lib/pluginUtils.js +5 -5
- package/lib/reply.js +7 -10
- package/lib/request.js +37 -19
- package/lib/route.js +6 -34
- package/lib/server.js +62 -123
- package/lib/warnings.js +24 -29
- package/lib/wrapThenable.js +46 -22
- package/package.json +38 -58
- package/test/404s.test.js +8 -12
- package/test/async-await.test.js +46 -2
- package/test/build/error-serializer.test.js +4 -2
- package/test/check.test.js +225 -0
- package/test/close-pipelining.test.js +2 -41
- package/test/close.test.js +1 -41
- package/test/content-parser.test.js +69 -117
- package/test/custom-parser.1.test.js +40 -1
- package/test/decorator-namespace.test._js_ +31 -0
- package/test/decorator.test.js +92 -43
- package/test/delete.test.js +21 -1
- package/test/diagnostics-channel/404.test.js +57 -0
- package/test/diagnostics-channel/async-delay-request.test.js +74 -0
- package/test/diagnostics-channel/async-request.test.js +72 -0
- package/test/diagnostics-channel/error-before-handler.test.js +36 -0
- package/test/diagnostics-channel/error-request.test.js +61 -0
- package/test/diagnostics-channel/error-status.test.js +39 -0
- package/test/{diagnostics-channel.test.js → diagnostics-channel/init.test.js} +6 -16
- package/test/diagnostics-channel/sync-delay-request.test.js +58 -0
- package/test/diagnostics-channel/sync-request-reply.test.js +58 -0
- package/test/diagnostics-channel/sync-request.test.js +61 -0
- package/test/encapsulated-error-handler.test.js +201 -14
- package/test/esm/index.test.js +2 -12
- package/test/findRoute.test.js +16 -0
- package/test/genReqId.test.js +9 -0
- package/test/get.test.js +28 -0
- package/test/has-route.test.js +1 -1
- package/test/helper.js +1 -5
- package/test/hooks.test.js +0 -4
- package/test/http2/constraint.test.js +22 -1
- package/test/http2/plain.test.js +21 -6
- package/test/http2/secure.test.js +12 -1
- package/test/https/https.test.js +57 -0
- package/test/inject.test.js +1 -2
- package/test/internals/decorator.test.js +0 -2
- package/test/internals/errors.test.js +57 -17
- package/test/internals/handleRequest.test.js +5 -1
- package/test/internals/initialConfig.test.js +5 -5
- package/test/internals/logger.test.js +31 -2
- package/test/internals/reply.test.js +6 -78
- package/test/internals/request.test.js +13 -11
- package/test/listen.1.test.js +5 -15
- package/test/listen.5.test.js +99 -0
- package/test/logger/instantiation.test.js +8 -8
- package/test/logger/logging.test.js +4 -4
- package/test/logger/options.test.js +102 -21
- package/test/logger/response.test.js +6 -6
- package/test/maxRequestsPerSocket.test.js +2 -5
- package/test/method-missing.test.js +24 -0
- package/test/plugin.1.test.js +2 -4
- package/test/plugin.2.test.js +0 -2
- package/test/plugin.3.test.js +0 -2
- package/test/plugin.4.test.js +92 -56
- package/test/register.test.js +2 -4
- package/test/reply-earlyHints.test.js +98 -0
- package/test/reply-error.test.js +0 -2
- package/test/route-hooks.test.js +0 -1
- package/test/route-shorthand.test.js +60 -0
- package/test/schema-special-usage.test.js +1 -1
- package/test/server.test.js +17 -2
- package/test/stream.2.test.js +1 -1
- package/test/stream.4.test.js +0 -42
- package/test/stream.5.test.js +2 -2
- package/test/trust-proxy.test.js +33 -27
- package/test/types/errors.test-d.ts +0 -2
- package/test/types/fastify.test-d.ts +14 -12
- package/test/types/hooks.test-d.ts +1 -0
- package/test/types/import.ts +1 -0
- package/test/types/instance.test-d.ts +10 -51
- package/test/types/logger.test-d.ts +43 -6
- package/test/types/plugin.test-d.ts +5 -2
- package/test/types/register.test-d.ts +2 -2
- package/test/types/reply.test-d.ts +13 -12
- package/test/types/request.test-d.ts +19 -8
- package/test/types/route.test-d.ts +30 -2
- package/test/types/schema.test-d.ts +2 -2
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +59 -12
- package/test/types/using.test-d.ts +4 -1
- package/test/url-rewriting.test.js +3 -2
- package/test/useSemicolonDelimiter.test.js +3 -6
- package/test/versioned-routes.test.js +1 -1
- package/test/web-api.test.js +0 -6
- package/types/content-type-parser.d.ts +3 -3
- package/types/context.d.ts +0 -1
- package/types/errors.d.ts +1 -0
- package/types/hooks.d.ts +6 -6
- package/types/instance.d.ts +28 -41
- package/types/logger.d.ts +3 -3
- package/types/plugin.d.ts +3 -3
- package/types/reply.d.ts +9 -12
- package/types/request.d.ts +5 -3
- package/types/route.d.ts +31 -31
- package/types/schema.d.ts +3 -3
- package/types/serverFactory.d.ts +2 -2
- package/types/type-provider.d.ts +22 -12
- package/types/utils.d.ts +18 -23
- package/.c8rc.json +0 -8
- package/.eslintrc +0 -4
- package/.tap/processinfo/029eb7a1-1942-40bc-98e2-cef3b7a14b5e.json +0 -268
- package/.tap/processinfo/03c196c6-01c3-4268-a9b5-298dff18a873.json +0 -269
- package/.tap/processinfo/04bbabba-8611-4908-9092-dfa9fcc13327.json +0 -268
- package/.tap/processinfo/05d8a743-3edf-4e2d-ae5a-dc99d0855ba5.json +0 -272
- package/.tap/processinfo/07718963-36a8-4d87-82ad-366c877a5247.json +0 -268
- package/.tap/processinfo/08fe3bde-5814-4308-9158-cdf1e47391b7.json +0 -268
- package/.tap/processinfo/0a3e3fb0-eabf-4532-ae80-20434da22678.json +0 -268
- package/.tap/processinfo/0caf2a75-4b3a-46c4-9b41-c7e450e5e15f.json +0 -268
- package/.tap/processinfo/0cf35d52-e5b2-4884-bcf0-b0ab3017b689.json +0 -268
- package/.tap/processinfo/0e666134-5013-4ecd-9ee6-59b22716c39c.json +0 -268
- package/.tap/processinfo/1087b811-4ec4-4f91-92b4-a78a51a437de.json +0 -268
- package/.tap/processinfo/13709ed3-b68c-42cf-8472-b0c4b8a89d2b.json +0 -268
- package/.tap/processinfo/13ac2f18-d0e0-439f-bc86-2ff0119af857.json +0 -268
- package/.tap/processinfo/13e47e0e-f6e8-4381-8a42-923b661f4a4f.json +0 -268
- package/.tap/processinfo/143f7d43-b8e8-4666-b482-f28fb37160ee.json +0 -268
- package/.tap/processinfo/14f3801d-03ab-4db3-9df5-c5d47e0a8cf0.json +0 -270
- package/.tap/processinfo/15a07dad-4bcd-442c-95e0-30c31f2b9818.json +0 -273
- package/.tap/processinfo/191ad3ad-04d8-4fb9-b119-ad2811f9b925.json +0 -243
- package/.tap/processinfo/1b25d54b-62d3-44cd-b581-31e705522fae.json +0 -268
- package/.tap/processinfo/1b7cb260-f04b-4135-a4fe-093081c4706f.json +0 -268
- package/.tap/processinfo/1e395d63-4815-4c77-aa47-df3709cc0ef9.json +0 -268
- package/.tap/processinfo/1e7f6a54-3abf-4771-863a-585cba110aec.json +0 -268
- package/.tap/processinfo/21a15e1d-0b41-47d8-b03d-0ba130969034.json +0 -244
- package/.tap/processinfo/21e02016-9ecd-4983-8417-9c74d224644f.json +0 -269
- package/.tap/processinfo/2327d941-d0d5-4762-b386-02a9a27ad28e.json +0 -268
- package/.tap/processinfo/23d39204-eac9-4f57-8db4-ffa996227fbd.json +0 -268
- package/.tap/processinfo/2493875a-0ac6-4d53-993c-f44471fd0678.json +0 -268
- package/.tap/processinfo/2698669f-f1e7-4a12-a687-8d58177be2b0.json +0 -269
- package/.tap/processinfo/2862b053-0a3d-46d7-9381-ffcb06287609.json +0 -268
- package/.tap/processinfo/2ac1b8d6-ac92-40e2-a59a-7681069f487c.json +0 -268
- package/.tap/processinfo/2c75e5f7-c4ef-47e4-a1c4-105eef6c0fab.json +0 -242
- package/.tap/processinfo/2e2c45cd-718b-4e5a-bf88-f801630f2803.json +0 -268
- package/.tap/processinfo/2f9ca478-3e03-4cce-a0bc-fcdc86d7c316.json +0 -268
- package/.tap/processinfo/30e3117f-fb74-456f-8f02-527e9eb9fcc3.json +0 -268
- package/.tap/processinfo/332be679-63c7-4b49-8b87-ef55995ada2d.json +0 -268
- package/.tap/processinfo/37c36f95-07f9-4ef0-8ab4-9e107d51b605.json +0 -269
- package/.tap/processinfo/3874eae2-f3db-44ef-9a9f-c8169d4b2b76.json +0 -268
- package/.tap/processinfo/38a7c3da-a411-41d0-8993-9deefd23500d.json +0 -268
- package/.tap/processinfo/3a7b6dbd-e153-4ce5-b557-21fb82009983.json +0 -269
- package/.tap/processinfo/3c6731ec-936d-470f-b7b0-0c87b54be051.json +0 -268
- package/.tap/processinfo/3c850ea9-4ef0-4044-a3fd-fbadfa9d543e.json +0 -268
- package/.tap/processinfo/3e4e15e0-a325-46f0-be57-5fd374560b7a.json +0 -269
- package/.tap/processinfo/3ed868e0-887c-402a-9f22-b1fdb74b4da0.json +0 -268
- package/.tap/processinfo/405498d7-5854-4ce1-a7dc-06920932f26d.json +0 -268
- package/.tap/processinfo/40b7eb19-ae35-4490-8a11-eb91a573c590.json +0 -268
- package/.tap/processinfo/40bb1260-d856-4248-8939-a0a05e322041.json +0 -268
- package/.tap/processinfo/41252e0b-7f69-44cc-b356-dd94bcbfdb29.json +0 -268
- package/.tap/processinfo/418fa710-e2fd-4508-b533-c179958da464.json +0 -269
- package/.tap/processinfo/433ef009-63aa-48fe-8e5d-c725228fa2fc.json +0 -268
- package/.tap/processinfo/44bf577c-9c01-4197-bd29-2e1ae888c4d4.json +0 -268
- package/.tap/processinfo/458fb7f2-20b9-48a2-8853-403c9851f605.json +0 -268
- package/.tap/processinfo/46b9892b-bb23-4b86-b0fa-9297f08c611a.json +0 -268
- package/.tap/processinfo/46bd9aaf-6cf3-4bd5-b90d-e136a7299a8e.json +0 -268
- package/.tap/processinfo/4779aa5f-e57a-4fcc-87e2-7d0bd4fca27f.json +0 -268
- package/.tap/processinfo/47b73f4b-ab31-49e1-97fd-8436dbe4bdf3.json +0 -269
- package/.tap/processinfo/49dba52e-e0c9-445d-8e9d-6d9ebe3ce6c4.json +0 -268
- package/.tap/processinfo/4b1dbc61-4e65-4c56-9784-2036f369038a.json +0 -268
- package/.tap/processinfo/4b6f0b40-43ef-4668-83a0-e07e28509df5.json +0 -268
- package/.tap/processinfo/4c236f70-f532-460b-8f7a-dd973301d493.json +0 -268
- package/.tap/processinfo/4d92b707-a268-48b8-885b-004d3a288c41.json +0 -269
- package/.tap/processinfo/4ff10bae-7c97-4c0a-b712-6c0d2f8c0e8e.json +0 -270
- package/.tap/processinfo/50f95bd5-ae12-4d83-99f4-ae9b0690c6a8.json +0 -268
- package/.tap/processinfo/557e4a49-d99c-4a63-b2f2-f33d897ab874.json +0 -268
- package/.tap/processinfo/589fd21a-8319-4abf-8cf7-82cb4a463a4b.json +0 -269
- package/.tap/processinfo/5a872f3a-949f-40be-8004-d739d034255c.json +0 -272
- package/.tap/processinfo/5abc301a-23da-424d-891e-3afbaff9156c.json +0 -269
- package/.tap/processinfo/5c31614c-a766-4837-ab59-dd6977166f72.json +0 -253
- package/.tap/processinfo/5d1e90c8-d819-4901-b022-f9ea4cd81978.json +0 -268
- package/.tap/processinfo/5d283e67-f31d-4fa8-a559-a1d8e82ee046.json +0 -269
- package/.tap/processinfo/5df505bc-6a4b-4c41-822f-51e2d7111de8.json +0 -268
- package/.tap/processinfo/5eaf64a2-fbfd-40e7-b391-c30f744b2bf1.json +0 -269
- package/.tap/processinfo/5ef5ede0-6436-4938-8401-d32ad4bffd5d.json +0 -268
- package/.tap/processinfo/606f05c0-8293-41db-bc92-eea82123697f.json +0 -269
- package/.tap/processinfo/6446806d-6cab-4c1d-a9ed-6bccaf3c4ea9.json +0 -268
- package/.tap/processinfo/64da7e08-925d-444d-98de-6568c6115d8d.json +0 -269
- package/.tap/processinfo/6917da6d-d2dc-466a-a893-7fb7412dde96.json +0 -268
- package/.tap/processinfo/69bbeee0-c398-4ccf-98b3-fb625a63bab4.json +0 -268
- package/.tap/processinfo/6da6ea8f-3370-4703-b230-90159531f766.json +0 -268
- package/.tap/processinfo/6ecffe1f-3016-4c11-9294-b488baced99f.json +0 -268
- package/.tap/processinfo/6f23f41f-ccbd-48cb-9ab6-311db0cfb65c.json +0 -270
- package/.tap/processinfo/70168912-9bb2-4334-bb89-041f1764cddf.json +0 -268
- package/.tap/processinfo/713a674e-40e1-46b4-866e-949d57c1a9f9.json +0 -270
- package/.tap/processinfo/730254d4-eacb-4cdf-80f4-8da22341cde5.json +0 -268
- package/.tap/processinfo/7344e559-c546-416f-8f1b-0f9fe12c6f02.json +0 -268
- package/.tap/processinfo/7556217a-0155-448f-b4d4-bec1bb0f6040.json +0 -269
- package/.tap/processinfo/7572079c-166c-4c4c-85ff-89b9430b214f.json +0 -268
- package/.tap/processinfo/7808180f-1974-47cd-bba2-2d6b8b711d65.json +0 -273
- package/.tap/processinfo/796dde83-da66-4db2-8d27-d45a3627c9c7.json +0 -268
- package/.tap/processinfo/7979819f-3723-48be-9f55-be700e689441.json +0 -270
- package/.tap/processinfo/7a664d39-d7f5-42f9-89df-15563048fab6.json +0 -268
- package/.tap/processinfo/7b047b72-01d9-4217-857c-93341651b4b3.json +0 -269
- package/.tap/processinfo/7ce41af6-7961-45ae-8c6f-b6e1c5692a48.json +0 -268
- package/.tap/processinfo/7e1de1c6-127e-463d-9357-081ee33ef5ce.json +0 -269
- package/.tap/processinfo/81ac7a7f-b0c0-4ef6-82cb-c718ea84e152.json +0 -268
- package/.tap/processinfo/851a058f-a497-4b10-a0b7-c9182d9c4d5a.json +0 -268
- package/.tap/processinfo/86502974-c245-4194-ade4-d9c6fdbb757e.json +0 -268
- package/.tap/processinfo/86b9786f-4a98-43b8-882a-5f936b876f08.json +0 -241
- package/.tap/processinfo/8a3fe726-86ab-4300-8d73-7eacbbc02a05.json +0 -268
- package/.tap/processinfo/8adf928b-c963-4ba0-9c35-606fcbd8a2aa.json +0 -272
- package/.tap/processinfo/8b31a6d8-1a33-4a27-93ca-1c5b364be068.json +0 -240
- package/.tap/processinfo/8ec12773-6b18-49a2-8e52-874c797df965.json +0 -833
- package/.tap/processinfo/8edb9502-3420-42fb-a602-e5de93be2df1.json +0 -268
- package/.tap/processinfo/8fc572e6-9828-4f98-a49c-9e081b2193c4.json +0 -242
- package/.tap/processinfo/8fee2d30-c5dd-4fae-9cf2-2ef8dd0f90de.json +0 -834
- package/.tap/processinfo/92cc0496-5f26-4370-8212-18136b972f99.json +0 -268
- package/.tap/processinfo/93a3f064-3f6e-4f49-becb-f7925f2961a9.json +0 -268
- package/.tap/processinfo/967e3697-8310-4a19-8dd5-927ac8bd6c79.json +0 -269
- package/.tap/processinfo/97225e23-9d30-4287-b3f5-72bccebec50b.json +0 -268
- package/.tap/processinfo/9a363bc6-4e65-47e8-94ca-26a9db428fb4.json +0 -268
- package/.tap/processinfo/9d2fe462-57fa-43f1-b02c-d188f15de30b.json +0 -270
- package/.tap/processinfo/a00b6cda-feb7-4b8a-8179-4c43bc29d670.json +0 -269
- package/.tap/processinfo/a017cbd5-4ac7-49e1-8c77-1bf4f6e7f2a6.json +0 -271
- package/.tap/processinfo/a1277309-1984-48f8-b60b-f5e8639736be.json +0 -271
- package/.tap/processinfo/a16bf53e-4337-48ff-88fa-67f55738e0f5.json +0 -268
- package/.tap/processinfo/a3a9848f-440e-41bb-9b0b-568bcfee0ddc.json +0 -268
- package/.tap/processinfo/a468c11f-f2f1-4e92-9ba0-6d28b6569b72.json +0 -268
- package/.tap/processinfo/a5880465-68f1-46b3-84a5-0da389d0bc67.json +0 -268
- package/.tap/processinfo/a666f394-39b4-44ad-8e74-abebf74dde3b.json +0 -270
- package/.tap/processinfo/af09d8ca-7053-4410-b514-b22c47f5979f.json +0 -268
- package/.tap/processinfo/af203309-28aa-459d-a56e-d88833695521.json +0 -268
- package/.tap/processinfo/afa2f7b6-dcd2-4d90-bf3c-54ba8b6800eb.json +0 -268
- package/.tap/processinfo/b231291d-ef14-4ff0-85f9-38a73a5408f8.json +0 -268
- package/.tap/processinfo/b3d3f2a1-a9fc-4d88-b122-fae90248cd59.json +0 -268
- package/.tap/processinfo/b834bf83-26c4-403a-8e91-eb15fe4b0b5d.json +0 -268
- package/.tap/processinfo/b8786fd7-47df-4ac1-8d6f-2d4c7623c681.json +0 -268
- package/.tap/processinfo/b9758f53-7f5a-4b03-8684-8a42ad644e5a.json +0 -268
- package/.tap/processinfo/bd194ea2-a21a-4604-b225-ee48abf1e607.json +0 -242
- package/.tap/processinfo/bd7ced53-3872-43b7-ad73-3352e50b728b.json +0 -268
- package/.tap/processinfo/be50295b-7e50-46cd-8bf1-637bf222699c.json +0 -268
- package/.tap/processinfo/bec61dd9-aa52-4e6c-8e37-5c9c10e935fd.json +0 -268
- package/.tap/processinfo/c015adf9-1d60-447e-87b5-b2031fe55bba.json +0 -268
- package/.tap/processinfo/c0666afa-7f64-45bd-97fb-145df1380157.json +0 -268
- package/.tap/processinfo/c2c0c012-c1c0-4457-84d6-dadba8396c94.json +0 -268
- package/.tap/processinfo/c3dd3ecd-737b-47ce-a917-54341c7bbed3.json +0 -268
- package/.tap/processinfo/c41ac06d-64b8-4bb3-bf56-0551f5a48f4b.json +0 -268
- package/.tap/processinfo/c4235bfb-a2aa-4271-9c6b-3ceb370219b1.json +0 -268
- package/.tap/processinfo/c4e6f24f-288c-493c-b6f0-02924aeb6758.json +0 -270
- package/.tap/processinfo/c54227bb-4a7b-40bb-bfe6-b54fe55078f3.json +0 -268
- package/.tap/processinfo/c699de91-3b0b-4466-9418-6910a3eb640a.json +0 -269
- package/.tap/processinfo/c74e2f37-451a-4577-ac18-e597fbd9a1d4.json +0 -269
- package/.tap/processinfo/c90cccec-5b4b-445f-a935-ac22859675d0.json +0 -252
- package/.tap/processinfo/c9dd6c7d-0d16-45e5-87ae-117388bf2994.json +0 -268
- package/.tap/processinfo/ca2e48fb-58c5-47fc-ad2e-263838aea42c.json +0 -272
- package/.tap/processinfo/ca87351d-c710-45c1-838a-16bccac59874.json +0 -273
- package/.tap/processinfo/cdb4a671-5776-4944-91b9-c456c58841ef.json +0 -268
- package/.tap/processinfo/cf10fdc8-6a87-447a-9e12-45f447af61f3.json +0 -244
- package/.tap/processinfo/cf3f1f08-643e-4f24-82ca-40f7a349c3d1.json +0 -268
- package/.tap/processinfo/d091172a-06a5-469b-82a9-8fefe3dd99da.json +0 -240
- package/.tap/processinfo/d1675431-61d6-45f8-a010-6e654112a00a.json +0 -272
- package/.tap/processinfo/d2d54aa2-c221-4ad4-b6b7-0c58e3c3679c.json +0 -269
- package/.tap/processinfo/d4f3c95a-ddbe-419d-bce0-dd6acceee21f.json +0 -268
- package/.tap/processinfo/d54ed8f1-43c3-478a-90d3-2c8aced723f2.json +0 -269
- package/.tap/processinfo/d6e5a2a6-4647-4d98-916c-aec4ace54a65.json +0 -268
- package/.tap/processinfo/d7280c64-45e6-4b12-affc-3ac9a5d4014a.json +0 -268
- package/.tap/processinfo/d82c8367-d825-4405-88df-07298f6ef840.json +0 -269
- package/.tap/processinfo/d8f97e53-e921-4d33-9c8d-2f7e807a9425.json +0 -268
- package/.tap/processinfo/da546a73-9714-4f8c-bdbb-e42730edbcfa.json +0 -268
- package/.tap/processinfo/da7fb7fb-1da4-49f8-a3ee-d4ea623c01a5.json +0 -268
- package/.tap/processinfo/daa6a016-4f0c-4050-923c-2022e0bb21d8.json +0 -268
- package/.tap/processinfo/db9a251d-8540-4719-b464-e7d5febd97d1.json +0 -240
- package/.tap/processinfo/dc10c603-8e58-4611-baa3-44da2578d07a.json +0 -268
- package/.tap/processinfo/dde56c1a-858c-47cc-b0bb-61279620ac17.json +0 -268
- package/.tap/processinfo/e0d9c4ea-f7c7-4c64-8ced-66dc6f0ac5d2.json +0 -271
- package/.tap/processinfo/e121454f-5dfa-4209-ba15-4c39840871f2.json +0 -831
- package/.tap/processinfo/e1f43e40-c3fe-4eb8-a713-d5910cc6b25a.json +0 -268
- package/.tap/processinfo/e4575e7a-f00e-488b-94e1-8f877b54725e.json +0 -268
- package/.tap/processinfo/e9ad667e-8603-4488-af64-449cc9532803.json +0 -268
- package/.tap/processinfo/eb26a697-e5e2-4730-aeea-bcb9c49afd4d.json +0 -268
- package/.tap/processinfo/eb29d1c3-feaf-4744-9d84-cf257e8269b0.json +0 -268
- package/.tap/processinfo/ee720c0a-ed64-4e7e-8c0a-139c7b9725d2.json +0 -268
- package/.tap/processinfo/ef88c13a-87b2-49e4-a683-7b812505cd6f.json +0 -268
- package/.tap/processinfo/f4ed6948-dac0-4128-9f86-d083b6918ea7.json +0 -268
- package/.tap/processinfo/f7544c01-8ac7-4e42-8ad5-c4d62e094d1f.json +0 -270
- package/.tap/processinfo/f7cee4b3-7bcc-4591-a628-5629b0b41c9e.json +0 -268
- package/.tap/processinfo/f9c0a1f7-c1a4-44d3-ae3f-8c1eb42cd746.json +0 -269
- package/.tap/processinfo/fc46b4da-79db-4201-af7e-34bb17f92d69.json +0 -270
- package/.tap/processinfo/fccc0056-03c4-40cb-9d0b-2db4bbe573c1.json +0 -268
- package/.tap/processinfo/fd2df572-54d7-4ce7-b7aa-a2b4b00d4127.json +0 -254
- package/.tap/processinfo/fea9377f-b473-484d-bee6-ac7f49e50937.json +0 -269
- package/.tap/processinfo/feb516dc-abda-46e6-9b42-d37adfc63366.json +0 -268
- package/.tap/processinfo/ff0fda4c-aa2e-4236-906e-fdfb6bd6632e.json +0 -269
- package/.tap/test-results/test/404s.test.js.tap +0 -623
- package/.tap/test-results/test/500s.test.js.tap +0 -64
- package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +0 -36
- package/.tap/test-results/test/als.test.js.tap +0 -15
- package/.tap/test-results/test/async-await.test.js.tap +0 -184
- package/.tap/test-results/test/async-dispose.test.js.tap +0 -8
- package/.tap/test-results/test/async_hooks.test.js.tap +0 -10
- package/.tap/test-results/test/bodyLimit.test.js.tap +0 -48
- package/.tap/test-results/test/buffer.test.js.tap +0 -20
- package/.tap/test-results/test/build/error-serializer.test.js.tap +0 -8
- package/.tap/test-results/test/build/version.test.js.tap +0 -7
- package/.tap/test-results/test/case-insensitive.test.js.tap +0 -36
- package/.tap/test-results/test/chainable.test.js.tap +0 -17
- package/.tap/test-results/test/check.test.js.tap +0 -10
- package/.tap/test-results/test/childLoggerFactory.test.js.tap +0 -23
- package/.tap/test-results/test/client-timeout.test.js.tap +0 -7
- package/.tap/test-results/test/close-pipelining.test.js.tap +0 -15
- package/.tap/test-results/test/close.test.js.tap +0 -172
- package/.tap/test-results/test/connectionTimeout.test.js.tap +0 -12
- package/.tap/test-results/test/constrained-routes.test.js.tap +0 -173
- package/.tap/test-results/test/content-length.test.js.tap +0 -46
- package/.tap/test-results/test/content-parser.test.js.tap +0 -266
- package/.tap/test-results/test/content-type.test.js.tap +0 -14
- package/.tap/test-results/test/context-config.test.js.tap +0 -41
- package/.tap/test-results/test/copy.test.js.tap +0 -14
- package/.tap/test-results/test/custom-http-server.test.js.tap +0 -30
- package/.tap/test-results/test/custom-parser-async.test.js.tap +0 -21
- package/.tap/test-results/test/custom-parser.0.test.js.tap +0 -199
- package/.tap/test-results/test/custom-parser.1.test.js.tap +0 -90
- package/.tap/test-results/test/custom-parser.2.test.js.tap +0 -22
- package/.tap/test-results/test/custom-parser.3.test.js.tap +0 -53
- package/.tap/test-results/test/custom-parser.4.test.js.tap +0 -45
- package/.tap/test-results/test/custom-parser.5.test.js.tap +0 -41
- package/.tap/test-results/test/custom-querystring-parser.test.js.tap +0 -46
- package/.tap/test-results/test/decorator.test.js.tap +0 -465
- package/.tap/test-results/test/delete.test.js.tap +0 -110
- package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +0 -15
- package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +0 -25
- package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +0 -24
- package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +0 -9
- package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +0 -20
- package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +0 -10
- package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +0 -14
- package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +0 -16
- package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +0 -16
- package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +0 -19
- package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +0 -18
- package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +0 -243
- package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +0 -9
- package/.tap/test-results/test/esm/esm.test.mjs.tap +0 -8
- package/.tap/test-results/test/esm/index.test.js.tap +0 -8
- package/.tap/test-results/test/fastify-instance.test.js.tap +0 -114
- package/.tap/test-results/test/findRoute.test.js.tap +0 -37
- package/.tap/test-results/test/fluent-schema.test.js.tap +0 -36
- package/.tap/test-results/test/genReqId.test.js.tap +0 -106
- package/.tap/test-results/test/get.test.js.tap +0 -151
- package/.tap/test-results/test/handler-context.test.js.tap +0 -19
- package/.tap/test-results/test/has-route.test.js.tap +0 -30
- package/.tap/test-results/test/head.test.js.tap +0 -130
- package/.tap/test-results/test/header-overflow.test.js.tap +0 -16
- package/.tap/test-results/test/hooks-async.test.js.tap +0 -286
- package/.tap/test-results/test/hooks.on-listen.test.js.tap +0 -311
- package/.tap/test-results/test/hooks.on-ready.test.js.tap +0 -151
- package/.tap/test-results/test/hooks.test.js.tap +0 -966
- package/.tap/test-results/test/http2/closing.test.js.tap +0 -35
- package/.tap/test-results/test/http2/constraint.test.js.tap +0 -32
- package/.tap/test-results/test/http2/head.test.js.tap +0 -9
- package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +0 -8
- package/.tap/test-results/test/http2/plain.test.js.tap +0 -22
- package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +0 -40
- package/.tap/test-results/test/http2/secure.test.js.tap +0 -27
- package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +0 -9
- package/.tap/test-results/test/https/custom-https-server.test.js.tap +0 -10
- package/.tap/test-results/test/https/https.test.js.tap +0 -45
- package/.tap/test-results/test/imports.test.js.tap +0 -14
- package/.tap/test-results/test/inject.test.js.tap +0 -165
- package/.tap/test-results/test/internals/all.test.js.tap +0 -42
- package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +0 -14
- package/.tap/test-results/test/internals/context.test.js.tap +0 -14
- package/.tap/test-results/test/internals/decorator.test.js.tap +0 -51
- package/.tap/test-results/test/internals/errors.test.js.tap +0 -1212
- package/.tap/test-results/test/internals/handleRequest.test.js.tap +0 -69
- package/.tap/test-results/test/internals/hookRunner.test.js.tap +0 -143
- package/.tap/test-results/test/internals/hooks.test.js.tap +0 -45
- package/.tap/test-results/test/internals/initialConfig.test.js.tap +0 -125
- package/.tap/test-results/test/internals/logger.test.js.tap +0 -71
- package/.tap/test-results/test/internals/plugin.test.js.tap +0 -48
- package/.tap/test-results/test/internals/reply-serialize.test.js.tap +0 -166
- package/.tap/test-results/test/internals/reply.test.js.tap +0 -688
- package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +0 -74
- package/.tap/test-results/test/internals/request-validate.test.js.tap +0 -384
- package/.tap/test-results/test/internals/request.test.js.tap +0 -163
- package/.tap/test-results/test/internals/server.test.js.tap +0 -30
- package/.tap/test-results/test/internals/validation.test.js.tap +0 -121
- package/.tap/test-results/test/keepAliveTimeout.test.js.tap +0 -12
- package/.tap/test-results/test/listen.1.test.js.tap +0 -31
- package/.tap/test-results/test/listen.2.test.js.tap +0 -46
- package/.tap/test-results/test/listen.3.test.js.tap +0 -25
- package/.tap/test-results/test/listen.4.test.js.tap +0 -51
- package/.tap/test-results/test/lock.test.js.tap +0 -29
- package/.tap/test-results/test/logger/instantiation.test.js.tap +0 -92
- package/.tap/test-results/test/logger/logging.test.js.tap +0 -117
- package/.tap/test-results/test/logger/options.test.js.tap +0 -165
- package/.tap/test-results/test/logger/request.test.js.tap +0 -82
- package/.tap/test-results/test/logger/response.test.js.tap +0 -38
- package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +0 -44
- package/.tap/test-results/test/method-missing.test.js.tap +0 -8
- package/.tap/test-results/test/middleware.test.js.tap +0 -17
- package/.tap/test-results/test/mkcalendar.test.js.tap +0 -43
- package/.tap/test-results/test/mkcol.test.js.tap +0 -14
- package/.tap/test-results/test/move.test.js.tap +0 -15
- package/.tap/test-results/test/noop-set.test.js.tap +0 -8
- package/.tap/test-results/test/nullable-validation.test.js.tap +0 -36
- package/.tap/test-results/test/options.error-handler.test.js.tap +0 -186
- package/.tap/test-results/test/options.test.js.tap +0 -174
- package/.tap/test-results/test/output-validation.test.js.tap +0 -66
- package/.tap/test-results/test/patch.error-handler.test.js.tap +0 -206
- package/.tap/test-results/test/patch.test.js.tap +0 -182
- package/.tap/test-results/test/plugin.1.test.js.tap +0 -78
- package/.tap/test-results/test/plugin.2.test.js.tap +0 -102
- package/.tap/test-results/test/plugin.3.test.js.tap +0 -58
- package/.tap/test-results/test/plugin.4.test.js.tap +0 -164
- package/.tap/test-results/test/post-empty-body.test.js.tap +0 -8
- package/.tap/test-results/test/pretty-print.test.js.tap +0 -82
- package/.tap/test-results/test/promises.test.js.tap +0 -46
- package/.tap/test-results/test/propfind.test.js.tap +0 -43
- package/.tap/test-results/test/proppatch.test.js.tap +0 -29
- package/.tap/test-results/test/proto-poisoning.test.js.tap +0 -47
- package/.tap/test-results/test/put.error-handler.test.js.tap +0 -206
- package/.tap/test-results/test/put.test.js.tap +0 -182
- package/.tap/test-results/test/register.test.js.tap +0 -61
- package/.tap/test-results/test/reply-code.test.js.tap +0 -40
- package/.tap/test-results/test/reply-earlyHints.test.js.tap +0 -22
- package/.tap/test-results/test/reply-error.test.js.tap +0 -643
- package/.tap/test-results/test/reply-trailers.test.js.tap +0 -176
- package/.tap/test-results/test/report.test.js.tap +0 -43
- package/.tap/test-results/test/request-error.test.js.tap +0 -98
- package/.tap/test-results/test/request-id.test.js.tap +0 -38
- package/.tap/test-results/test/request.deprecated.test.js.tap +0 -13
- package/.tap/test-results/test/requestTimeout.test.js.tap +0 -21
- package/.tap/test-results/test/route-hooks.test.js.tap +0 -498
- package/.tap/test-results/test/route-prefix.test.js.tap +0 -195
- package/.tap/test-results/test/route-shorthand.test.js.tap +0 -190
- package/.tap/test-results/test/route.1.test.js.tap +0 -93
- package/.tap/test-results/test/route.2.test.js.tap +0 -28
- package/.tap/test-results/test/route.3.test.js.tap +0 -39
- package/.tap/test-results/test/route.4.test.js.tap +0 -32
- package/.tap/test-results/test/route.5.test.js.tap +0 -54
- package/.tap/test-results/test/route.6.test.js.tap +0 -81
- package/.tap/test-results/test/route.7.test.js.tap +0 -93
- package/.tap/test-results/test/route.8.test.js.tap +0 -38
- package/.tap/test-results/test/router-options.test.js.tap +0 -104
- package/.tap/test-results/test/same-shape.test.js.tap +0 -22
- package/.tap/test-results/test/schema-examples.test.js.tap +0 -85
- package/.tap/test-results/test/schema-feature.test.js.tap +0 -445
- package/.tap/test-results/test/schema-serialization.test.js.tap +0 -194
- package/.tap/test-results/test/schema-special-usage.test.js.tap +0 -186
- package/.tap/test-results/test/schema-validation.test.js.tap +0 -199
- package/.tap/test-results/test/search.test.js.tap +0 -77
- package/.tap/test-results/test/serialize-response.test.js.tap +0 -26
- package/.tap/test-results/test/server.test.js.tap +0 -65
- package/.tap/test-results/test/set-error-handler.test.js.tap +0 -7
- package/.tap/test-results/test/skip-reply-send.test.js.tap +0 -272
- package/.tap/test-results/test/stream.1.test.js.tap +0 -36
- package/.tap/test-results/test/stream.2.test.js.tap +0 -20
- package/.tap/test-results/test/stream.3.test.js.tap +0 -34
- package/.tap/test-results/test/stream.4.test.js.tap +0 -40
- package/.tap/test-results/test/stream.5.test.js.tap +0 -37
- package/.tap/test-results/test/sync-routes.test.js.tap +0 -19
- package/.tap/test-results/test/throw.test.js.tap +0 -116
- package/.tap/test-results/test/trace.test.js.tap +0 -7
- package/.tap/test-results/test/trust-proxy.test.js.tap +0 -109
- package/.tap/test-results/test/type-provider.test.js.tap +0 -12
- package/.tap/test-results/test/unlock.test.js.tap +0 -14
- package/.tap/test-results/test/upgrade.test.js.tap +0 -8
- package/.tap/test-results/test/url-rewriting.test.js.tap +0 -39
- package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +0 -33
- package/.tap/test-results/test/validation-error-handling.test.js.tap +0 -180
- package/.tap/test-results/test/versioned-routes.test.js.tap +0 -151
- package/.tap/test-results/test/web-api.test.js.tap +0 -51
- package/.tap/test-results/test/wrapThenable.test.js.tap +0 -11
- package/EXPENSE_POLICY.md +0 -105
- package/test/default-route.test.js +0 -88
- package/test/listen.deprecated.test.js +0 -229
- package/test/unsupported-httpversion.test.js +0 -31
- package/types/.eslintrc.json +0 -48
package/lib/configValidator.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is autogenerated by build/build-validation.js, do not edit
|
|
2
|
-
/*
|
|
2
|
+
/* c8 ignore start */
|
|
3
3
|
"use strict";
|
|
4
4
|
module.exports = validate10;
|
|
5
5
|
module.exports.default = validate10;
|
|
6
|
-
const schema11 = {"type":"object","additionalProperties":false,"properties":{"connectionTimeout":{"type":"integer","default":0},"keepAliveTimeout":{"type":"integer","default":72000},"forceCloseConnections":{"oneOf":[{"type":"string","pattern":"idle"},{"type":"boolean"}]},"maxRequestsPerSocket":{"type":"integer","default":0,"nullable":true},"requestTimeout":{"type":"integer","default":0},"bodyLimit":{"type":"integer","default":1048576},"caseSensitive":{"type":"boolean","default":true},"allowUnsafeRegex":{"type":"boolean","default":false},"http2":{"type":"boolean"},"https":{"if":{"not":{"oneOf":[{"type":"boolean"},{"type":"null"},{"type":"object","additionalProperties":false,"required":["allowHTTP1"],"properties":{"allowHTTP1":{"type":"boolean"}}}]}},"then":{"setDefaultValue":true}},"ignoreTrailingSlash":{"type":"boolean","default":false},"ignoreDuplicateSlashes":{"type":"boolean","default":false},"disableRequestLogging":{"type":"boolean","default":false},"jsonShorthand":{"type":"boolean","default":true},"maxParamLength":{"type":"integer","default":100},"onProtoPoisoning":{"type":"string","default":"error"},"onConstructorPoisoning":{"type":"string","default":"error"},"pluginTimeout":{"type":"integer","default":10000},"requestIdHeader":{"anyOf":[{"
|
|
6
|
+
const schema11 = {"type":"object","additionalProperties":false,"properties":{"connectionTimeout":{"type":"integer","default":0},"keepAliveTimeout":{"type":"integer","default":72000},"forceCloseConnections":{"oneOf":[{"type":"string","pattern":"idle"},{"type":"boolean"}]},"maxRequestsPerSocket":{"type":"integer","default":0,"nullable":true},"requestTimeout":{"type":"integer","default":0},"bodyLimit":{"type":"integer","default":1048576},"caseSensitive":{"type":"boolean","default":true},"allowUnsafeRegex":{"type":"boolean","default":false},"http2":{"type":"boolean"},"https":{"if":{"not":{"oneOf":[{"type":"boolean"},{"type":"null"},{"type":"object","additionalProperties":false,"required":["allowHTTP1"],"properties":{"allowHTTP1":{"type":"boolean"}}}]}},"then":{"setDefaultValue":true}},"ignoreTrailingSlash":{"type":"boolean","default":false},"ignoreDuplicateSlashes":{"type":"boolean","default":false},"disableRequestLogging":{"type":"boolean","default":false},"jsonShorthand":{"type":"boolean","default":true},"maxParamLength":{"type":"integer","default":100},"onProtoPoisoning":{"type":"string","default":"error"},"onConstructorPoisoning":{"type":"string","default":"error"},"pluginTimeout":{"type":"integer","default":10000},"requestIdHeader":{"anyOf":[{"type":"boolean"},{"type":"string"}],"default":false},"requestIdLogLabel":{"type":"string","default":"reqId"},"http2SessionTimeout":{"type":"integer","default":72000},"exposeHeadRoutes":{"type":"boolean","default":true},"useSemicolonDelimiter":{"type":"boolean","default":false},"versioning":{"type":"object","additionalProperties":true,"required":["storage","deriveVersion"],"properties":{"storage":{},"deriveVersion":{}}},"constraints":{"type":"object","additionalProperties":{"type":"object","required":["name","storage","validate","deriveConstraint"],"additionalProperties":true,"properties":{"name":{"type":"string"},"storage":{},"validate":{},"deriveConstraint":{}}}}}};
|
|
7
7
|
const func2 = Object.prototype.hasOwnProperty;
|
|
8
8
|
const pattern0 = new RegExp("idle", "u");
|
|
9
9
|
|
|
@@ -58,7 +58,7 @@ if(data.pluginTimeout === undefined){
|
|
|
58
58
|
data.pluginTimeout = 10000;
|
|
59
59
|
}
|
|
60
60
|
if(data.requestIdHeader === undefined){
|
|
61
|
-
data.requestIdHeader =
|
|
61
|
+
data.requestIdHeader = false;
|
|
62
62
|
}
|
|
63
63
|
if(data.requestIdLogLabel === undefined){
|
|
64
64
|
data.requestIdLogLabel = "reqId";
|
|
@@ -70,7 +70,7 @@ if(data.exposeHeadRoutes === undefined){
|
|
|
70
70
|
data.exposeHeadRoutes = true;
|
|
71
71
|
}
|
|
72
72
|
if(data.useSemicolonDelimiter === undefined){
|
|
73
|
-
data.useSemicolonDelimiter =
|
|
73
|
+
data.useSemicolonDelimiter = false;
|
|
74
74
|
}
|
|
75
75
|
const _errs1 = errors;
|
|
76
76
|
for(const key0 in data){
|
|
@@ -843,8 +843,17 @@ const _errs57 = errors;
|
|
|
843
843
|
const _errs58 = errors;
|
|
844
844
|
let valid6 = false;
|
|
845
845
|
const _errs59 = errors;
|
|
846
|
-
if(
|
|
847
|
-
|
|
846
|
+
if(typeof data19 !== "boolean"){
|
|
847
|
+
let coerced21 = undefined;
|
|
848
|
+
if(!(coerced21 !== undefined)){
|
|
849
|
+
if(data19 === "false" || data19 === 0 || data19 === null){
|
|
850
|
+
coerced21 = false;
|
|
851
|
+
}
|
|
852
|
+
else if(data19 === "true" || data19 === 1){
|
|
853
|
+
coerced21 = true;
|
|
854
|
+
}
|
|
855
|
+
else {
|
|
856
|
+
const err12 = {instancePath:instancePath+"/requestIdHeader",schemaPath:"#/properties/requestIdHeader/anyOf/0/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};
|
|
848
857
|
if(vErrors === null){
|
|
849
858
|
vErrors = [err12];
|
|
850
859
|
}
|
|
@@ -853,19 +862,27 @@ vErrors.push(err12);
|
|
|
853
862
|
}
|
|
854
863
|
errors++;
|
|
855
864
|
}
|
|
865
|
+
}
|
|
866
|
+
if(coerced21 !== undefined){
|
|
867
|
+
data19 = coerced21;
|
|
868
|
+
if(data !== undefined){
|
|
869
|
+
data["requestIdHeader"] = coerced21;
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
}
|
|
856
873
|
var _valid3 = _errs59 === errors;
|
|
857
874
|
valid6 = valid6 || _valid3;
|
|
858
875
|
if(!valid6){
|
|
859
|
-
const
|
|
876
|
+
const _errs61 = errors;
|
|
860
877
|
if(typeof data19 !== "string"){
|
|
861
|
-
let
|
|
862
|
-
let
|
|
863
|
-
if(!(
|
|
864
|
-
if(
|
|
865
|
-
|
|
878
|
+
let dataType22 = typeof data19;
|
|
879
|
+
let coerced22 = undefined;
|
|
880
|
+
if(!(coerced22 !== undefined)){
|
|
881
|
+
if(dataType22 == "number" || dataType22 == "boolean"){
|
|
882
|
+
coerced22 = "" + data19;
|
|
866
883
|
}
|
|
867
884
|
else if(data19 === null){
|
|
868
|
-
|
|
885
|
+
coerced22 = "";
|
|
869
886
|
}
|
|
870
887
|
else {
|
|
871
888
|
const err13 = {instancePath:instancePath+"/requestIdHeader",schemaPath:"#/properties/requestIdHeader/anyOf/1/type",keyword:"type",params:{type: "string"},message:"must be string"};
|
|
@@ -878,14 +895,14 @@ vErrors.push(err13);
|
|
|
878
895
|
errors++;
|
|
879
896
|
}
|
|
880
897
|
}
|
|
881
|
-
if(
|
|
882
|
-
data19 =
|
|
898
|
+
if(coerced22 !== undefined){
|
|
899
|
+
data19 = coerced22;
|
|
883
900
|
if(data !== undefined){
|
|
884
|
-
data["requestIdHeader"] =
|
|
901
|
+
data["requestIdHeader"] = coerced22;
|
|
885
902
|
}
|
|
886
903
|
}
|
|
887
904
|
}
|
|
888
|
-
var _valid3 =
|
|
905
|
+
var _valid3 = _errs61 === errors;
|
|
889
906
|
valid6 = valid6 || _valid3;
|
|
890
907
|
}
|
|
891
908
|
if(!valid6){
|
|
@@ -914,109 +931,109 @@ vErrors = null;
|
|
|
914
931
|
var valid0 = _errs57 === errors;
|
|
915
932
|
if(valid0){
|
|
916
933
|
let data20 = data.requestIdLogLabel;
|
|
917
|
-
const
|
|
934
|
+
const _errs63 = errors;
|
|
918
935
|
if(typeof data20 !== "string"){
|
|
919
|
-
let
|
|
920
|
-
let
|
|
921
|
-
if(!(
|
|
922
|
-
if(
|
|
923
|
-
|
|
936
|
+
let dataType23 = typeof data20;
|
|
937
|
+
let coerced23 = undefined;
|
|
938
|
+
if(!(coerced23 !== undefined)){
|
|
939
|
+
if(dataType23 == "number" || dataType23 == "boolean"){
|
|
940
|
+
coerced23 = "" + data20;
|
|
924
941
|
}
|
|
925
942
|
else if(data20 === null){
|
|
926
|
-
|
|
943
|
+
coerced23 = "";
|
|
927
944
|
}
|
|
928
945
|
else {
|
|
929
946
|
validate10.errors = [{instancePath:instancePath+"/requestIdLogLabel",schemaPath:"#/properties/requestIdLogLabel/type",keyword:"type",params:{type: "string"},message:"must be string"}];
|
|
930
947
|
return false;
|
|
931
948
|
}
|
|
932
949
|
}
|
|
933
|
-
if(
|
|
934
|
-
data20 =
|
|
950
|
+
if(coerced23 !== undefined){
|
|
951
|
+
data20 = coerced23;
|
|
935
952
|
if(data !== undefined){
|
|
936
|
-
data["requestIdLogLabel"] =
|
|
953
|
+
data["requestIdLogLabel"] = coerced23;
|
|
937
954
|
}
|
|
938
955
|
}
|
|
939
956
|
}
|
|
940
|
-
var valid0 =
|
|
957
|
+
var valid0 = _errs63 === errors;
|
|
941
958
|
if(valid0){
|
|
942
959
|
let data21 = data.http2SessionTimeout;
|
|
943
|
-
const
|
|
960
|
+
const _errs65 = errors;
|
|
944
961
|
if(!(((typeof data21 == "number") && (!(data21 % 1) && !isNaN(data21))) && (isFinite(data21)))){
|
|
945
|
-
let
|
|
946
|
-
let
|
|
947
|
-
if(!(
|
|
948
|
-
if(
|
|
949
|
-
|| (
|
|
950
|
-
|
|
962
|
+
let dataType24 = typeof data21;
|
|
963
|
+
let coerced24 = undefined;
|
|
964
|
+
if(!(coerced24 !== undefined)){
|
|
965
|
+
if(dataType24 === "boolean" || data21 === null
|
|
966
|
+
|| (dataType24 === "string" && data21 && data21 == +data21 && !(data21 % 1))){
|
|
967
|
+
coerced24 = +data21;
|
|
951
968
|
}
|
|
952
969
|
else {
|
|
953
970
|
validate10.errors = [{instancePath:instancePath+"/http2SessionTimeout",schemaPath:"#/properties/http2SessionTimeout/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];
|
|
954
971
|
return false;
|
|
955
972
|
}
|
|
956
973
|
}
|
|
957
|
-
if(
|
|
958
|
-
data21 =
|
|
974
|
+
if(coerced24 !== undefined){
|
|
975
|
+
data21 = coerced24;
|
|
959
976
|
if(data !== undefined){
|
|
960
|
-
data["http2SessionTimeout"] =
|
|
977
|
+
data["http2SessionTimeout"] = coerced24;
|
|
961
978
|
}
|
|
962
979
|
}
|
|
963
980
|
}
|
|
964
|
-
var valid0 =
|
|
981
|
+
var valid0 = _errs65 === errors;
|
|
965
982
|
if(valid0){
|
|
966
983
|
let data22 = data.exposeHeadRoutes;
|
|
967
|
-
const
|
|
984
|
+
const _errs67 = errors;
|
|
968
985
|
if(typeof data22 !== "boolean"){
|
|
969
|
-
let
|
|
970
|
-
if(!(
|
|
986
|
+
let coerced25 = undefined;
|
|
987
|
+
if(!(coerced25 !== undefined)){
|
|
971
988
|
if(data22 === "false" || data22 === 0 || data22 === null){
|
|
972
|
-
|
|
989
|
+
coerced25 = false;
|
|
973
990
|
}
|
|
974
991
|
else if(data22 === "true" || data22 === 1){
|
|
975
|
-
|
|
992
|
+
coerced25 = true;
|
|
976
993
|
}
|
|
977
994
|
else {
|
|
978
995
|
validate10.errors = [{instancePath:instancePath+"/exposeHeadRoutes",schemaPath:"#/properties/exposeHeadRoutes/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];
|
|
979
996
|
return false;
|
|
980
997
|
}
|
|
981
998
|
}
|
|
982
|
-
if(
|
|
983
|
-
data22 =
|
|
999
|
+
if(coerced25 !== undefined){
|
|
1000
|
+
data22 = coerced25;
|
|
984
1001
|
if(data !== undefined){
|
|
985
|
-
data["exposeHeadRoutes"] =
|
|
1002
|
+
data["exposeHeadRoutes"] = coerced25;
|
|
986
1003
|
}
|
|
987
1004
|
}
|
|
988
1005
|
}
|
|
989
|
-
var valid0 =
|
|
1006
|
+
var valid0 = _errs67 === errors;
|
|
990
1007
|
if(valid0){
|
|
991
1008
|
let data23 = data.useSemicolonDelimiter;
|
|
992
|
-
const
|
|
1009
|
+
const _errs69 = errors;
|
|
993
1010
|
if(typeof data23 !== "boolean"){
|
|
994
|
-
let
|
|
995
|
-
if(!(
|
|
1011
|
+
let coerced26 = undefined;
|
|
1012
|
+
if(!(coerced26 !== undefined)){
|
|
996
1013
|
if(data23 === "false" || data23 === 0 || data23 === null){
|
|
997
|
-
|
|
1014
|
+
coerced26 = false;
|
|
998
1015
|
}
|
|
999
1016
|
else if(data23 === "true" || data23 === 1){
|
|
1000
|
-
|
|
1017
|
+
coerced26 = true;
|
|
1001
1018
|
}
|
|
1002
1019
|
else {
|
|
1003
1020
|
validate10.errors = [{instancePath:instancePath+"/useSemicolonDelimiter",schemaPath:"#/properties/useSemicolonDelimiter/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];
|
|
1004
1021
|
return false;
|
|
1005
1022
|
}
|
|
1006
1023
|
}
|
|
1007
|
-
if(
|
|
1008
|
-
data23 =
|
|
1024
|
+
if(coerced26 !== undefined){
|
|
1025
|
+
data23 = coerced26;
|
|
1009
1026
|
if(data !== undefined){
|
|
1010
|
-
data["useSemicolonDelimiter"] =
|
|
1027
|
+
data["useSemicolonDelimiter"] = coerced26;
|
|
1011
1028
|
}
|
|
1012
1029
|
}
|
|
1013
1030
|
}
|
|
1014
|
-
var valid0 =
|
|
1031
|
+
var valid0 = _errs69 === errors;
|
|
1015
1032
|
if(valid0){
|
|
1016
1033
|
if(data.versioning !== undefined){
|
|
1017
1034
|
let data24 = data.versioning;
|
|
1018
|
-
const
|
|
1019
|
-
if(errors ===
|
|
1035
|
+
const _errs71 = errors;
|
|
1036
|
+
if(errors === _errs71){
|
|
1020
1037
|
if(data24 && typeof data24 == "object" && !Array.isArray(data24)){
|
|
1021
1038
|
let missing1;
|
|
1022
1039
|
if(((data24.storage === undefined) && (missing1 = "storage")) || ((data24.deriveVersion === undefined) && (missing1 = "deriveVersion"))){
|
|
@@ -1029,7 +1046,7 @@ validate10.errors = [{instancePath:instancePath+"/versioning",schemaPath:"#/prop
|
|
|
1029
1046
|
return false;
|
|
1030
1047
|
}
|
|
1031
1048
|
}
|
|
1032
|
-
var valid0 =
|
|
1049
|
+
var valid0 = _errs71 === errors;
|
|
1033
1050
|
}
|
|
1034
1051
|
else {
|
|
1035
1052
|
var valid0 = true;
|
|
@@ -1037,13 +1054,13 @@ var valid0 = true;
|
|
|
1037
1054
|
if(valid0){
|
|
1038
1055
|
if(data.constraints !== undefined){
|
|
1039
1056
|
let data25 = data.constraints;
|
|
1040
|
-
const
|
|
1041
|
-
if(errors ===
|
|
1057
|
+
const _errs74 = errors;
|
|
1058
|
+
if(errors === _errs74){
|
|
1042
1059
|
if(data25 && typeof data25 == "object" && !Array.isArray(data25)){
|
|
1043
1060
|
for(const key2 in data25){
|
|
1044
1061
|
let data26 = data25[key2];
|
|
1045
|
-
const
|
|
1046
|
-
if(errors ===
|
|
1062
|
+
const _errs77 = errors;
|
|
1063
|
+
if(errors === _errs77){
|
|
1047
1064
|
if(data26 && typeof data26 == "object" && !Array.isArray(data26)){
|
|
1048
1065
|
let missing2;
|
|
1049
1066
|
if(((((data26.name === undefined) && (missing2 = "name")) || ((data26.storage === undefined) && (missing2 = "storage"))) || ((data26.validate === undefined) && (missing2 = "validate"))) || ((data26.deriveConstraint === undefined) && (missing2 = "deriveConstraint"))){
|
|
@@ -1054,24 +1071,24 @@ else {
|
|
|
1054
1071
|
if(data26.name !== undefined){
|
|
1055
1072
|
let data27 = data26.name;
|
|
1056
1073
|
if(typeof data27 !== "string"){
|
|
1057
|
-
let
|
|
1058
|
-
let
|
|
1059
|
-
if(!(
|
|
1060
|
-
if(
|
|
1061
|
-
|
|
1074
|
+
let dataType27 = typeof data27;
|
|
1075
|
+
let coerced27 = undefined;
|
|
1076
|
+
if(!(coerced27 !== undefined)){
|
|
1077
|
+
if(dataType27 == "number" || dataType27 == "boolean"){
|
|
1078
|
+
coerced27 = "" + data27;
|
|
1062
1079
|
}
|
|
1063
1080
|
else if(data27 === null){
|
|
1064
|
-
|
|
1081
|
+
coerced27 = "";
|
|
1065
1082
|
}
|
|
1066
1083
|
else {
|
|
1067
1084
|
validate10.errors = [{instancePath:instancePath+"/constraints/" + key2.replace(/~/g, "~0").replace(/\//g, "~1")+"/name",schemaPath:"#/properties/constraints/additionalProperties/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];
|
|
1068
1085
|
return false;
|
|
1069
1086
|
}
|
|
1070
1087
|
}
|
|
1071
|
-
if(
|
|
1072
|
-
data27 =
|
|
1088
|
+
if(coerced27 !== undefined){
|
|
1089
|
+
data27 = coerced27;
|
|
1073
1090
|
if(data26 !== undefined){
|
|
1074
|
-
data26["name"] =
|
|
1091
|
+
data26["name"] = coerced27;
|
|
1075
1092
|
}
|
|
1076
1093
|
}
|
|
1077
1094
|
}
|
|
@@ -1083,7 +1100,7 @@ validate10.errors = [{instancePath:instancePath+"/constraints/" + key2.replace(/
|
|
|
1083
1100
|
return false;
|
|
1084
1101
|
}
|
|
1085
1102
|
}
|
|
1086
|
-
var valid7 =
|
|
1103
|
+
var valid7 = _errs77 === errors;
|
|
1087
1104
|
if(!valid7){
|
|
1088
1105
|
break;
|
|
1089
1106
|
}
|
|
@@ -1094,7 +1111,7 @@ validate10.errors = [{instancePath:instancePath+"/constraints",schemaPath:"#/pro
|
|
|
1094
1111
|
return false;
|
|
1095
1112
|
}
|
|
1096
1113
|
}
|
|
1097
|
-
var valid0 =
|
|
1114
|
+
var valid0 = _errs74 === errors;
|
|
1098
1115
|
}
|
|
1099
1116
|
else {
|
|
1100
1117
|
var valid0 = true;
|
|
@@ -1135,4 +1152,5 @@ return errors === 0;
|
|
|
1135
1152
|
}
|
|
1136
1153
|
|
|
1137
1154
|
|
|
1138
|
-
module.exports.defaultInitOptions = {"connectionTimeout":0,"keepAliveTimeout":72000,"maxRequestsPerSocket":0,"requestTimeout":0,"bodyLimit":1048576,"caseSensitive":true,"allowUnsafeRegex":false,"disableRequestLogging":false,"jsonShorthand":true,"ignoreTrailingSlash":false,"ignoreDuplicateSlashes":false,"maxParamLength":100,"onProtoPoisoning":"error","onConstructorPoisoning":"error","pluginTimeout":10000,"requestIdHeader":
|
|
1155
|
+
module.exports.defaultInitOptions = {"connectionTimeout":0,"keepAliveTimeout":72000,"maxRequestsPerSocket":0,"requestTimeout":0,"bodyLimit":1048576,"caseSensitive":true,"allowUnsafeRegex":false,"disableRequestLogging":false,"jsonShorthand":true,"ignoreTrailingSlash":false,"ignoreDuplicateSlashes":false,"maxParamLength":100,"onProtoPoisoning":"error","onConstructorPoisoning":"error","pluginTimeout":10000,"requestIdHeader":false,"requestIdLogLabel":"reqId","http2SessionTimeout":72000,"exposeHeadRoutes":true,"useSemicolonDelimiter":false}
|
|
1156
|
+
/* c8 ignore stop */
|
package/lib/contentTypeParser.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
const { AsyncResource } = require('node:async_hooks')
|
|
4
4
|
const { FifoMap: Fifo } = require('toad-cache')
|
|
5
|
-
const { safeParse: safeParseContentType, defaultContentType } = require('fast-content-type-parse')
|
|
6
5
|
const secureJson = require('secure-json-parse')
|
|
7
6
|
const {
|
|
8
7
|
kDefaultJsonParse,
|
|
@@ -27,6 +26,7 @@ const {
|
|
|
27
26
|
FST_ERR_CTP_EMPTY_JSON_BODY,
|
|
28
27
|
FST_ERR_CTP_INSTANCE_ALREADY_STARTED
|
|
29
28
|
} = require('./errors')
|
|
29
|
+
const { FSTSEC001 } = require('./warnings')
|
|
30
30
|
|
|
31
31
|
function ContentTypeParser (bodyLimit, onProtoPoisoning, onConstructorPoisoning) {
|
|
32
32
|
this[kDefaultJsonParse] = getDefaultJsonParser(onProtoPoisoning, onConstructorPoisoning)
|
|
@@ -34,7 +34,7 @@ function ContentTypeParser (bodyLimit, onProtoPoisoning, onConstructorPoisoning)
|
|
|
34
34
|
this.customParsers = new Map()
|
|
35
35
|
this.customParsers.set('application/json', new Parser(true, false, bodyLimit, this[kDefaultJsonParse]))
|
|
36
36
|
this.customParsers.set('text/plain', new Parser(true, false, bodyLimit, defaultPlainTextParser))
|
|
37
|
-
this.parserList = [
|
|
37
|
+
this.parserList = ['application/json', 'text/plain']
|
|
38
38
|
this.parserRegExpList = []
|
|
39
39
|
this.cache = new Fifo(100)
|
|
40
40
|
}
|
|
@@ -42,9 +42,16 @@ function ContentTypeParser (bodyLimit, onProtoPoisoning, onConstructorPoisoning)
|
|
|
42
42
|
ContentTypeParser.prototype.add = function (contentType, opts, parserFn) {
|
|
43
43
|
const contentTypeIsString = typeof contentType === 'string'
|
|
44
44
|
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
if (contentTypeIsString) {
|
|
46
|
+
contentType = contentType.trim().toLowerCase()
|
|
47
|
+
if (contentType.length === 0) throw new FST_ERR_CTP_EMPTY_TYPE()
|
|
48
|
+
} else if (!(contentType instanceof RegExp)) {
|
|
49
|
+
throw new FST_ERR_CTP_INVALID_TYPE()
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (typeof parserFn !== 'function') {
|
|
53
|
+
throw new FST_ERR_CTP_INVALID_HANDLER()
|
|
54
|
+
}
|
|
48
55
|
|
|
49
56
|
if (this.existingParser(contentType)) {
|
|
50
57
|
throw new FST_ERR_CTP_ALREADY_PRESENT(contentType)
|
|
@@ -63,21 +70,29 @@ ContentTypeParser.prototype.add = function (contentType, opts, parserFn) {
|
|
|
63
70
|
parserFn
|
|
64
71
|
)
|
|
65
72
|
|
|
66
|
-
if (
|
|
73
|
+
if (contentType === '*') {
|
|
67
74
|
this.customParsers.set('', parser)
|
|
68
75
|
} else {
|
|
69
76
|
if (contentTypeIsString) {
|
|
70
|
-
this.parserList.unshift(
|
|
77
|
+
this.parserList.unshift(contentType)
|
|
78
|
+
this.customParsers.set(contentType, parser)
|
|
71
79
|
} else {
|
|
72
|
-
contentType
|
|
80
|
+
validateRegExp(contentType)
|
|
73
81
|
this.parserRegExpList.unshift(contentType)
|
|
82
|
+
this.customParsers.set(contentType.toString(), parser)
|
|
74
83
|
}
|
|
75
|
-
this.customParsers.set(contentType.toString(), parser)
|
|
76
84
|
}
|
|
77
85
|
}
|
|
78
86
|
|
|
79
87
|
ContentTypeParser.prototype.hasParser = function (contentType) {
|
|
80
|
-
|
|
88
|
+
if (typeof contentType === 'string') {
|
|
89
|
+
contentType = contentType.trim().toLowerCase()
|
|
90
|
+
} else {
|
|
91
|
+
if (!(contentType instanceof RegExp)) throw new FST_ERR_CTP_INVALID_TYPE()
|
|
92
|
+
contentType = contentType.toString()
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return this.customParsers.has(contentType)
|
|
81
96
|
}
|
|
82
97
|
|
|
83
98
|
ContentTypeParser.prototype.existingParser = function (contentType) {
|
|
@@ -92,27 +107,20 @@ ContentTypeParser.prototype.existingParser = function (contentType) {
|
|
|
92
107
|
}
|
|
93
108
|
|
|
94
109
|
ContentTypeParser.prototype.getParser = function (contentType) {
|
|
95
|
-
|
|
96
|
-
return this.customParsers.get(contentType)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const parser = this.cache.get(contentType)
|
|
110
|
+
let parser = this.customParsers.get(contentType)
|
|
100
111
|
if (parser !== undefined) return parser
|
|
101
112
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
// dummyContentType always the same object
|
|
105
|
-
// we can use === for the comparison and return early
|
|
106
|
-
if (parsed === defaultContentType) {
|
|
107
|
-
return this.customParsers.get('')
|
|
108
|
-
}
|
|
113
|
+
parser = this.cache.get(contentType)
|
|
114
|
+
if (parser !== undefined) return parser
|
|
109
115
|
|
|
110
116
|
// eslint-disable-next-line no-var
|
|
111
117
|
for (var i = 0; i !== this.parserList.length; ++i) {
|
|
112
118
|
const parserListItem = this.parserList[i]
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
if (
|
|
120
|
+
contentType.slice(0, parserListItem.length) === parserListItem &&
|
|
121
|
+
(contentType.length === parserListItem.length || contentType.charCodeAt(parserListItem.length) === 59 /* `;` */ || contentType.charCodeAt(parserListItem.length) === 32 /* ` ` */)
|
|
122
|
+
) {
|
|
123
|
+
parser = this.customParsers.get(parserListItem)
|
|
116
124
|
this.cache.set(contentType, parser)
|
|
117
125
|
return parser
|
|
118
126
|
}
|
|
@@ -121,9 +129,8 @@ ContentTypeParser.prototype.getParser = function (contentType) {
|
|
|
121
129
|
// eslint-disable-next-line no-var
|
|
122
130
|
for (var j = 0; j !== this.parserRegExpList.length; ++j) {
|
|
123
131
|
const parserRegExp = this.parserRegExpList[j]
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
// we set request content-type in cache to reduce parsing of MIME type
|
|
132
|
+
if (parserRegExp.test(contentType)) {
|
|
133
|
+
parser = this.customParsers.get(parserRegExp.toString())
|
|
127
134
|
this.cache.set(contentType, parser)
|
|
128
135
|
return parser
|
|
129
136
|
}
|
|
@@ -140,13 +147,19 @@ ContentTypeParser.prototype.removeAll = function () {
|
|
|
140
147
|
}
|
|
141
148
|
|
|
142
149
|
ContentTypeParser.prototype.remove = function (contentType) {
|
|
143
|
-
|
|
150
|
+
let parsers
|
|
144
151
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
if (typeof contentType === 'string') {
|
|
153
|
+
contentType = contentType.trim().toLowerCase()
|
|
154
|
+
parsers = this.parserList
|
|
155
|
+
} else {
|
|
156
|
+
if (!(contentType instanceof RegExp)) throw new FST_ERR_CTP_INVALID_TYPE()
|
|
157
|
+
contentType = contentType.toString()
|
|
158
|
+
parsers = this.parserRegExpList
|
|
159
|
+
}
|
|
148
160
|
|
|
149
|
-
const
|
|
161
|
+
const removed = this.customParsers.delete(contentType)
|
|
162
|
+
const idx = parsers.findIndex(ct => ct.toString() === contentType)
|
|
150
163
|
|
|
151
164
|
if (idx > -1) {
|
|
152
165
|
parsers.splice(idx, 1)
|
|
@@ -182,7 +195,7 @@ ContentTypeParser.prototype.run = function (contentType, handler, request, reply
|
|
|
182
195
|
} else {
|
|
183
196
|
const result = parser.fn(request, request[kRequestPayloadStream], done)
|
|
184
197
|
|
|
185
|
-
if (
|
|
198
|
+
if (typeof result?.then === 'function') {
|
|
186
199
|
result.then(body => done(null, body), done)
|
|
187
200
|
}
|
|
188
201
|
}
|
|
@@ -205,9 +218,7 @@ ContentTypeParser.prototype.run = function (contentType, handler, request, reply
|
|
|
205
218
|
function rawBody (request, reply, options, parser, done) {
|
|
206
219
|
const asString = parser.asString
|
|
207
220
|
const limit = options.limit === null ? parser.bodyLimit : options.limit
|
|
208
|
-
const contentLength = request.headers['content-length']
|
|
209
|
-
? NaN
|
|
210
|
-
: Number(request.headers['content-length'])
|
|
221
|
+
const contentLength = Number(request.headers['content-length'])
|
|
211
222
|
|
|
212
223
|
if (contentLength > limit) {
|
|
213
224
|
// We must close the connection as the client is going
|
|
@@ -373,60 +384,15 @@ function removeAllContentTypeParsers () {
|
|
|
373
384
|
this[kContentTypeParser].removeAll()
|
|
374
385
|
}
|
|
375
386
|
|
|
376
|
-
function
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
// we do a full-text search
|
|
383
|
-
// reject essence content-type before checking parameters
|
|
384
|
-
if (contentType.type.indexOf(parserListItem.type) === -1) return false
|
|
385
|
-
for (const key of parserListItem.parameterKeys) {
|
|
386
|
-
// reject when missing parameters
|
|
387
|
-
if (!(key in contentType.parameters)) return false
|
|
388
|
-
// reject when parameters do not match
|
|
389
|
-
if (contentType.parameters[key] !== parserListItem.parameters[key]) return false
|
|
390
|
-
}
|
|
391
|
-
return true
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
function compareRegExpContentType (contentType, essenceMIMEType, regexp) {
|
|
396
|
-
if (regexp.isEssence) {
|
|
397
|
-
// we do essence check
|
|
398
|
-
return regexp.test(essenceMIMEType)
|
|
399
|
-
} else {
|
|
400
|
-
// when the content-type includes parameters
|
|
401
|
-
// we do a full-text match
|
|
402
|
-
return regexp.test(contentType)
|
|
387
|
+
function validateRegExp (regexp) {
|
|
388
|
+
// RegExp should either start with ^ or include ;?
|
|
389
|
+
// It can ensure the user is properly detect the essence
|
|
390
|
+
// MIME types.
|
|
391
|
+
if (regexp.source[0] !== '^' && regexp.source.includes(';?') === false) {
|
|
392
|
+
FSTSEC001(regexp.source)
|
|
403
393
|
}
|
|
404
394
|
}
|
|
405
395
|
|
|
406
|
-
function ParserListItem (contentType) {
|
|
407
|
-
this.name = contentType
|
|
408
|
-
// we pre-calculate all the needed information
|
|
409
|
-
// before content-type comparison
|
|
410
|
-
const parsed = safeParseContentType(contentType)
|
|
411
|
-
this.isEssence = contentType.indexOf(';') === -1
|
|
412
|
-
// we should not allow empty string for parser list item
|
|
413
|
-
// because it would become a match-all handler
|
|
414
|
-
if (this.isEssence === false && parsed.type === '') {
|
|
415
|
-
// handle semicolon or empty string
|
|
416
|
-
const tmp = contentType.split(';', 1)[0]
|
|
417
|
-
this.type = tmp === '' ? contentType : tmp
|
|
418
|
-
} else {
|
|
419
|
-
this.type = parsed.type
|
|
420
|
-
}
|
|
421
|
-
this.parameters = parsed.parameters
|
|
422
|
-
this.parameterKeys = Object.keys(parsed.parameters)
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
// used in ContentTypeParser.remove
|
|
426
|
-
ParserListItem.prototype.toString = function () {
|
|
427
|
-
return this.name
|
|
428
|
-
}
|
|
429
|
-
|
|
430
396
|
module.exports = ContentTypeParser
|
|
431
397
|
module.exports.helpers = {
|
|
432
398
|
buildContentTypeParser,
|
package/lib/decorate.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const {
|
|
6
4
|
kReply,
|
|
7
5
|
kRequest,
|
|
@@ -13,11 +11,10 @@ const {
|
|
|
13
11
|
FST_ERR_DEC_ALREADY_PRESENT,
|
|
14
12
|
FST_ERR_DEC_MISSING_DEPENDENCY,
|
|
15
13
|
FST_ERR_DEC_AFTER_START,
|
|
14
|
+
FST_ERR_DEC_REFERENCE_TYPE,
|
|
16
15
|
FST_ERR_DEC_DEPENDENCY_INVALID_TYPE
|
|
17
16
|
} = require('./errors')
|
|
18
17
|
|
|
19
|
-
const { FSTDEP006 } = require('./warnings')
|
|
20
|
-
|
|
21
18
|
function decorate (instance, name, fn, dependencies) {
|
|
22
19
|
if (Object.prototype.hasOwnProperty.call(instance, name)) {
|
|
23
20
|
throw new FST_ERR_DEC_ALREADY_PRESENT(name)
|
|
@@ -58,7 +55,7 @@ function decorateConstructor (konstructor, name, fn, dependencies) {
|
|
|
58
55
|
|
|
59
56
|
function checkReferenceType (name, fn) {
|
|
60
57
|
if (typeof fn === 'object' && fn && !(typeof fn.getter === 'function' || typeof fn.setter === 'function')) {
|
|
61
|
-
|
|
58
|
+
throw new FST_ERR_DEC_REFERENCE_TYPE(name, typeof fn)
|
|
62
59
|
}
|
|
63
60
|
}
|
|
64
61
|
|
|
@@ -102,8 +99,7 @@ function checkDependencies (instance, name, deps) {
|
|
|
102
99
|
throw new FST_ERR_DEC_DEPENDENCY_INVALID_TYPE(name)
|
|
103
100
|
}
|
|
104
101
|
|
|
105
|
-
|
|
106
|
-
for (var i = 0; i !== deps.length; ++i) {
|
|
102
|
+
for (let i = 0; i !== deps.length; ++i) {
|
|
107
103
|
if (!checkExistence(instance, deps[i])) {
|
|
108
104
|
throw new FST_ERR_DEC_MISSING_DEPENDENCY(deps[i])
|
|
109
105
|
}
|
package/lib/error-serializer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// This file is autogenerated by build/build-error-serializer.js, do not edit
|
|
2
|
-
/*
|
|
2
|
+
/* c8 ignore start */
|
|
3
3
|
|
|
4
4
|
'use strict'
|
|
5
5
|
|
|
@@ -117,3 +117,4 @@ let addComma = false
|
|
|
117
117
|
return main
|
|
118
118
|
|
|
119
119
|
}(validator, serializer)
|
|
120
|
+
/* c8 ignore stop */
|