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.
Files changed (514) hide show
  1. package/.idea/fastify.iml +12 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  3. package/.idea/jsLibraryMappings.xml +6 -0
  4. package/.idea/jsLinters/eslint.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/vcs.xml +6 -0
  7. package/.markdownlint-cli2.yaml +1 -1
  8. package/.taprc +4 -8
  9. package/README.md +3 -6
  10. package/build/build-error-serializer.js +4 -1
  11. package/build/build-validation.js +5 -4
  12. package/docs/Guides/Database.md +1 -1
  13. package/docs/Guides/Delay-Accepting-Requests.md +3 -3
  14. package/docs/Guides/Ecosystem.md +2 -0
  15. package/docs/Guides/Migration-Guide-V5.md +20 -0
  16. package/docs/Guides/Write-Type-Provider.md +4 -2
  17. package/docs/Reference/ContentTypeParser.md +30 -1
  18. package/docs/Reference/Decorators.md +42 -16
  19. package/docs/Reference/Errors.md +10 -2
  20. package/docs/Reference/Hooks.md +48 -14
  21. package/docs/Reference/Logging.md +5 -5
  22. package/docs/Reference/Reply.md +23 -18
  23. package/docs/Reference/Request.md +5 -1
  24. package/docs/Reference/Routes.md +24 -28
  25. package/docs/Reference/Server.md +14 -53
  26. package/docs/Reference/Type-Providers.md +21 -26
  27. package/docs/Reference/TypeScript.md +46 -29
  28. package/docs/Reference/Warnings.md +0 -8
  29. package/eslint.config.js +27 -0
  30. package/examples/typescript-server.ts +14 -14
  31. package/fastify.d.ts +15 -14
  32. package/fastify.js +41 -15
  33. package/lib/configValidator.js +94 -76
  34. package/lib/contentTypeParser.js +54 -88
  35. package/lib/decorate.js +3 -7
  36. package/lib/error-serializer.js +2 -1
  37. package/lib/errors.js +31 -6
  38. package/lib/handleRequest.js +70 -39
  39. package/lib/httpMethods.js +34 -18
  40. package/lib/logger.js +24 -6
  41. package/lib/pluginUtils.js +5 -5
  42. package/lib/reply.js +7 -10
  43. package/lib/request.js +37 -19
  44. package/lib/route.js +6 -34
  45. package/lib/server.js +62 -123
  46. package/lib/warnings.js +24 -29
  47. package/lib/wrapThenable.js +46 -22
  48. package/package.json +38 -58
  49. package/test/404s.test.js +8 -12
  50. package/test/async-await.test.js +46 -2
  51. package/test/build/error-serializer.test.js +4 -2
  52. package/test/check.test.js +225 -0
  53. package/test/close-pipelining.test.js +2 -41
  54. package/test/close.test.js +1 -41
  55. package/test/content-parser.test.js +69 -117
  56. package/test/custom-parser.1.test.js +40 -1
  57. package/test/decorator-namespace.test._js_ +31 -0
  58. package/test/decorator.test.js +92 -43
  59. package/test/delete.test.js +21 -1
  60. package/test/diagnostics-channel/404.test.js +57 -0
  61. package/test/diagnostics-channel/async-delay-request.test.js +74 -0
  62. package/test/diagnostics-channel/async-request.test.js +72 -0
  63. package/test/diagnostics-channel/error-before-handler.test.js +36 -0
  64. package/test/diagnostics-channel/error-request.test.js +61 -0
  65. package/test/diagnostics-channel/error-status.test.js +39 -0
  66. package/test/{diagnostics-channel.test.js → diagnostics-channel/init.test.js} +6 -16
  67. package/test/diagnostics-channel/sync-delay-request.test.js +58 -0
  68. package/test/diagnostics-channel/sync-request-reply.test.js +58 -0
  69. package/test/diagnostics-channel/sync-request.test.js +61 -0
  70. package/test/encapsulated-error-handler.test.js +201 -14
  71. package/test/esm/index.test.js +2 -12
  72. package/test/findRoute.test.js +16 -0
  73. package/test/genReqId.test.js +9 -0
  74. package/test/get.test.js +28 -0
  75. package/test/has-route.test.js +1 -1
  76. package/test/helper.js +1 -5
  77. package/test/hooks.test.js +0 -4
  78. package/test/http2/constraint.test.js +22 -1
  79. package/test/http2/plain.test.js +21 -6
  80. package/test/http2/secure.test.js +12 -1
  81. package/test/https/https.test.js +57 -0
  82. package/test/inject.test.js +1 -2
  83. package/test/internals/decorator.test.js +0 -2
  84. package/test/internals/errors.test.js +57 -17
  85. package/test/internals/handleRequest.test.js +5 -1
  86. package/test/internals/initialConfig.test.js +5 -5
  87. package/test/internals/logger.test.js +31 -2
  88. package/test/internals/reply.test.js +6 -78
  89. package/test/internals/request.test.js +13 -11
  90. package/test/listen.1.test.js +5 -15
  91. package/test/listen.5.test.js +99 -0
  92. package/test/logger/instantiation.test.js +8 -8
  93. package/test/logger/logging.test.js +4 -4
  94. package/test/logger/options.test.js +102 -21
  95. package/test/logger/response.test.js +6 -6
  96. package/test/maxRequestsPerSocket.test.js +2 -5
  97. package/test/method-missing.test.js +24 -0
  98. package/test/plugin.1.test.js +2 -4
  99. package/test/plugin.2.test.js +0 -2
  100. package/test/plugin.3.test.js +0 -2
  101. package/test/plugin.4.test.js +92 -56
  102. package/test/register.test.js +2 -4
  103. package/test/reply-earlyHints.test.js +98 -0
  104. package/test/reply-error.test.js +0 -2
  105. package/test/route-hooks.test.js +0 -1
  106. package/test/route-shorthand.test.js +60 -0
  107. package/test/schema-special-usage.test.js +1 -1
  108. package/test/server.test.js +17 -2
  109. package/test/stream.2.test.js +1 -1
  110. package/test/stream.4.test.js +0 -42
  111. package/test/stream.5.test.js +2 -2
  112. package/test/trust-proxy.test.js +33 -27
  113. package/test/types/errors.test-d.ts +0 -2
  114. package/test/types/fastify.test-d.ts +14 -12
  115. package/test/types/hooks.test-d.ts +1 -0
  116. package/test/types/import.ts +1 -0
  117. package/test/types/instance.test-d.ts +10 -51
  118. package/test/types/logger.test-d.ts +43 -6
  119. package/test/types/plugin.test-d.ts +5 -2
  120. package/test/types/register.test-d.ts +2 -2
  121. package/test/types/reply.test-d.ts +13 -12
  122. package/test/types/request.test-d.ts +19 -8
  123. package/test/types/route.test-d.ts +30 -2
  124. package/test/types/schema.test-d.ts +2 -2
  125. package/test/types/serverFactory.test-d.ts +1 -1
  126. package/test/types/type-provider.test-d.ts +59 -12
  127. package/test/types/using.test-d.ts +4 -1
  128. package/test/url-rewriting.test.js +3 -2
  129. package/test/useSemicolonDelimiter.test.js +3 -6
  130. package/test/versioned-routes.test.js +1 -1
  131. package/test/web-api.test.js +0 -6
  132. package/types/content-type-parser.d.ts +3 -3
  133. package/types/context.d.ts +0 -1
  134. package/types/errors.d.ts +1 -0
  135. package/types/hooks.d.ts +6 -6
  136. package/types/instance.d.ts +28 -41
  137. package/types/logger.d.ts +3 -3
  138. package/types/plugin.d.ts +3 -3
  139. package/types/reply.d.ts +9 -12
  140. package/types/request.d.ts +5 -3
  141. package/types/route.d.ts +31 -31
  142. package/types/schema.d.ts +3 -3
  143. package/types/serverFactory.d.ts +2 -2
  144. package/types/type-provider.d.ts +22 -12
  145. package/types/utils.d.ts +18 -23
  146. package/.c8rc.json +0 -8
  147. package/.eslintrc +0 -4
  148. package/.tap/processinfo/029eb7a1-1942-40bc-98e2-cef3b7a14b5e.json +0 -268
  149. package/.tap/processinfo/03c196c6-01c3-4268-a9b5-298dff18a873.json +0 -269
  150. package/.tap/processinfo/04bbabba-8611-4908-9092-dfa9fcc13327.json +0 -268
  151. package/.tap/processinfo/05d8a743-3edf-4e2d-ae5a-dc99d0855ba5.json +0 -272
  152. package/.tap/processinfo/07718963-36a8-4d87-82ad-366c877a5247.json +0 -268
  153. package/.tap/processinfo/08fe3bde-5814-4308-9158-cdf1e47391b7.json +0 -268
  154. package/.tap/processinfo/0a3e3fb0-eabf-4532-ae80-20434da22678.json +0 -268
  155. package/.tap/processinfo/0caf2a75-4b3a-46c4-9b41-c7e450e5e15f.json +0 -268
  156. package/.tap/processinfo/0cf35d52-e5b2-4884-bcf0-b0ab3017b689.json +0 -268
  157. package/.tap/processinfo/0e666134-5013-4ecd-9ee6-59b22716c39c.json +0 -268
  158. package/.tap/processinfo/1087b811-4ec4-4f91-92b4-a78a51a437de.json +0 -268
  159. package/.tap/processinfo/13709ed3-b68c-42cf-8472-b0c4b8a89d2b.json +0 -268
  160. package/.tap/processinfo/13ac2f18-d0e0-439f-bc86-2ff0119af857.json +0 -268
  161. package/.tap/processinfo/13e47e0e-f6e8-4381-8a42-923b661f4a4f.json +0 -268
  162. package/.tap/processinfo/143f7d43-b8e8-4666-b482-f28fb37160ee.json +0 -268
  163. package/.tap/processinfo/14f3801d-03ab-4db3-9df5-c5d47e0a8cf0.json +0 -270
  164. package/.tap/processinfo/15a07dad-4bcd-442c-95e0-30c31f2b9818.json +0 -273
  165. package/.tap/processinfo/191ad3ad-04d8-4fb9-b119-ad2811f9b925.json +0 -243
  166. package/.tap/processinfo/1b25d54b-62d3-44cd-b581-31e705522fae.json +0 -268
  167. package/.tap/processinfo/1b7cb260-f04b-4135-a4fe-093081c4706f.json +0 -268
  168. package/.tap/processinfo/1e395d63-4815-4c77-aa47-df3709cc0ef9.json +0 -268
  169. package/.tap/processinfo/1e7f6a54-3abf-4771-863a-585cba110aec.json +0 -268
  170. package/.tap/processinfo/21a15e1d-0b41-47d8-b03d-0ba130969034.json +0 -244
  171. package/.tap/processinfo/21e02016-9ecd-4983-8417-9c74d224644f.json +0 -269
  172. package/.tap/processinfo/2327d941-d0d5-4762-b386-02a9a27ad28e.json +0 -268
  173. package/.tap/processinfo/23d39204-eac9-4f57-8db4-ffa996227fbd.json +0 -268
  174. package/.tap/processinfo/2493875a-0ac6-4d53-993c-f44471fd0678.json +0 -268
  175. package/.tap/processinfo/2698669f-f1e7-4a12-a687-8d58177be2b0.json +0 -269
  176. package/.tap/processinfo/2862b053-0a3d-46d7-9381-ffcb06287609.json +0 -268
  177. package/.tap/processinfo/2ac1b8d6-ac92-40e2-a59a-7681069f487c.json +0 -268
  178. package/.tap/processinfo/2c75e5f7-c4ef-47e4-a1c4-105eef6c0fab.json +0 -242
  179. package/.tap/processinfo/2e2c45cd-718b-4e5a-bf88-f801630f2803.json +0 -268
  180. package/.tap/processinfo/2f9ca478-3e03-4cce-a0bc-fcdc86d7c316.json +0 -268
  181. package/.tap/processinfo/30e3117f-fb74-456f-8f02-527e9eb9fcc3.json +0 -268
  182. package/.tap/processinfo/332be679-63c7-4b49-8b87-ef55995ada2d.json +0 -268
  183. package/.tap/processinfo/37c36f95-07f9-4ef0-8ab4-9e107d51b605.json +0 -269
  184. package/.tap/processinfo/3874eae2-f3db-44ef-9a9f-c8169d4b2b76.json +0 -268
  185. package/.tap/processinfo/38a7c3da-a411-41d0-8993-9deefd23500d.json +0 -268
  186. package/.tap/processinfo/3a7b6dbd-e153-4ce5-b557-21fb82009983.json +0 -269
  187. package/.tap/processinfo/3c6731ec-936d-470f-b7b0-0c87b54be051.json +0 -268
  188. package/.tap/processinfo/3c850ea9-4ef0-4044-a3fd-fbadfa9d543e.json +0 -268
  189. package/.tap/processinfo/3e4e15e0-a325-46f0-be57-5fd374560b7a.json +0 -269
  190. package/.tap/processinfo/3ed868e0-887c-402a-9f22-b1fdb74b4da0.json +0 -268
  191. package/.tap/processinfo/405498d7-5854-4ce1-a7dc-06920932f26d.json +0 -268
  192. package/.tap/processinfo/40b7eb19-ae35-4490-8a11-eb91a573c590.json +0 -268
  193. package/.tap/processinfo/40bb1260-d856-4248-8939-a0a05e322041.json +0 -268
  194. package/.tap/processinfo/41252e0b-7f69-44cc-b356-dd94bcbfdb29.json +0 -268
  195. package/.tap/processinfo/418fa710-e2fd-4508-b533-c179958da464.json +0 -269
  196. package/.tap/processinfo/433ef009-63aa-48fe-8e5d-c725228fa2fc.json +0 -268
  197. package/.tap/processinfo/44bf577c-9c01-4197-bd29-2e1ae888c4d4.json +0 -268
  198. package/.tap/processinfo/458fb7f2-20b9-48a2-8853-403c9851f605.json +0 -268
  199. package/.tap/processinfo/46b9892b-bb23-4b86-b0fa-9297f08c611a.json +0 -268
  200. package/.tap/processinfo/46bd9aaf-6cf3-4bd5-b90d-e136a7299a8e.json +0 -268
  201. package/.tap/processinfo/4779aa5f-e57a-4fcc-87e2-7d0bd4fca27f.json +0 -268
  202. package/.tap/processinfo/47b73f4b-ab31-49e1-97fd-8436dbe4bdf3.json +0 -269
  203. package/.tap/processinfo/49dba52e-e0c9-445d-8e9d-6d9ebe3ce6c4.json +0 -268
  204. package/.tap/processinfo/4b1dbc61-4e65-4c56-9784-2036f369038a.json +0 -268
  205. package/.tap/processinfo/4b6f0b40-43ef-4668-83a0-e07e28509df5.json +0 -268
  206. package/.tap/processinfo/4c236f70-f532-460b-8f7a-dd973301d493.json +0 -268
  207. package/.tap/processinfo/4d92b707-a268-48b8-885b-004d3a288c41.json +0 -269
  208. package/.tap/processinfo/4ff10bae-7c97-4c0a-b712-6c0d2f8c0e8e.json +0 -270
  209. package/.tap/processinfo/50f95bd5-ae12-4d83-99f4-ae9b0690c6a8.json +0 -268
  210. package/.tap/processinfo/557e4a49-d99c-4a63-b2f2-f33d897ab874.json +0 -268
  211. package/.tap/processinfo/589fd21a-8319-4abf-8cf7-82cb4a463a4b.json +0 -269
  212. package/.tap/processinfo/5a872f3a-949f-40be-8004-d739d034255c.json +0 -272
  213. package/.tap/processinfo/5abc301a-23da-424d-891e-3afbaff9156c.json +0 -269
  214. package/.tap/processinfo/5c31614c-a766-4837-ab59-dd6977166f72.json +0 -253
  215. package/.tap/processinfo/5d1e90c8-d819-4901-b022-f9ea4cd81978.json +0 -268
  216. package/.tap/processinfo/5d283e67-f31d-4fa8-a559-a1d8e82ee046.json +0 -269
  217. package/.tap/processinfo/5df505bc-6a4b-4c41-822f-51e2d7111de8.json +0 -268
  218. package/.tap/processinfo/5eaf64a2-fbfd-40e7-b391-c30f744b2bf1.json +0 -269
  219. package/.tap/processinfo/5ef5ede0-6436-4938-8401-d32ad4bffd5d.json +0 -268
  220. package/.tap/processinfo/606f05c0-8293-41db-bc92-eea82123697f.json +0 -269
  221. package/.tap/processinfo/6446806d-6cab-4c1d-a9ed-6bccaf3c4ea9.json +0 -268
  222. package/.tap/processinfo/64da7e08-925d-444d-98de-6568c6115d8d.json +0 -269
  223. package/.tap/processinfo/6917da6d-d2dc-466a-a893-7fb7412dde96.json +0 -268
  224. package/.tap/processinfo/69bbeee0-c398-4ccf-98b3-fb625a63bab4.json +0 -268
  225. package/.tap/processinfo/6da6ea8f-3370-4703-b230-90159531f766.json +0 -268
  226. package/.tap/processinfo/6ecffe1f-3016-4c11-9294-b488baced99f.json +0 -268
  227. package/.tap/processinfo/6f23f41f-ccbd-48cb-9ab6-311db0cfb65c.json +0 -270
  228. package/.tap/processinfo/70168912-9bb2-4334-bb89-041f1764cddf.json +0 -268
  229. package/.tap/processinfo/713a674e-40e1-46b4-866e-949d57c1a9f9.json +0 -270
  230. package/.tap/processinfo/730254d4-eacb-4cdf-80f4-8da22341cde5.json +0 -268
  231. package/.tap/processinfo/7344e559-c546-416f-8f1b-0f9fe12c6f02.json +0 -268
  232. package/.tap/processinfo/7556217a-0155-448f-b4d4-bec1bb0f6040.json +0 -269
  233. package/.tap/processinfo/7572079c-166c-4c4c-85ff-89b9430b214f.json +0 -268
  234. package/.tap/processinfo/7808180f-1974-47cd-bba2-2d6b8b711d65.json +0 -273
  235. package/.tap/processinfo/796dde83-da66-4db2-8d27-d45a3627c9c7.json +0 -268
  236. package/.tap/processinfo/7979819f-3723-48be-9f55-be700e689441.json +0 -270
  237. package/.tap/processinfo/7a664d39-d7f5-42f9-89df-15563048fab6.json +0 -268
  238. package/.tap/processinfo/7b047b72-01d9-4217-857c-93341651b4b3.json +0 -269
  239. package/.tap/processinfo/7ce41af6-7961-45ae-8c6f-b6e1c5692a48.json +0 -268
  240. package/.tap/processinfo/7e1de1c6-127e-463d-9357-081ee33ef5ce.json +0 -269
  241. package/.tap/processinfo/81ac7a7f-b0c0-4ef6-82cb-c718ea84e152.json +0 -268
  242. package/.tap/processinfo/851a058f-a497-4b10-a0b7-c9182d9c4d5a.json +0 -268
  243. package/.tap/processinfo/86502974-c245-4194-ade4-d9c6fdbb757e.json +0 -268
  244. package/.tap/processinfo/86b9786f-4a98-43b8-882a-5f936b876f08.json +0 -241
  245. package/.tap/processinfo/8a3fe726-86ab-4300-8d73-7eacbbc02a05.json +0 -268
  246. package/.tap/processinfo/8adf928b-c963-4ba0-9c35-606fcbd8a2aa.json +0 -272
  247. package/.tap/processinfo/8b31a6d8-1a33-4a27-93ca-1c5b364be068.json +0 -240
  248. package/.tap/processinfo/8ec12773-6b18-49a2-8e52-874c797df965.json +0 -833
  249. package/.tap/processinfo/8edb9502-3420-42fb-a602-e5de93be2df1.json +0 -268
  250. package/.tap/processinfo/8fc572e6-9828-4f98-a49c-9e081b2193c4.json +0 -242
  251. package/.tap/processinfo/8fee2d30-c5dd-4fae-9cf2-2ef8dd0f90de.json +0 -834
  252. package/.tap/processinfo/92cc0496-5f26-4370-8212-18136b972f99.json +0 -268
  253. package/.tap/processinfo/93a3f064-3f6e-4f49-becb-f7925f2961a9.json +0 -268
  254. package/.tap/processinfo/967e3697-8310-4a19-8dd5-927ac8bd6c79.json +0 -269
  255. package/.tap/processinfo/97225e23-9d30-4287-b3f5-72bccebec50b.json +0 -268
  256. package/.tap/processinfo/9a363bc6-4e65-47e8-94ca-26a9db428fb4.json +0 -268
  257. package/.tap/processinfo/9d2fe462-57fa-43f1-b02c-d188f15de30b.json +0 -270
  258. package/.tap/processinfo/a00b6cda-feb7-4b8a-8179-4c43bc29d670.json +0 -269
  259. package/.tap/processinfo/a017cbd5-4ac7-49e1-8c77-1bf4f6e7f2a6.json +0 -271
  260. package/.tap/processinfo/a1277309-1984-48f8-b60b-f5e8639736be.json +0 -271
  261. package/.tap/processinfo/a16bf53e-4337-48ff-88fa-67f55738e0f5.json +0 -268
  262. package/.tap/processinfo/a3a9848f-440e-41bb-9b0b-568bcfee0ddc.json +0 -268
  263. package/.tap/processinfo/a468c11f-f2f1-4e92-9ba0-6d28b6569b72.json +0 -268
  264. package/.tap/processinfo/a5880465-68f1-46b3-84a5-0da389d0bc67.json +0 -268
  265. package/.tap/processinfo/a666f394-39b4-44ad-8e74-abebf74dde3b.json +0 -270
  266. package/.tap/processinfo/af09d8ca-7053-4410-b514-b22c47f5979f.json +0 -268
  267. package/.tap/processinfo/af203309-28aa-459d-a56e-d88833695521.json +0 -268
  268. package/.tap/processinfo/afa2f7b6-dcd2-4d90-bf3c-54ba8b6800eb.json +0 -268
  269. package/.tap/processinfo/b231291d-ef14-4ff0-85f9-38a73a5408f8.json +0 -268
  270. package/.tap/processinfo/b3d3f2a1-a9fc-4d88-b122-fae90248cd59.json +0 -268
  271. package/.tap/processinfo/b834bf83-26c4-403a-8e91-eb15fe4b0b5d.json +0 -268
  272. package/.tap/processinfo/b8786fd7-47df-4ac1-8d6f-2d4c7623c681.json +0 -268
  273. package/.tap/processinfo/b9758f53-7f5a-4b03-8684-8a42ad644e5a.json +0 -268
  274. package/.tap/processinfo/bd194ea2-a21a-4604-b225-ee48abf1e607.json +0 -242
  275. package/.tap/processinfo/bd7ced53-3872-43b7-ad73-3352e50b728b.json +0 -268
  276. package/.tap/processinfo/be50295b-7e50-46cd-8bf1-637bf222699c.json +0 -268
  277. package/.tap/processinfo/bec61dd9-aa52-4e6c-8e37-5c9c10e935fd.json +0 -268
  278. package/.tap/processinfo/c015adf9-1d60-447e-87b5-b2031fe55bba.json +0 -268
  279. package/.tap/processinfo/c0666afa-7f64-45bd-97fb-145df1380157.json +0 -268
  280. package/.tap/processinfo/c2c0c012-c1c0-4457-84d6-dadba8396c94.json +0 -268
  281. package/.tap/processinfo/c3dd3ecd-737b-47ce-a917-54341c7bbed3.json +0 -268
  282. package/.tap/processinfo/c41ac06d-64b8-4bb3-bf56-0551f5a48f4b.json +0 -268
  283. package/.tap/processinfo/c4235bfb-a2aa-4271-9c6b-3ceb370219b1.json +0 -268
  284. package/.tap/processinfo/c4e6f24f-288c-493c-b6f0-02924aeb6758.json +0 -270
  285. package/.tap/processinfo/c54227bb-4a7b-40bb-bfe6-b54fe55078f3.json +0 -268
  286. package/.tap/processinfo/c699de91-3b0b-4466-9418-6910a3eb640a.json +0 -269
  287. package/.tap/processinfo/c74e2f37-451a-4577-ac18-e597fbd9a1d4.json +0 -269
  288. package/.tap/processinfo/c90cccec-5b4b-445f-a935-ac22859675d0.json +0 -252
  289. package/.tap/processinfo/c9dd6c7d-0d16-45e5-87ae-117388bf2994.json +0 -268
  290. package/.tap/processinfo/ca2e48fb-58c5-47fc-ad2e-263838aea42c.json +0 -272
  291. package/.tap/processinfo/ca87351d-c710-45c1-838a-16bccac59874.json +0 -273
  292. package/.tap/processinfo/cdb4a671-5776-4944-91b9-c456c58841ef.json +0 -268
  293. package/.tap/processinfo/cf10fdc8-6a87-447a-9e12-45f447af61f3.json +0 -244
  294. package/.tap/processinfo/cf3f1f08-643e-4f24-82ca-40f7a349c3d1.json +0 -268
  295. package/.tap/processinfo/d091172a-06a5-469b-82a9-8fefe3dd99da.json +0 -240
  296. package/.tap/processinfo/d1675431-61d6-45f8-a010-6e654112a00a.json +0 -272
  297. package/.tap/processinfo/d2d54aa2-c221-4ad4-b6b7-0c58e3c3679c.json +0 -269
  298. package/.tap/processinfo/d4f3c95a-ddbe-419d-bce0-dd6acceee21f.json +0 -268
  299. package/.tap/processinfo/d54ed8f1-43c3-478a-90d3-2c8aced723f2.json +0 -269
  300. package/.tap/processinfo/d6e5a2a6-4647-4d98-916c-aec4ace54a65.json +0 -268
  301. package/.tap/processinfo/d7280c64-45e6-4b12-affc-3ac9a5d4014a.json +0 -268
  302. package/.tap/processinfo/d82c8367-d825-4405-88df-07298f6ef840.json +0 -269
  303. package/.tap/processinfo/d8f97e53-e921-4d33-9c8d-2f7e807a9425.json +0 -268
  304. package/.tap/processinfo/da546a73-9714-4f8c-bdbb-e42730edbcfa.json +0 -268
  305. package/.tap/processinfo/da7fb7fb-1da4-49f8-a3ee-d4ea623c01a5.json +0 -268
  306. package/.tap/processinfo/daa6a016-4f0c-4050-923c-2022e0bb21d8.json +0 -268
  307. package/.tap/processinfo/db9a251d-8540-4719-b464-e7d5febd97d1.json +0 -240
  308. package/.tap/processinfo/dc10c603-8e58-4611-baa3-44da2578d07a.json +0 -268
  309. package/.tap/processinfo/dde56c1a-858c-47cc-b0bb-61279620ac17.json +0 -268
  310. package/.tap/processinfo/e0d9c4ea-f7c7-4c64-8ced-66dc6f0ac5d2.json +0 -271
  311. package/.tap/processinfo/e121454f-5dfa-4209-ba15-4c39840871f2.json +0 -831
  312. package/.tap/processinfo/e1f43e40-c3fe-4eb8-a713-d5910cc6b25a.json +0 -268
  313. package/.tap/processinfo/e4575e7a-f00e-488b-94e1-8f877b54725e.json +0 -268
  314. package/.tap/processinfo/e9ad667e-8603-4488-af64-449cc9532803.json +0 -268
  315. package/.tap/processinfo/eb26a697-e5e2-4730-aeea-bcb9c49afd4d.json +0 -268
  316. package/.tap/processinfo/eb29d1c3-feaf-4744-9d84-cf257e8269b0.json +0 -268
  317. package/.tap/processinfo/ee720c0a-ed64-4e7e-8c0a-139c7b9725d2.json +0 -268
  318. package/.tap/processinfo/ef88c13a-87b2-49e4-a683-7b812505cd6f.json +0 -268
  319. package/.tap/processinfo/f4ed6948-dac0-4128-9f86-d083b6918ea7.json +0 -268
  320. package/.tap/processinfo/f7544c01-8ac7-4e42-8ad5-c4d62e094d1f.json +0 -270
  321. package/.tap/processinfo/f7cee4b3-7bcc-4591-a628-5629b0b41c9e.json +0 -268
  322. package/.tap/processinfo/f9c0a1f7-c1a4-44d3-ae3f-8c1eb42cd746.json +0 -269
  323. package/.tap/processinfo/fc46b4da-79db-4201-af7e-34bb17f92d69.json +0 -270
  324. package/.tap/processinfo/fccc0056-03c4-40cb-9d0b-2db4bbe573c1.json +0 -268
  325. package/.tap/processinfo/fd2df572-54d7-4ce7-b7aa-a2b4b00d4127.json +0 -254
  326. package/.tap/processinfo/fea9377f-b473-484d-bee6-ac7f49e50937.json +0 -269
  327. package/.tap/processinfo/feb516dc-abda-46e6-9b42-d37adfc63366.json +0 -268
  328. package/.tap/processinfo/ff0fda4c-aa2e-4236-906e-fdfb6bd6632e.json +0 -269
  329. package/.tap/test-results/test/404s.test.js.tap +0 -623
  330. package/.tap/test-results/test/500s.test.js.tap +0 -64
  331. package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +0 -36
  332. package/.tap/test-results/test/als.test.js.tap +0 -15
  333. package/.tap/test-results/test/async-await.test.js.tap +0 -184
  334. package/.tap/test-results/test/async-dispose.test.js.tap +0 -8
  335. package/.tap/test-results/test/async_hooks.test.js.tap +0 -10
  336. package/.tap/test-results/test/bodyLimit.test.js.tap +0 -48
  337. package/.tap/test-results/test/buffer.test.js.tap +0 -20
  338. package/.tap/test-results/test/build/error-serializer.test.js.tap +0 -8
  339. package/.tap/test-results/test/build/version.test.js.tap +0 -7
  340. package/.tap/test-results/test/case-insensitive.test.js.tap +0 -36
  341. package/.tap/test-results/test/chainable.test.js.tap +0 -17
  342. package/.tap/test-results/test/check.test.js.tap +0 -10
  343. package/.tap/test-results/test/childLoggerFactory.test.js.tap +0 -23
  344. package/.tap/test-results/test/client-timeout.test.js.tap +0 -7
  345. package/.tap/test-results/test/close-pipelining.test.js.tap +0 -15
  346. package/.tap/test-results/test/close.test.js.tap +0 -172
  347. package/.tap/test-results/test/connectionTimeout.test.js.tap +0 -12
  348. package/.tap/test-results/test/constrained-routes.test.js.tap +0 -173
  349. package/.tap/test-results/test/content-length.test.js.tap +0 -46
  350. package/.tap/test-results/test/content-parser.test.js.tap +0 -266
  351. package/.tap/test-results/test/content-type.test.js.tap +0 -14
  352. package/.tap/test-results/test/context-config.test.js.tap +0 -41
  353. package/.tap/test-results/test/copy.test.js.tap +0 -14
  354. package/.tap/test-results/test/custom-http-server.test.js.tap +0 -30
  355. package/.tap/test-results/test/custom-parser-async.test.js.tap +0 -21
  356. package/.tap/test-results/test/custom-parser.0.test.js.tap +0 -199
  357. package/.tap/test-results/test/custom-parser.1.test.js.tap +0 -90
  358. package/.tap/test-results/test/custom-parser.2.test.js.tap +0 -22
  359. package/.tap/test-results/test/custom-parser.3.test.js.tap +0 -53
  360. package/.tap/test-results/test/custom-parser.4.test.js.tap +0 -45
  361. package/.tap/test-results/test/custom-parser.5.test.js.tap +0 -41
  362. package/.tap/test-results/test/custom-querystring-parser.test.js.tap +0 -46
  363. package/.tap/test-results/test/decorator.test.js.tap +0 -465
  364. package/.tap/test-results/test/delete.test.js.tap +0 -110
  365. package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +0 -15
  366. package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +0 -25
  367. package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +0 -24
  368. package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +0 -9
  369. package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +0 -20
  370. package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +0 -10
  371. package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +0 -14
  372. package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +0 -16
  373. package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +0 -16
  374. package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +0 -19
  375. package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +0 -18
  376. package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +0 -243
  377. package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +0 -9
  378. package/.tap/test-results/test/esm/esm.test.mjs.tap +0 -8
  379. package/.tap/test-results/test/esm/index.test.js.tap +0 -8
  380. package/.tap/test-results/test/fastify-instance.test.js.tap +0 -114
  381. package/.tap/test-results/test/findRoute.test.js.tap +0 -37
  382. package/.tap/test-results/test/fluent-schema.test.js.tap +0 -36
  383. package/.tap/test-results/test/genReqId.test.js.tap +0 -106
  384. package/.tap/test-results/test/get.test.js.tap +0 -151
  385. package/.tap/test-results/test/handler-context.test.js.tap +0 -19
  386. package/.tap/test-results/test/has-route.test.js.tap +0 -30
  387. package/.tap/test-results/test/head.test.js.tap +0 -130
  388. package/.tap/test-results/test/header-overflow.test.js.tap +0 -16
  389. package/.tap/test-results/test/hooks-async.test.js.tap +0 -286
  390. package/.tap/test-results/test/hooks.on-listen.test.js.tap +0 -311
  391. package/.tap/test-results/test/hooks.on-ready.test.js.tap +0 -151
  392. package/.tap/test-results/test/hooks.test.js.tap +0 -966
  393. package/.tap/test-results/test/http2/closing.test.js.tap +0 -35
  394. package/.tap/test-results/test/http2/constraint.test.js.tap +0 -32
  395. package/.tap/test-results/test/http2/head.test.js.tap +0 -9
  396. package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +0 -8
  397. package/.tap/test-results/test/http2/plain.test.js.tap +0 -22
  398. package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +0 -40
  399. package/.tap/test-results/test/http2/secure.test.js.tap +0 -27
  400. package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +0 -9
  401. package/.tap/test-results/test/https/custom-https-server.test.js.tap +0 -10
  402. package/.tap/test-results/test/https/https.test.js.tap +0 -45
  403. package/.tap/test-results/test/imports.test.js.tap +0 -14
  404. package/.tap/test-results/test/inject.test.js.tap +0 -165
  405. package/.tap/test-results/test/internals/all.test.js.tap +0 -42
  406. package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +0 -14
  407. package/.tap/test-results/test/internals/context.test.js.tap +0 -14
  408. package/.tap/test-results/test/internals/decorator.test.js.tap +0 -51
  409. package/.tap/test-results/test/internals/errors.test.js.tap +0 -1212
  410. package/.tap/test-results/test/internals/handleRequest.test.js.tap +0 -69
  411. package/.tap/test-results/test/internals/hookRunner.test.js.tap +0 -143
  412. package/.tap/test-results/test/internals/hooks.test.js.tap +0 -45
  413. package/.tap/test-results/test/internals/initialConfig.test.js.tap +0 -125
  414. package/.tap/test-results/test/internals/logger.test.js.tap +0 -71
  415. package/.tap/test-results/test/internals/plugin.test.js.tap +0 -48
  416. package/.tap/test-results/test/internals/reply-serialize.test.js.tap +0 -166
  417. package/.tap/test-results/test/internals/reply.test.js.tap +0 -688
  418. package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +0 -74
  419. package/.tap/test-results/test/internals/request-validate.test.js.tap +0 -384
  420. package/.tap/test-results/test/internals/request.test.js.tap +0 -163
  421. package/.tap/test-results/test/internals/server.test.js.tap +0 -30
  422. package/.tap/test-results/test/internals/validation.test.js.tap +0 -121
  423. package/.tap/test-results/test/keepAliveTimeout.test.js.tap +0 -12
  424. package/.tap/test-results/test/listen.1.test.js.tap +0 -31
  425. package/.tap/test-results/test/listen.2.test.js.tap +0 -46
  426. package/.tap/test-results/test/listen.3.test.js.tap +0 -25
  427. package/.tap/test-results/test/listen.4.test.js.tap +0 -51
  428. package/.tap/test-results/test/lock.test.js.tap +0 -29
  429. package/.tap/test-results/test/logger/instantiation.test.js.tap +0 -92
  430. package/.tap/test-results/test/logger/logging.test.js.tap +0 -117
  431. package/.tap/test-results/test/logger/options.test.js.tap +0 -165
  432. package/.tap/test-results/test/logger/request.test.js.tap +0 -82
  433. package/.tap/test-results/test/logger/response.test.js.tap +0 -38
  434. package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +0 -44
  435. package/.tap/test-results/test/method-missing.test.js.tap +0 -8
  436. package/.tap/test-results/test/middleware.test.js.tap +0 -17
  437. package/.tap/test-results/test/mkcalendar.test.js.tap +0 -43
  438. package/.tap/test-results/test/mkcol.test.js.tap +0 -14
  439. package/.tap/test-results/test/move.test.js.tap +0 -15
  440. package/.tap/test-results/test/noop-set.test.js.tap +0 -8
  441. package/.tap/test-results/test/nullable-validation.test.js.tap +0 -36
  442. package/.tap/test-results/test/options.error-handler.test.js.tap +0 -186
  443. package/.tap/test-results/test/options.test.js.tap +0 -174
  444. package/.tap/test-results/test/output-validation.test.js.tap +0 -66
  445. package/.tap/test-results/test/patch.error-handler.test.js.tap +0 -206
  446. package/.tap/test-results/test/patch.test.js.tap +0 -182
  447. package/.tap/test-results/test/plugin.1.test.js.tap +0 -78
  448. package/.tap/test-results/test/plugin.2.test.js.tap +0 -102
  449. package/.tap/test-results/test/plugin.3.test.js.tap +0 -58
  450. package/.tap/test-results/test/plugin.4.test.js.tap +0 -164
  451. package/.tap/test-results/test/post-empty-body.test.js.tap +0 -8
  452. package/.tap/test-results/test/pretty-print.test.js.tap +0 -82
  453. package/.tap/test-results/test/promises.test.js.tap +0 -46
  454. package/.tap/test-results/test/propfind.test.js.tap +0 -43
  455. package/.tap/test-results/test/proppatch.test.js.tap +0 -29
  456. package/.tap/test-results/test/proto-poisoning.test.js.tap +0 -47
  457. package/.tap/test-results/test/put.error-handler.test.js.tap +0 -206
  458. package/.tap/test-results/test/put.test.js.tap +0 -182
  459. package/.tap/test-results/test/register.test.js.tap +0 -61
  460. package/.tap/test-results/test/reply-code.test.js.tap +0 -40
  461. package/.tap/test-results/test/reply-earlyHints.test.js.tap +0 -22
  462. package/.tap/test-results/test/reply-error.test.js.tap +0 -643
  463. package/.tap/test-results/test/reply-trailers.test.js.tap +0 -176
  464. package/.tap/test-results/test/report.test.js.tap +0 -43
  465. package/.tap/test-results/test/request-error.test.js.tap +0 -98
  466. package/.tap/test-results/test/request-id.test.js.tap +0 -38
  467. package/.tap/test-results/test/request.deprecated.test.js.tap +0 -13
  468. package/.tap/test-results/test/requestTimeout.test.js.tap +0 -21
  469. package/.tap/test-results/test/route-hooks.test.js.tap +0 -498
  470. package/.tap/test-results/test/route-prefix.test.js.tap +0 -195
  471. package/.tap/test-results/test/route-shorthand.test.js.tap +0 -190
  472. package/.tap/test-results/test/route.1.test.js.tap +0 -93
  473. package/.tap/test-results/test/route.2.test.js.tap +0 -28
  474. package/.tap/test-results/test/route.3.test.js.tap +0 -39
  475. package/.tap/test-results/test/route.4.test.js.tap +0 -32
  476. package/.tap/test-results/test/route.5.test.js.tap +0 -54
  477. package/.tap/test-results/test/route.6.test.js.tap +0 -81
  478. package/.tap/test-results/test/route.7.test.js.tap +0 -93
  479. package/.tap/test-results/test/route.8.test.js.tap +0 -38
  480. package/.tap/test-results/test/router-options.test.js.tap +0 -104
  481. package/.tap/test-results/test/same-shape.test.js.tap +0 -22
  482. package/.tap/test-results/test/schema-examples.test.js.tap +0 -85
  483. package/.tap/test-results/test/schema-feature.test.js.tap +0 -445
  484. package/.tap/test-results/test/schema-serialization.test.js.tap +0 -194
  485. package/.tap/test-results/test/schema-special-usage.test.js.tap +0 -186
  486. package/.tap/test-results/test/schema-validation.test.js.tap +0 -199
  487. package/.tap/test-results/test/search.test.js.tap +0 -77
  488. package/.tap/test-results/test/serialize-response.test.js.tap +0 -26
  489. package/.tap/test-results/test/server.test.js.tap +0 -65
  490. package/.tap/test-results/test/set-error-handler.test.js.tap +0 -7
  491. package/.tap/test-results/test/skip-reply-send.test.js.tap +0 -272
  492. package/.tap/test-results/test/stream.1.test.js.tap +0 -36
  493. package/.tap/test-results/test/stream.2.test.js.tap +0 -20
  494. package/.tap/test-results/test/stream.3.test.js.tap +0 -34
  495. package/.tap/test-results/test/stream.4.test.js.tap +0 -40
  496. package/.tap/test-results/test/stream.5.test.js.tap +0 -37
  497. package/.tap/test-results/test/sync-routes.test.js.tap +0 -19
  498. package/.tap/test-results/test/throw.test.js.tap +0 -116
  499. package/.tap/test-results/test/trace.test.js.tap +0 -7
  500. package/.tap/test-results/test/trust-proxy.test.js.tap +0 -109
  501. package/.tap/test-results/test/type-provider.test.js.tap +0 -12
  502. package/.tap/test-results/test/unlock.test.js.tap +0 -14
  503. package/.tap/test-results/test/upgrade.test.js.tap +0 -8
  504. package/.tap/test-results/test/url-rewriting.test.js.tap +0 -39
  505. package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +0 -33
  506. package/.tap/test-results/test/validation-error-handling.test.js.tap +0 -180
  507. package/.tap/test-results/test/versioned-routes.test.js.tap +0 -151
  508. package/.tap/test-results/test/web-api.test.js.tap +0 -51
  509. package/.tap/test-results/test/wrapThenable.test.js.tap +0 -11
  510. package/EXPENSE_POLICY.md +0 -105
  511. package/test/default-route.test.js +0 -88
  512. package/test/listen.deprecated.test.js +0 -229
  513. package/test/unsupported-httpversion.test.js +0 -31
  514. package/types/.eslintrc.json +0 -48
@@ -1,9 +1,9 @@
1
1
  // This file is autogenerated by build/build-validation.js, do not edit
2
- /* istanbul ignore file */
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":[{"enum":[false]},{"type":"string"}],"default":"request-id"},"requestIdLogLabel":{"type":"string","default":"reqId"},"http2SessionTimeout":{"type":"integer","default":72000},"exposeHeadRoutes":{"type":"boolean","default":true},"useSemicolonDelimiter":{"type":"boolean","default":true},"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":{}}}}}};
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 = "request-id";
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 = true;
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(!(data19 === false)){
847
- const err12 = {instancePath:instancePath+"/requestIdHeader",schemaPath:"#/properties/requestIdHeader/anyOf/0/enum",keyword:"enum",params:{allowedValues: schema11.properties.requestIdHeader.anyOf[0].enum},message:"must be equal to one of the allowed values"};
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 _errs60 = errors;
876
+ const _errs61 = errors;
860
877
  if(typeof data19 !== "string"){
861
- let dataType21 = typeof data19;
862
- let coerced21 = undefined;
863
- if(!(coerced21 !== undefined)){
864
- if(dataType21 == "number" || dataType21 == "boolean"){
865
- coerced21 = "" + data19;
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
- coerced21 = "";
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(coerced21 !== undefined){
882
- data19 = coerced21;
898
+ if(coerced22 !== undefined){
899
+ data19 = coerced22;
883
900
  if(data !== undefined){
884
- data["requestIdHeader"] = coerced21;
901
+ data["requestIdHeader"] = coerced22;
885
902
  }
886
903
  }
887
904
  }
888
- var _valid3 = _errs60 === errors;
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 _errs62 = errors;
934
+ const _errs63 = errors;
918
935
  if(typeof data20 !== "string"){
919
- let dataType22 = typeof data20;
920
- let coerced22 = undefined;
921
- if(!(coerced22 !== undefined)){
922
- if(dataType22 == "number" || dataType22 == "boolean"){
923
- coerced22 = "" + data20;
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
- coerced22 = "";
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(coerced22 !== undefined){
934
- data20 = coerced22;
950
+ if(coerced23 !== undefined){
951
+ data20 = coerced23;
935
952
  if(data !== undefined){
936
- data["requestIdLogLabel"] = coerced22;
953
+ data["requestIdLogLabel"] = coerced23;
937
954
  }
938
955
  }
939
956
  }
940
- var valid0 = _errs62 === errors;
957
+ var valid0 = _errs63 === errors;
941
958
  if(valid0){
942
959
  let data21 = data.http2SessionTimeout;
943
- const _errs64 = errors;
960
+ const _errs65 = errors;
944
961
  if(!(((typeof data21 == "number") && (!(data21 % 1) && !isNaN(data21))) && (isFinite(data21)))){
945
- let dataType23 = typeof data21;
946
- let coerced23 = undefined;
947
- if(!(coerced23 !== undefined)){
948
- if(dataType23 === "boolean" || data21 === null
949
- || (dataType23 === "string" && data21 && data21 == +data21 && !(data21 % 1))){
950
- coerced23 = +data21;
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(coerced23 !== undefined){
958
- data21 = coerced23;
974
+ if(coerced24 !== undefined){
975
+ data21 = coerced24;
959
976
  if(data !== undefined){
960
- data["http2SessionTimeout"] = coerced23;
977
+ data["http2SessionTimeout"] = coerced24;
961
978
  }
962
979
  }
963
980
  }
964
- var valid0 = _errs64 === errors;
981
+ var valid0 = _errs65 === errors;
965
982
  if(valid0){
966
983
  let data22 = data.exposeHeadRoutes;
967
- const _errs66 = errors;
984
+ const _errs67 = errors;
968
985
  if(typeof data22 !== "boolean"){
969
- let coerced24 = undefined;
970
- if(!(coerced24 !== undefined)){
986
+ let coerced25 = undefined;
987
+ if(!(coerced25 !== undefined)){
971
988
  if(data22 === "false" || data22 === 0 || data22 === null){
972
- coerced24 = false;
989
+ coerced25 = false;
973
990
  }
974
991
  else if(data22 === "true" || data22 === 1){
975
- coerced24 = true;
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(coerced24 !== undefined){
983
- data22 = coerced24;
999
+ if(coerced25 !== undefined){
1000
+ data22 = coerced25;
984
1001
  if(data !== undefined){
985
- data["exposeHeadRoutes"] = coerced24;
1002
+ data["exposeHeadRoutes"] = coerced25;
986
1003
  }
987
1004
  }
988
1005
  }
989
- var valid0 = _errs66 === errors;
1006
+ var valid0 = _errs67 === errors;
990
1007
  if(valid0){
991
1008
  let data23 = data.useSemicolonDelimiter;
992
- const _errs68 = errors;
1009
+ const _errs69 = errors;
993
1010
  if(typeof data23 !== "boolean"){
994
- let coerced25 = undefined;
995
- if(!(coerced25 !== undefined)){
1011
+ let coerced26 = undefined;
1012
+ if(!(coerced26 !== undefined)){
996
1013
  if(data23 === "false" || data23 === 0 || data23 === null){
997
- coerced25 = false;
1014
+ coerced26 = false;
998
1015
  }
999
1016
  else if(data23 === "true" || data23 === 1){
1000
- coerced25 = true;
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(coerced25 !== undefined){
1008
- data23 = coerced25;
1024
+ if(coerced26 !== undefined){
1025
+ data23 = coerced26;
1009
1026
  if(data !== undefined){
1010
- data["useSemicolonDelimiter"] = coerced25;
1027
+ data["useSemicolonDelimiter"] = coerced26;
1011
1028
  }
1012
1029
  }
1013
1030
  }
1014
- var valid0 = _errs68 === errors;
1031
+ var valid0 = _errs69 === errors;
1015
1032
  if(valid0){
1016
1033
  if(data.versioning !== undefined){
1017
1034
  let data24 = data.versioning;
1018
- const _errs70 = errors;
1019
- if(errors === _errs70){
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 = _errs70 === errors;
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 _errs73 = errors;
1041
- if(errors === _errs73){
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 _errs76 = errors;
1046
- if(errors === _errs76){
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 dataType26 = typeof data27;
1058
- let coerced26 = undefined;
1059
- if(!(coerced26 !== undefined)){
1060
- if(dataType26 == "number" || dataType26 == "boolean"){
1061
- coerced26 = "" + data27;
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
- coerced26 = "";
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(coerced26 !== undefined){
1072
- data27 = coerced26;
1088
+ if(coerced27 !== undefined){
1089
+ data27 = coerced27;
1073
1090
  if(data26 !== undefined){
1074
- data26["name"] = coerced26;
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 = _errs76 === errors;
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 = _errs73 === errors;
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":"request-id","requestIdLogLabel":"reqId","http2SessionTimeout":72000,"exposeHeadRoutes":true,"useSemicolonDelimiter":true}
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 */
@@ -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 = [new ParserListItem('application/json'), new ParserListItem('text/plain')]
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 (!contentTypeIsString && !(contentType instanceof RegExp)) throw new FST_ERR_CTP_INVALID_TYPE()
46
- if (contentTypeIsString && contentType.length === 0) throw new FST_ERR_CTP_EMPTY_TYPE()
47
- if (typeof parserFn !== 'function') throw new FST_ERR_CTP_INVALID_HANDLER()
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 (contentTypeIsString && contentType === '*') {
73
+ if (contentType === '*') {
67
74
  this.customParsers.set('', parser)
68
75
  } else {
69
76
  if (contentTypeIsString) {
70
- this.parserList.unshift(new ParserListItem(contentType))
77
+ this.parserList.unshift(contentType)
78
+ this.customParsers.set(contentType, parser)
71
79
  } else {
72
- contentType.isEssence = contentType.source.indexOf(';') === -1
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
- return this.customParsers.has(typeof contentType === 'string' ? contentType : contentType.toString())
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
- if (this.hasParser(contentType)) {
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
- const parsed = safeParseContentType(contentType)
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 (compareContentType(parsed, parserListItem)) {
114
- const parser = this.customParsers.get(parserListItem.name)
115
- // we set request content-type in cache to reduce parsing of MIME type
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 (compareRegExpContentType(contentType, parsed.type, parserRegExp)) {
125
- const parser = this.customParsers.get(parserRegExp.toString())
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
- if (!(typeof contentType === 'string' || contentType instanceof RegExp)) throw new FST_ERR_CTP_INVALID_TYPE()
150
+ let parsers
144
151
 
145
- const removed = this.customParsers.delete(contentType.toString())
146
-
147
- const parsers = typeof contentType === 'string' ? this.parserList : this.parserRegExpList
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 idx = parsers.findIndex(ct => ct.toString() === contentType.toString())
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 (result && typeof result.then === 'function') {
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'] === undefined
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 compareContentType (contentType, parserListItem) {
377
- if (parserListItem.isEssence) {
378
- // we do essence check
379
- return contentType.type.indexOf(parserListItem) !== -1
380
- } else {
381
- // when the content-type includes parameters
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
- FSTDEP006(name)
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
- // eslint-disable-next-line no-var
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
  }
@@ -1,5 +1,5 @@
1
1
  // This file is autogenerated by build/build-error-serializer.js, do not edit
2
- /* istanbul ignore file */
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 */