node-fastify 5.8.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 (354) hide show
  1. package/.borp.yaml +3 -0
  2. package/.markdownlint-cli2.yaml +22 -0
  3. package/.prettierignore +1 -0
  4. package/GOVERNANCE.md +4 -0
  5. package/LICENSE +21 -0
  6. package/PROJECT_CHARTER.md +126 -0
  7. package/README.md +423 -0
  8. package/SECURITY.md +220 -0
  9. package/SPONSORS.md +24 -0
  10. package/build/build-error-serializer.js +35 -0
  11. package/build/build-validation.js +169 -0
  12. package/build/sync-version.js +11 -0
  13. package/docs/Guides/Benchmarking.md +60 -0
  14. package/docs/Guides/Database.md +321 -0
  15. package/docs/Guides/Delay-Accepting-Requests.md +608 -0
  16. package/docs/Guides/Detecting-When-Clients-Abort.md +172 -0
  17. package/docs/Guides/Ecosystem.md +726 -0
  18. package/docs/Guides/Fluent-Schema.md +127 -0
  19. package/docs/Guides/Getting-Started.md +620 -0
  20. package/docs/Guides/Index.md +43 -0
  21. package/docs/Guides/Migration-Guide-V3.md +287 -0
  22. package/docs/Guides/Migration-Guide-V4.md +267 -0
  23. package/docs/Guides/Migration-Guide-V5.md +727 -0
  24. package/docs/Guides/Plugins-Guide.md +520 -0
  25. package/docs/Guides/Prototype-Poisoning.md +383 -0
  26. package/docs/Guides/Recommendations.md +378 -0
  27. package/docs/Guides/Serverless.md +604 -0
  28. package/docs/Guides/Style-Guide.md +246 -0
  29. package/docs/Guides/Testing.md +481 -0
  30. package/docs/Guides/Write-Plugin.md +103 -0
  31. package/docs/Guides/Write-Type-Provider.md +34 -0
  32. package/docs/Reference/ContentTypeParser.md +271 -0
  33. package/docs/Reference/Decorators.md +436 -0
  34. package/docs/Reference/Encapsulation.md +194 -0
  35. package/docs/Reference/Errors.md +377 -0
  36. package/docs/Reference/HTTP2.md +94 -0
  37. package/docs/Reference/Hooks.md +958 -0
  38. package/docs/Reference/Index.md +73 -0
  39. package/docs/Reference/LTS.md +86 -0
  40. package/docs/Reference/Lifecycle.md +99 -0
  41. package/docs/Reference/Logging.md +268 -0
  42. package/docs/Reference/Middleware.md +79 -0
  43. package/docs/Reference/Plugins.md +245 -0
  44. package/docs/Reference/Principles.md +73 -0
  45. package/docs/Reference/Reply.md +1001 -0
  46. package/docs/Reference/Request.md +295 -0
  47. package/docs/Reference/Routes.md +802 -0
  48. package/docs/Reference/Server.md +2389 -0
  49. package/docs/Reference/Type-Providers.md +256 -0
  50. package/docs/Reference/TypeScript.md +1729 -0
  51. package/docs/Reference/Validation-and-Serialization.md +1130 -0
  52. package/docs/Reference/Warnings.md +58 -0
  53. package/docs/index.md +24 -0
  54. package/docs/resources/encapsulation_context.drawio +1 -0
  55. package/docs/resources/encapsulation_context.svg +3 -0
  56. package/eslint.config.js +35 -0
  57. package/examples/asyncawait.js +38 -0
  58. package/examples/benchmark/body.json +3 -0
  59. package/examples/benchmark/hooks-benchmark-async-await.js +44 -0
  60. package/examples/benchmark/hooks-benchmark.js +52 -0
  61. package/examples/benchmark/parser.js +47 -0
  62. package/examples/benchmark/simple.js +30 -0
  63. package/examples/benchmark/webstream.js +27 -0
  64. package/examples/hooks.js +91 -0
  65. package/examples/http2.js +39 -0
  66. package/examples/https.js +38 -0
  67. package/examples/parser.js +53 -0
  68. package/examples/plugin.js +12 -0
  69. package/examples/route-prefix.js +38 -0
  70. package/examples/shared-schema.js +38 -0
  71. package/examples/simple-stream.js +20 -0
  72. package/examples/simple.js +32 -0
  73. package/examples/simple.mjs +27 -0
  74. package/examples/typescript-server.ts +79 -0
  75. package/examples/use-plugin.js +29 -0
  76. package/fastify.d.ts +253 -0
  77. package/fastify.js +985 -0
  78. package/integration/server.js +29 -0
  79. package/integration/test.sh +23 -0
  80. package/lib/config-validator.js +1266 -0
  81. package/lib/content-type-parser.js +413 -0
  82. package/lib/content-type.js +160 -0
  83. package/lib/context.js +98 -0
  84. package/lib/decorate.js +152 -0
  85. package/lib/error-handler.js +173 -0
  86. package/lib/error-serializer.js +134 -0
  87. package/lib/error-status.js +14 -0
  88. package/lib/errors.js +516 -0
  89. package/lib/four-oh-four.js +190 -0
  90. package/lib/handle-request.js +195 -0
  91. package/lib/head-route.js +45 -0
  92. package/lib/hooks.js +429 -0
  93. package/lib/initial-config-validation.js +37 -0
  94. package/lib/logger-factory.js +136 -0
  95. package/lib/logger-pino.js +68 -0
  96. package/lib/noop-set.js +10 -0
  97. package/lib/plugin-override.js +90 -0
  98. package/lib/plugin-utils.js +169 -0
  99. package/lib/promise.js +23 -0
  100. package/lib/reply.js +1030 -0
  101. package/lib/req-id-gen-factory.js +52 -0
  102. package/lib/request.js +391 -0
  103. package/lib/route.js +686 -0
  104. package/lib/schema-controller.js +164 -0
  105. package/lib/schemas.js +207 -0
  106. package/lib/server.js +441 -0
  107. package/lib/symbols.js +71 -0
  108. package/lib/validation.js +280 -0
  109. package/lib/warnings.js +57 -0
  110. package/lib/wrap-thenable.js +84 -0
  111. package/package.json +225 -0
  112. package/scripts/validate-ecosystem-links.js +179 -0
  113. package/test/404s.test.js +2035 -0
  114. package/test/500s.test.js +422 -0
  115. package/test/allow-unsafe-regex.test.js +92 -0
  116. package/test/als.test.js +65 -0
  117. package/test/async-await.test.js +705 -0
  118. package/test/async-dispose.test.js +20 -0
  119. package/test/async_hooks.test.js +52 -0
  120. package/test/body-limit.test.js +224 -0
  121. package/test/buffer.test.js +74 -0
  122. package/test/build/error-serializer.test.js +36 -0
  123. package/test/build/version.test.js +14 -0
  124. package/test/build-certificate.js +109 -0
  125. package/test/bundler/README.md +29 -0
  126. package/test/bundler/esbuild/bundler-test.js +32 -0
  127. package/test/bundler/esbuild/package.json +10 -0
  128. package/test/bundler/esbuild/src/fail-plugin-version.js +14 -0
  129. package/test/bundler/esbuild/src/index.js +9 -0
  130. package/test/bundler/webpack/bundler-test.js +32 -0
  131. package/test/bundler/webpack/package.json +11 -0
  132. package/test/bundler/webpack/src/fail-plugin-version.js +14 -0
  133. package/test/bundler/webpack/src/index.js +9 -0
  134. package/test/bundler/webpack/webpack.config.js +15 -0
  135. package/test/case-insensitive.test.js +102 -0
  136. package/test/chainable.test.js +40 -0
  137. package/test/child-logger-factory.test.js +128 -0
  138. package/test/client-timeout.test.js +38 -0
  139. package/test/close-pipelining.test.js +78 -0
  140. package/test/close.test.js +706 -0
  141. package/test/conditional-pino.test.js +47 -0
  142. package/test/connection-timeout.test.js +42 -0
  143. package/test/constrained-routes.test.js +1138 -0
  144. package/test/content-length.test.js +174 -0
  145. package/test/content-parser.test.js +739 -0
  146. package/test/content-type.test.js +181 -0
  147. package/test/context-config.test.js +164 -0
  148. package/test/custom-http-server.test.js +118 -0
  149. package/test/custom-parser-async.test.js +59 -0
  150. package/test/custom-parser.0.test.js +701 -0
  151. package/test/custom-parser.1.test.js +266 -0
  152. package/test/custom-parser.2.test.js +91 -0
  153. package/test/custom-parser.3.test.js +208 -0
  154. package/test/custom-parser.4.test.js +218 -0
  155. package/test/custom-parser.5.test.js +130 -0
  156. package/test/custom-querystring-parser.test.js +129 -0
  157. package/test/decorator.test.js +1330 -0
  158. package/test/delete.test.js +344 -0
  159. package/test/diagnostics-channel/404.test.js +49 -0
  160. package/test/diagnostics-channel/async-delay-request.test.js +65 -0
  161. package/test/diagnostics-channel/async-request.test.js +64 -0
  162. package/test/diagnostics-channel/error-before-handler.test.js +35 -0
  163. package/test/diagnostics-channel/error-request.test.js +53 -0
  164. package/test/diagnostics-channel/error-status.test.js +123 -0
  165. package/test/diagnostics-channel/init.test.js +50 -0
  166. package/test/diagnostics-channel/sync-delay-request.test.js +49 -0
  167. package/test/diagnostics-channel/sync-request-reply.test.js +51 -0
  168. package/test/diagnostics-channel/sync-request.test.js +54 -0
  169. package/test/encapsulated-child-logger-factory.test.js +69 -0
  170. package/test/encapsulated-error-handler.test.js +237 -0
  171. package/test/esm/errorCodes.test.mjs +10 -0
  172. package/test/esm/esm.test.mjs +13 -0
  173. package/test/esm/index.test.js +8 -0
  174. package/test/esm/named-exports.mjs +14 -0
  175. package/test/esm/other.mjs +8 -0
  176. package/test/esm/plugin.mjs +8 -0
  177. package/test/fastify-instance.test.js +300 -0
  178. package/test/find-route.test.js +152 -0
  179. package/test/fluent-schema.test.js +209 -0
  180. package/test/genReqId.test.js +426 -0
  181. package/test/handler-context.test.js +45 -0
  182. package/test/handler-timeout.test.js +367 -0
  183. package/test/has-route.test.js +88 -0
  184. package/test/header-overflow.test.js +55 -0
  185. package/test/helper.js +496 -0
  186. package/test/hooks-async.test.js +1099 -0
  187. package/test/hooks.on-listen.test.js +1162 -0
  188. package/test/hooks.on-ready.test.js +421 -0
  189. package/test/hooks.test.js +3578 -0
  190. package/test/http-methods/copy.test.js +35 -0
  191. package/test/http-methods/custom-http-methods.test.js +114 -0
  192. package/test/http-methods/get.test.js +412 -0
  193. package/test/http-methods/head.test.js +263 -0
  194. package/test/http-methods/lock.test.js +108 -0
  195. package/test/http-methods/mkcalendar.test.js +143 -0
  196. package/test/http-methods/mkcol.test.js +35 -0
  197. package/test/http-methods/move.test.js +42 -0
  198. package/test/http-methods/propfind.test.js +136 -0
  199. package/test/http-methods/proppatch.test.js +105 -0
  200. package/test/http-methods/report.test.js +142 -0
  201. package/test/http-methods/search.test.js +233 -0
  202. package/test/http-methods/trace.test.js +21 -0
  203. package/test/http-methods/unlock.test.js +38 -0
  204. package/test/http2/closing.test.js +270 -0
  205. package/test/http2/constraint.test.js +109 -0
  206. package/test/http2/head.test.js +34 -0
  207. package/test/http2/plain.test.js +68 -0
  208. package/test/http2/secure-with-fallback.test.js +113 -0
  209. package/test/http2/secure.test.js +67 -0
  210. package/test/http2/unknown-http-method.test.js +34 -0
  211. package/test/https/custom-https-server.test.js +58 -0
  212. package/test/https/https.test.js +136 -0
  213. package/test/imports.test.js +17 -0
  214. package/test/inject.test.js +502 -0
  215. package/test/input-validation.js +335 -0
  216. package/test/internals/all.test.js +38 -0
  217. package/test/internals/content-type-parser.test.js +111 -0
  218. package/test/internals/context.test.js +31 -0
  219. package/test/internals/decorator.test.js +156 -0
  220. package/test/internals/errors.test.js +982 -0
  221. package/test/internals/handle-request.test.js +270 -0
  222. package/test/internals/hook-runner.test.js +449 -0
  223. package/test/internals/hooks.test.js +96 -0
  224. package/test/internals/initial-config.test.js +383 -0
  225. package/test/internals/logger.test.js +163 -0
  226. package/test/internals/plugin.test.js +170 -0
  227. package/test/internals/promise.test.js +63 -0
  228. package/test/internals/reply-serialize.test.js +714 -0
  229. package/test/internals/reply.test.js +1920 -0
  230. package/test/internals/req-id-gen-factory.test.js +133 -0
  231. package/test/internals/request-validate.test.js +1402 -0
  232. package/test/internals/request.test.js +506 -0
  233. package/test/internals/schema-controller-perf.test.js +40 -0
  234. package/test/internals/server.test.js +91 -0
  235. package/test/internals/validation.test.js +352 -0
  236. package/test/issue-4959.test.js +118 -0
  237. package/test/keep-alive-timeout.test.js +42 -0
  238. package/test/listen.1.test.js +154 -0
  239. package/test/listen.2.test.js +113 -0
  240. package/test/listen.3.test.js +83 -0
  241. package/test/listen.4.test.js +168 -0
  242. package/test/listen.5.test.js +122 -0
  243. package/test/logger/instantiation.test.js +341 -0
  244. package/test/logger/logger-test-utils.js +47 -0
  245. package/test/logger/logging.test.js +460 -0
  246. package/test/logger/options.test.js +579 -0
  247. package/test/logger/request.test.js +292 -0
  248. package/test/logger/response.test.js +183 -0
  249. package/test/logger/tap-parallel-not-ok +0 -0
  250. package/test/max-requests-per-socket.test.js +113 -0
  251. package/test/middleware.test.js +37 -0
  252. package/test/noop-set.test.js +19 -0
  253. package/test/nullable-validation.test.js +187 -0
  254. package/test/options.error-handler.test.js +5 -0
  255. package/test/options.test.js +5 -0
  256. package/test/output-validation.test.js +140 -0
  257. package/test/patch.error-handler.test.js +5 -0
  258. package/test/patch.test.js +5 -0
  259. package/test/plugin.1.test.js +230 -0
  260. package/test/plugin.2.test.js +314 -0
  261. package/test/plugin.3.test.js +287 -0
  262. package/test/plugin.4.test.js +504 -0
  263. package/test/plugin.helper.js +8 -0
  264. package/test/plugin.name.display.js +10 -0
  265. package/test/post-empty-body.test.js +38 -0
  266. package/test/pretty-print.test.js +366 -0
  267. package/test/promises.test.js +125 -0
  268. package/test/proto-poisoning.test.js +145 -0
  269. package/test/put.error-handler.test.js +5 -0
  270. package/test/put.test.js +5 -0
  271. package/test/register.test.js +184 -0
  272. package/test/reply-code.test.js +148 -0
  273. package/test/reply-early-hints.test.js +100 -0
  274. package/test/reply-error.test.js +815 -0
  275. package/test/reply-trailers.test.js +445 -0
  276. package/test/reply-web-stream-locked.test.js +37 -0
  277. package/test/request-error.test.js +624 -0
  278. package/test/request-header-host.test.js +339 -0
  279. package/test/request-id.test.js +118 -0
  280. package/test/request-timeout.test.js +53 -0
  281. package/test/route-hooks.test.js +635 -0
  282. package/test/route-prefix.test.js +904 -0
  283. package/test/route-shorthand.test.js +48 -0
  284. package/test/route.1.test.js +259 -0
  285. package/test/route.2.test.js +100 -0
  286. package/test/route.3.test.js +213 -0
  287. package/test/route.4.test.js +127 -0
  288. package/test/route.5.test.js +211 -0
  289. package/test/route.6.test.js +306 -0
  290. package/test/route.7.test.js +406 -0
  291. package/test/route.8.test.js +225 -0
  292. package/test/router-options.test.js +1108 -0
  293. package/test/same-shape.test.js +124 -0
  294. package/test/schema-examples.test.js +661 -0
  295. package/test/schema-feature.test.js +2198 -0
  296. package/test/schema-serialization.test.js +1171 -0
  297. package/test/schema-special-usage.test.js +1348 -0
  298. package/test/schema-validation.test.js +1572 -0
  299. package/test/scripts/validate-ecosystem-links.test.js +339 -0
  300. package/test/serialize-response.test.js +186 -0
  301. package/test/server.test.js +347 -0
  302. package/test/set-error-handler.test.js +69 -0
  303. package/test/skip-reply-send.test.js +317 -0
  304. package/test/stream-serializers.test.js +40 -0
  305. package/test/stream.1.test.js +94 -0
  306. package/test/stream.2.test.js +129 -0
  307. package/test/stream.3.test.js +198 -0
  308. package/test/stream.4.test.js +176 -0
  309. package/test/stream.5.test.js +188 -0
  310. package/test/sync-routes.test.js +32 -0
  311. package/test/throw.test.js +359 -0
  312. package/test/toolkit.js +63 -0
  313. package/test/trust-proxy.test.js +162 -0
  314. package/test/type-provider.test.js +22 -0
  315. package/test/types/content-type-parser.test-d.ts +72 -0
  316. package/test/types/decorate-request-reply.test-d.ts +18 -0
  317. package/test/types/dummy-plugin.ts +9 -0
  318. package/test/types/errors.test-d.ts +90 -0
  319. package/test/types/fastify.test-d.ts +352 -0
  320. package/test/types/hooks.test-d.ts +550 -0
  321. package/test/types/import.ts +2 -0
  322. package/test/types/instance.test-d.ts +588 -0
  323. package/test/types/logger.test-d.ts +277 -0
  324. package/test/types/plugin.test-d.ts +97 -0
  325. package/test/types/register.test-d.ts +237 -0
  326. package/test/types/reply.test-d.ts +254 -0
  327. package/test/types/request.test-d.ts +188 -0
  328. package/test/types/route.test-d.ts +553 -0
  329. package/test/types/schema.test-d.ts +135 -0
  330. package/test/types/serverFactory.test-d.ts +37 -0
  331. package/test/types/type-provider.test-d.ts +1213 -0
  332. package/test/types/using.test-d.ts +17 -0
  333. package/test/upgrade.test.js +52 -0
  334. package/test/url-rewriting.test.js +122 -0
  335. package/test/use-semicolon-delimiter.test.js +168 -0
  336. package/test/validation-error-handling.test.js +900 -0
  337. package/test/versioned-routes.test.js +603 -0
  338. package/test/web-api.test.js +616 -0
  339. package/test/wrap-thenable.test.js +30 -0
  340. package/types/content-type-parser.d.ts +75 -0
  341. package/types/context.d.ts +22 -0
  342. package/types/errors.d.ts +92 -0
  343. package/types/hooks.d.ts +875 -0
  344. package/types/instance.d.ts +609 -0
  345. package/types/logger.d.ts +107 -0
  346. package/types/plugin.d.ts +44 -0
  347. package/types/register.d.ts +42 -0
  348. package/types/reply.d.ts +81 -0
  349. package/types/request.d.ts +95 -0
  350. package/types/route.d.ts +199 -0
  351. package/types/schema.d.ts +61 -0
  352. package/types/server-factory.d.ts +19 -0
  353. package/types/type-provider.d.ts +130 -0
  354. package/types/utils.d.ts +98 -0
@@ -0,0 +1,107 @@
1
+ import { FastifyError } from '@fastify/error'
2
+ import { FastifyInstance } from './instance'
3
+ import { FastifyReply } from './reply'
4
+ import { FastifyRequest } from './request'
5
+ import { RouteGenericInterface } from './route'
6
+ import { FastifySchema } from './schema'
7
+ import { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'
8
+ import { ContextConfigDefault, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault } from './utils'
9
+
10
+ import type {
11
+ BaseLogger,
12
+ LogFn as FastifyLogFn,
13
+ LevelWithSilent as LogLevel,
14
+ Bindings,
15
+ ChildLoggerOptions,
16
+ LoggerOptions as PinoLoggerOptions
17
+ } from 'pino'
18
+
19
+ export type {
20
+ FastifyLogFn,
21
+ LogLevel,
22
+ Bindings,
23
+ ChildLoggerOptions,
24
+ PinoLoggerOptions
25
+ }
26
+
27
+ export interface FastifyBaseLogger extends Pick<BaseLogger, 'level' | 'info' | 'error' | 'debug' | 'fatal' | 'warn' | 'trace' | 'silent'> {
28
+ child(bindings: Bindings, options?: ChildLoggerOptions): FastifyBaseLogger
29
+ }
30
+
31
+ // TODO delete FastifyLoggerInstance in the next major release. It seems that it is enough to have only FastifyBaseLogger.
32
+ /**
33
+ * @deprecated Use FastifyBaseLogger instead
34
+ */
35
+ export type FastifyLoggerInstance = FastifyBaseLogger
36
+
37
+ export interface FastifyLoggerStreamDestination {
38
+ write(msg: string): void;
39
+ }
40
+
41
+ // TODO: once node 18 is EOL, this type can be replaced with plain FastifyReply.
42
+ /**
43
+ * Specialized reply type used for the `res` log serializer, since only `statusCode` is passed in certain cases.
44
+ */
45
+ export type ResSerializerReply<
46
+ RawServer extends RawServerBase,
47
+ RawReply extends FastifyReply<RouteGenericInterface, RawServer>
48
+ > = Partial<RawReply> & Pick<RawReply, 'statusCode'>
49
+
50
+ /**
51
+ * Fastify Custom Logger options.
52
+ */
53
+ export interface FastifyLoggerOptions<
54
+ RawServer extends RawServerBase = RawServerDefault,
55
+ RawRequest extends FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProvider> = FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProviderDefault>,
56
+ RawReply extends FastifyReply<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault>
57
+ > {
58
+ serializers?: {
59
+ req?: (req: RawRequest) => {
60
+ method?: string;
61
+ url?: string;
62
+ version?: string;
63
+ host?: string;
64
+ remoteAddress?: string;
65
+ remotePort?: number;
66
+ [key: string]: unknown;
67
+ };
68
+ err?: (err: FastifyError) => {
69
+ type: string;
70
+ message: string;
71
+ stack: string;
72
+ [key: string]: unknown;
73
+ };
74
+ res?: (res: ResSerializerReply<RawServer, RawReply>) => {
75
+ statusCode?: string | number;
76
+ [key: string]: unknown;
77
+ };
78
+ };
79
+ level?: string;
80
+ file?: string;
81
+ genReqId?: (req: RawRequest) => string;
82
+ stream?: FastifyLoggerStreamDestination;
83
+ }
84
+
85
+ export interface FastifyChildLoggerFactory<
86
+ RawServer extends RawServerBase = RawServerDefault,
87
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
88
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
89
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
90
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault
91
+ > {
92
+ /**
93
+ * @param logger The parent logger
94
+ * @param bindings The bindings object that will be passed to the child logger
95
+ * @param childLoggerOpts The logger options that will be passed to the child logger
96
+ * @param rawReq The raw request
97
+ * @this The fastify instance
98
+ * @returns The child logger instance
99
+ */
100
+ (
101
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
102
+ logger: Logger,
103
+ bindings: Bindings,
104
+ childLoggerOpts: ChildLoggerOptions,
105
+ rawReq: RawRequest
106
+ ): Logger
107
+ }
@@ -0,0 +1,44 @@
1
+ import { FastifyInstance } from './instance'
2
+ import { RawServerBase, RawRequestDefaultExpression, RawReplyDefaultExpression, RawServerDefault } from './utils'
3
+ import { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'
4
+ import { FastifyBaseLogger } from './logger'
5
+
6
+ export type FastifyPluginOptions = Record<string, any>
7
+
8
+ /**
9
+ * FastifyPluginCallback
10
+ *
11
+ * Fastify allows the user to extend its functionalities with plugins. A plugin can be a set of routes, a server decorator or whatever. To activate plugins, use the `fastify.register()` method.
12
+ */
13
+ export type FastifyPluginCallback<
14
+ Options extends FastifyPluginOptions = Record<never, never>,
15
+ Server extends RawServerBase = RawServerDefault,
16
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
17
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
18
+ > = (
19
+ instance: FastifyInstance<Server, RawRequestDefaultExpression<Server>, RawReplyDefaultExpression<Server>, Logger, TypeProvider>,
20
+ opts: Options,
21
+ done: (err?: Error) => void
22
+ ) => void
23
+
24
+ /**
25
+ * FastifyPluginAsync
26
+ *
27
+ * Fastify allows the user to extend its functionalities with plugins. A plugin can be a set of routes, a server decorator or whatever. To activate plugins, use the `fastify.register()` method.
28
+ */
29
+ export type FastifyPluginAsync<
30
+ Options extends FastifyPluginOptions = Record<never, never>,
31
+ Server extends RawServerBase = RawServerDefault,
32
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
33
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
34
+ > = (
35
+ instance: FastifyInstance<Server, RawRequestDefaultExpression<Server>, RawReplyDefaultExpression<Server>, Logger, TypeProvider>,
36
+ opts: Options
37
+ ) => Promise<void>
38
+
39
+ /**
40
+ * Generic plugin type.
41
+ * @deprecated union type doesn't work well with type inference in TS and is therefore deprecated in favor of explicit types. Use `FastifyPluginCallback` or `FastifyPluginAsync` instead. To activate
42
+ * plugins use `FastifyRegister`. https://fastify.dev/docs/latest/Reference/TypeScript/#register
43
+ */
44
+ export type FastifyPlugin<Options extends FastifyPluginOptions = Record<never, never>> = FastifyPluginCallback<Options> | FastifyPluginAsync<Options>
@@ -0,0 +1,42 @@
1
+ import { FastifyPluginOptions, FastifyPluginCallback, FastifyPluginAsync } from './plugin'
2
+ import { LogLevel } from './logger'
3
+ import { FastifyInstance } from './instance'
4
+ import { RawServerBase } from './utils'
5
+ import { FastifyBaseLogger, FastifyTypeProvider, RawServerDefault } from '../fastify'
6
+
7
+ export interface RegisterOptions {
8
+ prefix?: string;
9
+ logLevel?: LogLevel;
10
+ logSerializers?: Record<string, (value: any) => string>;
11
+ }
12
+
13
+ export type FastifyRegisterOptions<Options> = (RegisterOptions & Options) | ((instance: FastifyInstance) => RegisterOptions & Options)
14
+
15
+ /**
16
+ * FastifyRegister
17
+ *
18
+ * Function for adding a plugin to fastify. The options are inferred from the passed in FastifyPlugin parameter.
19
+ */
20
+ export interface FastifyRegister<T = void, RawServer extends RawServerBase = RawServerDefault, TypeProviderDefault extends FastifyTypeProvider = FastifyTypeProvider, LoggerDefault extends FastifyBaseLogger = FastifyBaseLogger> {
21
+ <Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(
22
+ plugin: FastifyPluginCallback<FastifyPluginOptions, Server, TypeProvider, Logger>
23
+ ): T;
24
+ <Options extends FastifyPluginOptions, Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(
25
+ plugin: FastifyPluginCallback<Options, Server, TypeProvider, Logger>,
26
+ opts: FastifyRegisterOptions<Options>
27
+ ): T;
28
+ <Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(
29
+ plugin: FastifyPluginAsync<FastifyPluginOptions, Server, TypeProvider, Logger>
30
+ ): T;
31
+ <Options extends FastifyPluginOptions, Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(
32
+ plugin: FastifyPluginAsync<Options, Server, TypeProvider, Logger>,
33
+ opts: FastifyRegisterOptions<Options>
34
+ ): T;
35
+ <Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(
36
+ plugin: FastifyPluginCallback<FastifyPluginOptions, Server, TypeProvider, Logger> | FastifyPluginAsync<FastifyPluginOptions, Server, TypeProvider, Logger> | Promise<{ default: FastifyPluginCallback<FastifyPluginOptions, Server, TypeProvider, Logger> }> | Promise<{ default: FastifyPluginAsync<FastifyPluginOptions, Server, TypeProvider, Logger> }>,
37
+ ): T;
38
+ <Options extends FastifyPluginOptions, Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(
39
+ plugin: FastifyPluginCallback<Options, Server, TypeProvider, Logger> | FastifyPluginAsync<Options, Server, TypeProvider, Logger> | Promise<{ default: FastifyPluginCallback<Options, Server, TypeProvider, Logger> }> | Promise<{ default: FastifyPluginAsync<Options, Server, TypeProvider, Logger> }>,
40
+ opts: FastifyRegisterOptions<Options>
41
+ ): T;
42
+ }
@@ -0,0 +1,81 @@
1
+ import { Buffer } from 'node:buffer'
2
+ import { FastifyInstance } from './instance'
3
+ import { FastifyBaseLogger } from './logger'
4
+ import { FastifyRequest, RequestRouteOptions } from './request'
5
+ import { RouteGenericInterface } from './route'
6
+ import { FastifySchema } from './schema'
7
+ import { CallSerializerTypeProvider, FastifyReplyType, FastifyTypeProvider, FastifyTypeProviderDefault, ResolveFastifyReplyType, SendArgs } from './type-provider'
8
+ import { CodeToReplyKey, ContextConfigDefault, HttpHeader, HttpKeys, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault, ReplyDefault, ReplyKeysToCodes } from './utils'
9
+
10
+ export interface ReplyGenericInterface {
11
+ Reply?: ReplyDefault;
12
+ }
13
+
14
+ type HttpCodesReplyType = Partial<Record<HttpKeys, unknown>>
15
+
16
+ type ReplyTypeConstrainer<RouteGenericReply, Code extends ReplyKeysToCodes<keyof RouteGenericReply>> =
17
+ RouteGenericReply extends HttpCodesReplyType & Record<Exclude<keyof RouteGenericReply, keyof HttpCodesReplyType>, never> ?
18
+ Code extends keyof RouteGenericReply ? RouteGenericReply[Code] :
19
+ CodeToReplyKey<Code> extends keyof RouteGenericReply ? RouteGenericReply[CodeToReplyKey<Code>] : unknown :
20
+ RouteGenericReply
21
+
22
+ export type ResolveReplyTypeWithRouteGeneric<RouteGenericReply, Code extends ReplyKeysToCodes<keyof RouteGenericReply>,
23
+ SchemaCompiler extends FastifySchema = FastifySchema,
24
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault> =
25
+ Code extends keyof SchemaCompiler['response'] ?
26
+ CallSerializerTypeProvider<TypeProvider, SchemaCompiler['response'][Code]> :
27
+ ResolveFastifyReplyType<TypeProvider, SchemaCompiler, { Reply: ReplyTypeConstrainer<RouteGenericReply, Code> }>
28
+ /**
29
+ * FastifyReply is an instance of the standard http or http2 reply types.
30
+ * It defaults to http.ServerResponse, and it also extends the relative reply object.
31
+ */
32
+ export interface FastifyReply<
33
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
34
+ RawServer extends RawServerBase = RawServerDefault,
35
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
36
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
37
+ ContextConfig = ContextConfigDefault,
38
+ SchemaCompiler extends FastifySchema = FastifySchema,
39
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
40
+ ReplyType extends FastifyReplyType = ResolveFastifyReplyType<TypeProvider, SchemaCompiler, RouteGeneric>
41
+ > {
42
+ readonly routeOptions: Readonly<RequestRouteOptions<ContextConfig, SchemaCompiler>>
43
+
44
+ raw: RawReply;
45
+ elapsedTime: number;
46
+ log: FastifyBaseLogger;
47
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>;
48
+ server: FastifyInstance;
49
+ code<Code extends keyof SchemaCompiler['response'] extends never ? ReplyKeysToCodes<keyof RouteGeneric['Reply']> : keyof SchemaCompiler['response'] extends ReplyKeysToCodes<keyof RouteGeneric['Reply']> ? keyof SchemaCompiler['response'] : ReplyKeysToCodes<keyof RouteGeneric['Reply']>>(statusCode: Code): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider, ResolveReplyTypeWithRouteGeneric<RouteGeneric['Reply'], Code, SchemaCompiler, TypeProvider>>;
50
+ status<Code extends keyof SchemaCompiler['response'] extends never ? ReplyKeysToCodes<keyof RouteGeneric['Reply']> : keyof SchemaCompiler['response'] extends ReplyKeysToCodes<keyof RouteGeneric['Reply']> ? keyof SchemaCompiler['response'] : ReplyKeysToCodes<keyof RouteGeneric['Reply']>>(statusCode: Code): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider, ResolveReplyTypeWithRouteGeneric<RouteGeneric['Reply'], Code, SchemaCompiler, TypeProvider>>;
51
+ statusCode: number;
52
+ sent: boolean;
53
+ send(...args: SendArgs<ReplyType>): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
54
+ header(key: HttpHeader, value: any): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
55
+ headers(values: Partial<Record<HttpHeader, number | string | string[] | undefined>>): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
56
+ getHeader(key: HttpHeader): number | string | string[] | undefined;
57
+ getHeaders(): Record<HttpHeader, number | string | string[] | undefined>;
58
+ removeHeader(key: HttpHeader): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
59
+ hasHeader(key: HttpHeader): boolean;
60
+ redirect(url: string, statusCode?: number): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
61
+ writeEarlyHints(hints: Record<string, string | string[]>, callback?: () => void): void;
62
+ hijack(): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
63
+ callNotFound(): void;
64
+ type(contentType: string): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
65
+ serializer(fn: (payload: any) => string): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
66
+ serialize(payload: any): string | ArrayBuffer | Buffer;
67
+ // Serialization Methods
68
+ getSerializationFunction(httpStatus: string, contentType?: string): ((payload: { [key: string]: unknown }) => string) | undefined;
69
+ getSerializationFunction(schema: { [key: string]: unknown }): ((payload: { [key: string]: unknown }) => string) | undefined;
70
+ compileSerializationSchema(schema: { [key: string]: unknown }, httpStatus?: string, contentType?: string): (payload: { [key: string]: unknown }) => string;
71
+ serializeInput(input: { [key: string]: unknown }, schema: { [key: string]: unknown }, httpStatus?: string, contentType?: string): string;
72
+ serializeInput(input: { [key: string]: unknown }, httpStatus: string, contentType?: string): unknown;
73
+ then(fulfilled: () => void, rejected: (err: Error) => void): void;
74
+ trailer: (
75
+ key: string,
76
+ fn: ((reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>, payload: string | Buffer | null) => Promise<string>) | ((reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>, payload: string | Buffer | null, done: (err: Error | null, value?: string) => void) => void)
77
+ ) => FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
78
+ hasTrailer(key: string): boolean;
79
+ removeTrailer(key: string): FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>;
80
+ getDecorator<T>(name: string | symbol): T;
81
+ }
@@ -0,0 +1,95 @@
1
+ import { ErrorObject } from '@fastify/ajv-compiler'
2
+ import { FastifyContextConfig } from './context'
3
+ import { FastifyInstance } from './instance'
4
+ import { FastifyBaseLogger } from './logger'
5
+ import { FastifyRouteConfig, RouteGenericInterface, RouteHandlerMethod } from './route'
6
+ import { FastifySchema } from './schema'
7
+ import { FastifyRequestType, FastifyTypeProvider, FastifyTypeProviderDefault, ResolveFastifyRequestType } from './type-provider'
8
+ import { ContextConfigDefault, HTTPMethods, RawRequestDefaultExpression, RawServerBase, RawServerDefault, RequestBodyDefault, RequestHeadersDefault, RequestParamsDefault, RequestQuerystringDefault } from './utils'
9
+
10
+ type HTTPRequestPart = 'body' | 'query' | 'querystring' | 'params' | 'headers'
11
+ export interface RequestGenericInterface {
12
+ Body?: RequestBodyDefault;
13
+ Querystring?: RequestQuerystringDefault;
14
+ Params?: RequestParamsDefault;
15
+ Headers?: RequestHeadersDefault;
16
+ }
17
+
18
+ export interface ValidationFunction {
19
+ (input: any): boolean
20
+ errors?: null | ErrorObject[];
21
+ }
22
+
23
+ export interface RequestRouteOptions<ContextConfig = ContextConfigDefault, SchemaCompiler = FastifySchema> {
24
+ method: HTTPMethods | HTTPMethods[];
25
+ // `url` can be `undefined` for instance when `request.is404` is true
26
+ url: string | undefined;
27
+ bodyLimit: number;
28
+ handlerTimeout: number;
29
+ attachValidation: boolean;
30
+ logLevel: string;
31
+ exposeHeadRoute: boolean;
32
+ prefixTrailingSlash: string;
33
+ config: FastifyContextConfig & FastifyRouteConfig & ContextConfig;
34
+ schema?: SchemaCompiler; // it is empty for 404 requests
35
+ handler: RouteHandlerMethod;
36
+ version?: string;
37
+ }
38
+
39
+ /**
40
+ * FastifyRequest is an instance of the standard http or http2 request objects.
41
+ * It defaults to http.IncomingMessage, and it also extends the relative request object.
42
+ */
43
+ export interface FastifyRequest<RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
44
+ RawServer extends RawServerBase = RawServerDefault,
45
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
46
+ SchemaCompiler extends FastifySchema = FastifySchema,
47
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
48
+ ContextConfig = ContextConfigDefault,
49
+ Logger extends FastifyBaseLogger = FastifyBaseLogger,
50
+ RequestType extends FastifyRequestType = ResolveFastifyRequestType<TypeProvider, SchemaCompiler, RouteGeneric>
51
+ // ^ Temporary Note: RequestType has been re-ordered to be the last argument in
52
+ // generic list. This generic argument is now considered optional as it can be
53
+ // automatically inferred from the SchemaCompiler, RouteGeneric and TypeProvider
54
+ // arguments. Implementations that already pass this argument can either omit
55
+ // the RequestType (preferred) or swap Logger and RequestType arguments when
56
+ // creating custom types of FastifyRequest. Related issue #4123
57
+ > {
58
+ id: string;
59
+ params: RequestType['params']; // deferred inference
60
+ raw: RawRequest;
61
+ query: RequestType['query'];
62
+ headers: RawRequest['headers'] & RequestType['headers']; // this enables the developer to extend the existing http(s|2) headers list
63
+ log: Logger;
64
+ server: FastifyInstance;
65
+ body: RequestType['body'];
66
+
67
+ /** in order for this to be used the user should ensure they have set the attachValidation option. */
68
+ validationError?: Error & { validation: any; validationContext: string };
69
+
70
+ /**
71
+ * @deprecated Use `raw` property
72
+ */
73
+ readonly req: RawRequest & RouteGeneric['Headers']; // this enables the developer to extend the existing http(s|2) headers list
74
+ readonly ip: string;
75
+ readonly ips?: string[];
76
+ readonly host: string;
77
+ readonly port: number;
78
+ readonly hostname: string;
79
+ readonly url: string;
80
+ readonly originalUrl: string;
81
+ readonly protocol: 'http' | 'https';
82
+ readonly method: string;
83
+ readonly routeOptions: Readonly<RequestRouteOptions<ContextConfig, SchemaCompiler>>
84
+ readonly is404: boolean;
85
+ readonly socket: RawRequest['socket'];
86
+ readonly signal: AbortSignal;
87
+
88
+ getValidationFunction(httpPart: HTTPRequestPart): ValidationFunction
89
+ getValidationFunction(schema: { [key: string]: any }): ValidationFunction
90
+ compileValidationSchema(schema: { [key: string]: any }, httpPart?: HTTPRequestPart): ValidationFunction
91
+ validateInput(input: any, schema: { [key: string]: any }, httpPart?: HTTPRequestPart): boolean
92
+ validateInput(input: any, httpPart?: HTTPRequestPart): boolean
93
+ getDecorator<T>(name: string | symbol): T;
94
+ setDecorator<T = unknown>(name: string | symbol, value: T): void;
95
+ }
@@ -0,0 +1,199 @@
1
+ import { FastifyError } from '@fastify/error'
2
+ import { ConstraintStrategy } from 'find-my-way'
3
+ import { FastifyContextConfig } from './context'
4
+ import {
5
+ onErrorHookHandler,
6
+ onRequestAbortHookHandler,
7
+ onRequestHookHandler,
8
+ onResponseHookHandler,
9
+ onSendHookHandler,
10
+ onTimeoutHookHandler,
11
+ preHandlerHookHandler,
12
+ preParsingHookHandler,
13
+ preSerializationHookHandler,
14
+ preValidationHookHandler
15
+ } from './hooks'
16
+ import { FastifyInstance } from './instance'
17
+ import { FastifyBaseLogger, FastifyChildLoggerFactory, LogLevel } from './logger'
18
+ import { FastifyReply, ReplyGenericInterface } from './reply'
19
+ import { FastifyRequest, RequestGenericInterface } from './request'
20
+ import { FastifySchema, FastifySchemaCompiler, FastifySerializerCompiler, SchemaErrorFormatter } from './schema'
21
+ import {
22
+ FastifyTypeProvider,
23
+ FastifyTypeProviderDefault,
24
+ ResolveFastifyReplyReturnType
25
+ } from './type-provider'
26
+ import { ContextConfigDefault, HTTPMethods, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault } from './utils'
27
+
28
+ export interface FastifyRouteConfig {
29
+ url: string;
30
+ method: HTTPMethods | HTTPMethods[];
31
+ }
32
+
33
+ export interface RouteGenericInterface extends RequestGenericInterface, ReplyGenericInterface { }
34
+
35
+ export type RouteConstraintType = Omit<ConstraintStrategy<any>, 'deriveConstraint'> & {
36
+ deriveConstraint<Context>(req: RawRequestDefaultExpression<RawServerDefault>, ctx?: Context, done?: (err: Error, ...args: any) => any): any,
37
+ }
38
+
39
+ export interface RouteConstraint {
40
+ version?: string
41
+ host?: RegExp | string
42
+ [name: string]: unknown
43
+ }
44
+
45
+ /**
46
+ * Route shorthand options for the various shorthand methods
47
+ */
48
+ type RouteShorthandHook<T extends (...args: any) => any> = (...args: Parameters<T>) => void | Promise<unknown>
49
+
50
+ export interface RouteShorthandOptions<
51
+ RawServer extends RawServerBase = RawServerDefault,
52
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
53
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
54
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
55
+ ContextConfig = ContextConfigDefault,
56
+ SchemaCompiler extends FastifySchema = FastifySchema,
57
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
58
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
59
+ > {
60
+ schema?: SchemaCompiler, // originally FastifySchema
61
+ attachValidation?: boolean;
62
+ exposeHeadRoute?: boolean;
63
+
64
+ validatorCompiler?: FastifySchemaCompiler<NoInfer<SchemaCompiler>>;
65
+ serializerCompiler?: FastifySerializerCompiler<NoInfer<SchemaCompiler>>;
66
+ bodyLimit?: number;
67
+ handlerTimeout?: number;
68
+ logLevel?: LogLevel;
69
+ config?: FastifyContextConfig & ContextConfig;
70
+ constraints?: RouteConstraint,
71
+ prefixTrailingSlash?: 'slash' | 'no-slash' | 'both';
72
+ errorHandler?: (
73
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
74
+ error: FastifyError,
75
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, NoInfer<SchemaCompiler>, TypeProvider, ContextConfig, Logger>,
76
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider>
77
+ ) => void;
78
+ childLoggerFactory?: FastifyChildLoggerFactory<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
79
+ schemaErrorFormatter?: SchemaErrorFormatter;
80
+
81
+ // hooks
82
+ onRequest?: RouteShorthandHook<onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
83
+ | RouteShorthandHook<onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
84
+ preParsing?: RouteShorthandHook<preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
85
+ | RouteShorthandHook<preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
86
+ preValidation?: RouteShorthandHook<preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
87
+ | RouteShorthandHook<preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
88
+ preHandler?: RouteShorthandHook<preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
89
+ | RouteShorthandHook<preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
90
+ preSerialization?: RouteShorthandHook<preSerializationHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
91
+ | RouteShorthandHook<preSerializationHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
92
+ onSend?: RouteShorthandHook<onSendHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
93
+ | RouteShorthandHook<onSendHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
94
+ onResponse?: RouteShorthandHook<onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
95
+ | RouteShorthandHook<onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
96
+ onTimeout?: RouteShorthandHook<onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
97
+ | RouteShorthandHook<onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
98
+ onError?: RouteShorthandHook<onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
99
+ | RouteShorthandHook<onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
100
+ onRequestAbort?: RouteShorthandHook<onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>
101
+ | RouteShorthandHook<onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>>[];
102
+ }
103
+ /**
104
+ * Route handler method declaration.
105
+ */
106
+ export type RouteHandlerMethod<
107
+ RawServer extends RawServerBase = RawServerDefault,
108
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
109
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
110
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
111
+ ContextConfig = ContextConfigDefault,
112
+ SchemaCompiler extends FastifySchema = FastifySchema,
113
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
114
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
115
+ > = (
116
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
117
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
118
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>
119
+ // This return type used to be a generic type argument. Due to TypeScript's inference of return types, this rendered returns unchecked.
120
+ ) => ResolveFastifyReplyReturnType<TypeProvider, SchemaCompiler, RouteGeneric>
121
+
122
+ /**
123
+ * Shorthand options including the handler function property
124
+ */
125
+ export interface RouteShorthandOptionsWithHandler<
126
+ RawServer extends RawServerBase = RawServerDefault,
127
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
128
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
129
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
130
+ ContextConfig = ContextConfigDefault,
131
+ SchemaCompiler extends FastifySchema = FastifySchema,
132
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
133
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
134
+ > extends RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> {
135
+ handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, NoInfer<SchemaCompiler>, TypeProvider, Logger>;
136
+ }
137
+
138
+ /**
139
+ * Fastify Router Shorthand method type that is similar to the Express/Restify approach
140
+ */
141
+ export interface RouteShorthandMethod<
142
+ RawServer extends RawServerBase = RawServerDefault,
143
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
144
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
145
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
146
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
147
+ > {
148
+ <RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig = ContextConfigDefault, const SchemaCompiler extends FastifySchema = FastifySchema>(
149
+ path: string,
150
+ opts: RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>,
151
+ handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
152
+ ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
153
+ <RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig = ContextConfigDefault, const SchemaCompiler extends FastifySchema = FastifySchema>(
154
+ path: string,
155
+ handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
156
+ ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
157
+ <RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig = ContextConfigDefault, const SchemaCompiler extends FastifySchema = FastifySchema>(
158
+ path: string,
159
+ opts: RouteShorthandOptionsWithHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>
160
+ ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;
161
+ }
162
+
163
+ /**
164
+ * Fastify route method options.
165
+ */
166
+ export interface RouteOptions<
167
+ RawServer extends RawServerBase = RawServerDefault,
168
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
169
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
170
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
171
+ ContextConfig = ContextConfigDefault,
172
+ SchemaCompiler extends FastifySchema = FastifySchema,
173
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
174
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
175
+ > extends RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> {
176
+ method: HTTPMethods | HTTPMethods[];
177
+ url: string;
178
+ handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>;
179
+ }
180
+
181
+ export type RouteHandler<
182
+ RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
183
+ RawServer extends RawServerBase = RawServerDefault,
184
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
185
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
186
+ ContextConfig = ContextConfigDefault,
187
+ SchemaCompiler extends FastifySchema = FastifySchema,
188
+ TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
189
+ Logger extends FastifyBaseLogger = FastifyBaseLogger
190
+ > = (
191
+ this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,
192
+ request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,
193
+ reply: FastifyReply<RouteGeneric, RawServer, RawRequest, RawReply, ContextConfig, SchemaCompiler, TypeProvider>
194
+ ) => RouteGeneric['Reply'] | void | Promise<RouteGeneric['Reply'] | void>
195
+
196
+ export type DefaultRoute<Request, Reply> = (
197
+ req: Request,
198
+ res: Reply,
199
+ ) => void
@@ -0,0 +1,61 @@
1
+ import { ValidatorFactory } from '@fastify/ajv-compiler'
2
+ import { SerializerFactory } from '@fastify/fast-json-stringify-compiler'
3
+ import { FastifyInstance, SafePromiseLike } from '../fastify'
4
+ /**
5
+ * Schemas in Fastify follow the JSON-Schema standard. For this reason
6
+ * we have opted to not ship strict schema based types. Instead we provide
7
+ * an example in our documentation on how to solve this problem. Check it
8
+ * out here: https://github.com/fastify/fastify/blob/main/docs/Reference/TypeScript.md#json-schema
9
+ */
10
+ export interface FastifySchema {
11
+ body?: unknown;
12
+ querystring?: unknown;
13
+ params?: unknown;
14
+ headers?: unknown;
15
+ response?: unknown;
16
+ }
17
+
18
+ export interface FastifyRouteSchemaDef<T> {
19
+ schema: T;
20
+ method: string;
21
+ url: string;
22
+ httpPart?: string;
23
+ httpStatus?: string;
24
+ contentType?: string;
25
+ }
26
+
27
+ export interface FastifySchemaValidationError {
28
+ keyword: string;
29
+ instancePath: string;
30
+ schemaPath: string;
31
+ params: Record<string, unknown>;
32
+ message?: string;
33
+ }
34
+
35
+ export interface FastifyValidationResult {
36
+ (data: any): boolean | SafePromiseLike<any> | { error?: Error | FastifySchemaValidationError[], value?: any }
37
+ errors?: FastifySchemaValidationError[] | null;
38
+ }
39
+
40
+ /**
41
+ * Compiler for FastifySchema Type
42
+ */
43
+ export type FastifySchemaCompiler<T> = (routeSchema: FastifyRouteSchemaDef<T>) => FastifyValidationResult
44
+
45
+ export type FastifySerializerCompiler<T> = (routeSchema: FastifyRouteSchemaDef<T>) => (data: any) => string
46
+
47
+ export interface FastifySchemaControllerOptions {
48
+ bucket?: (parentSchemas?: unknown) => {
49
+ add(schema: unknown): FastifyInstance;
50
+ getSchema(schemaId: string): unknown;
51
+ getSchemas(): Record<string, unknown>;
52
+ };
53
+ compilersFactory?: {
54
+ buildValidator?: ValidatorFactory;
55
+ buildSerializer?: SerializerFactory;
56
+ };
57
+ }
58
+
59
+ export type SchemaErrorDataVar = 'body' | 'headers' | 'params' | 'querystring'
60
+
61
+ export type SchemaErrorFormatter = (errors: FastifySchemaValidationError[], dataVar: SchemaErrorDataVar) => Error
@@ -0,0 +1,19 @@
1
+ import { RawServerBase, RawServerDefault, RawReplyDefaultExpression, RawRequestDefaultExpression } from './utils'
2
+ import * as http from 'node:http'
3
+ import * as https from 'node:https'
4
+ import * as http2 from 'node:http2'
5
+
6
+ export type FastifyServerFactoryHandler<
7
+ RawServer extends RawServerBase = RawServerDefault,
8
+ RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
9
+ RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>
10
+ > =
11
+ RawServer extends http.Server | https.Server ?
12
+ (request: http.IncomingMessage & RawRequest, response: http.ServerResponse & RawReply) => void :
13
+ (request: http2.Http2ServerRequest & RawRequest, response: http2.Http2ServerResponse & RawReply) => void
14
+
15
+ export interface FastifyServerFactory<
16
+ RawServer extends RawServerBase = RawServerDefault
17
+ > {
18
+ (handler: FastifyServerFactoryHandler<RawServer>, opts: Record<string, unknown>): RawServer;
19
+ }