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.
- package/.borp.yaml +3 -0
- package/.markdownlint-cli2.yaml +22 -0
- package/.prettierignore +1 -0
- package/GOVERNANCE.md +4 -0
- package/LICENSE +21 -0
- package/PROJECT_CHARTER.md +126 -0
- package/README.md +423 -0
- package/SECURITY.md +220 -0
- package/SPONSORS.md +24 -0
- package/build/build-error-serializer.js +35 -0
- package/build/build-validation.js +169 -0
- package/build/sync-version.js +11 -0
- package/docs/Guides/Benchmarking.md +60 -0
- package/docs/Guides/Database.md +321 -0
- package/docs/Guides/Delay-Accepting-Requests.md +608 -0
- package/docs/Guides/Detecting-When-Clients-Abort.md +172 -0
- package/docs/Guides/Ecosystem.md +726 -0
- package/docs/Guides/Fluent-Schema.md +127 -0
- package/docs/Guides/Getting-Started.md +620 -0
- package/docs/Guides/Index.md +43 -0
- package/docs/Guides/Migration-Guide-V3.md +287 -0
- package/docs/Guides/Migration-Guide-V4.md +267 -0
- package/docs/Guides/Migration-Guide-V5.md +727 -0
- package/docs/Guides/Plugins-Guide.md +520 -0
- package/docs/Guides/Prototype-Poisoning.md +383 -0
- package/docs/Guides/Recommendations.md +378 -0
- package/docs/Guides/Serverless.md +604 -0
- package/docs/Guides/Style-Guide.md +246 -0
- package/docs/Guides/Testing.md +481 -0
- package/docs/Guides/Write-Plugin.md +103 -0
- package/docs/Guides/Write-Type-Provider.md +34 -0
- package/docs/Reference/ContentTypeParser.md +271 -0
- package/docs/Reference/Decorators.md +436 -0
- package/docs/Reference/Encapsulation.md +194 -0
- package/docs/Reference/Errors.md +377 -0
- package/docs/Reference/HTTP2.md +94 -0
- package/docs/Reference/Hooks.md +958 -0
- package/docs/Reference/Index.md +73 -0
- package/docs/Reference/LTS.md +86 -0
- package/docs/Reference/Lifecycle.md +99 -0
- package/docs/Reference/Logging.md +268 -0
- package/docs/Reference/Middleware.md +79 -0
- package/docs/Reference/Plugins.md +245 -0
- package/docs/Reference/Principles.md +73 -0
- package/docs/Reference/Reply.md +1001 -0
- package/docs/Reference/Request.md +295 -0
- package/docs/Reference/Routes.md +802 -0
- package/docs/Reference/Server.md +2389 -0
- package/docs/Reference/Type-Providers.md +256 -0
- package/docs/Reference/TypeScript.md +1729 -0
- package/docs/Reference/Validation-and-Serialization.md +1130 -0
- package/docs/Reference/Warnings.md +58 -0
- package/docs/index.md +24 -0
- package/docs/resources/encapsulation_context.drawio +1 -0
- package/docs/resources/encapsulation_context.svg +3 -0
- package/eslint.config.js +35 -0
- package/examples/asyncawait.js +38 -0
- package/examples/benchmark/body.json +3 -0
- package/examples/benchmark/hooks-benchmark-async-await.js +44 -0
- package/examples/benchmark/hooks-benchmark.js +52 -0
- package/examples/benchmark/parser.js +47 -0
- package/examples/benchmark/simple.js +30 -0
- package/examples/benchmark/webstream.js +27 -0
- package/examples/hooks.js +91 -0
- package/examples/http2.js +39 -0
- package/examples/https.js +38 -0
- package/examples/parser.js +53 -0
- package/examples/plugin.js +12 -0
- package/examples/route-prefix.js +38 -0
- package/examples/shared-schema.js +38 -0
- package/examples/simple-stream.js +20 -0
- package/examples/simple.js +32 -0
- package/examples/simple.mjs +27 -0
- package/examples/typescript-server.ts +79 -0
- package/examples/use-plugin.js +29 -0
- package/fastify.d.ts +253 -0
- package/fastify.js +985 -0
- package/integration/server.js +29 -0
- package/integration/test.sh +23 -0
- package/lib/config-validator.js +1266 -0
- package/lib/content-type-parser.js +413 -0
- package/lib/content-type.js +160 -0
- package/lib/context.js +98 -0
- package/lib/decorate.js +152 -0
- package/lib/error-handler.js +173 -0
- package/lib/error-serializer.js +134 -0
- package/lib/error-status.js +14 -0
- package/lib/errors.js +516 -0
- package/lib/four-oh-four.js +190 -0
- package/lib/handle-request.js +195 -0
- package/lib/head-route.js +45 -0
- package/lib/hooks.js +429 -0
- package/lib/initial-config-validation.js +37 -0
- package/lib/logger-factory.js +136 -0
- package/lib/logger-pino.js +68 -0
- package/lib/noop-set.js +10 -0
- package/lib/plugin-override.js +90 -0
- package/lib/plugin-utils.js +169 -0
- package/lib/promise.js +23 -0
- package/lib/reply.js +1030 -0
- package/lib/req-id-gen-factory.js +52 -0
- package/lib/request.js +391 -0
- package/lib/route.js +686 -0
- package/lib/schema-controller.js +164 -0
- package/lib/schemas.js +207 -0
- package/lib/server.js +441 -0
- package/lib/symbols.js +71 -0
- package/lib/validation.js +280 -0
- package/lib/warnings.js +57 -0
- package/lib/wrap-thenable.js +84 -0
- package/package.json +225 -0
- package/scripts/validate-ecosystem-links.js +179 -0
- package/test/404s.test.js +2035 -0
- package/test/500s.test.js +422 -0
- package/test/allow-unsafe-regex.test.js +92 -0
- package/test/als.test.js +65 -0
- package/test/async-await.test.js +705 -0
- package/test/async-dispose.test.js +20 -0
- package/test/async_hooks.test.js +52 -0
- package/test/body-limit.test.js +224 -0
- package/test/buffer.test.js +74 -0
- package/test/build/error-serializer.test.js +36 -0
- package/test/build/version.test.js +14 -0
- package/test/build-certificate.js +109 -0
- package/test/bundler/README.md +29 -0
- package/test/bundler/esbuild/bundler-test.js +32 -0
- package/test/bundler/esbuild/package.json +10 -0
- package/test/bundler/esbuild/src/fail-plugin-version.js +14 -0
- package/test/bundler/esbuild/src/index.js +9 -0
- package/test/bundler/webpack/bundler-test.js +32 -0
- package/test/bundler/webpack/package.json +11 -0
- package/test/bundler/webpack/src/fail-plugin-version.js +14 -0
- package/test/bundler/webpack/src/index.js +9 -0
- package/test/bundler/webpack/webpack.config.js +15 -0
- package/test/case-insensitive.test.js +102 -0
- package/test/chainable.test.js +40 -0
- package/test/child-logger-factory.test.js +128 -0
- package/test/client-timeout.test.js +38 -0
- package/test/close-pipelining.test.js +78 -0
- package/test/close.test.js +706 -0
- package/test/conditional-pino.test.js +47 -0
- package/test/connection-timeout.test.js +42 -0
- package/test/constrained-routes.test.js +1138 -0
- package/test/content-length.test.js +174 -0
- package/test/content-parser.test.js +739 -0
- package/test/content-type.test.js +181 -0
- package/test/context-config.test.js +164 -0
- package/test/custom-http-server.test.js +118 -0
- package/test/custom-parser-async.test.js +59 -0
- package/test/custom-parser.0.test.js +701 -0
- package/test/custom-parser.1.test.js +266 -0
- package/test/custom-parser.2.test.js +91 -0
- package/test/custom-parser.3.test.js +208 -0
- package/test/custom-parser.4.test.js +218 -0
- package/test/custom-parser.5.test.js +130 -0
- package/test/custom-querystring-parser.test.js +129 -0
- package/test/decorator.test.js +1330 -0
- package/test/delete.test.js +344 -0
- package/test/diagnostics-channel/404.test.js +49 -0
- package/test/diagnostics-channel/async-delay-request.test.js +65 -0
- package/test/diagnostics-channel/async-request.test.js +64 -0
- package/test/diagnostics-channel/error-before-handler.test.js +35 -0
- package/test/diagnostics-channel/error-request.test.js +53 -0
- package/test/diagnostics-channel/error-status.test.js +123 -0
- package/test/diagnostics-channel/init.test.js +50 -0
- package/test/diagnostics-channel/sync-delay-request.test.js +49 -0
- package/test/diagnostics-channel/sync-request-reply.test.js +51 -0
- package/test/diagnostics-channel/sync-request.test.js +54 -0
- package/test/encapsulated-child-logger-factory.test.js +69 -0
- package/test/encapsulated-error-handler.test.js +237 -0
- package/test/esm/errorCodes.test.mjs +10 -0
- package/test/esm/esm.test.mjs +13 -0
- package/test/esm/index.test.js +8 -0
- package/test/esm/named-exports.mjs +14 -0
- package/test/esm/other.mjs +8 -0
- package/test/esm/plugin.mjs +8 -0
- package/test/fastify-instance.test.js +300 -0
- package/test/find-route.test.js +152 -0
- package/test/fluent-schema.test.js +209 -0
- package/test/genReqId.test.js +426 -0
- package/test/handler-context.test.js +45 -0
- package/test/handler-timeout.test.js +367 -0
- package/test/has-route.test.js +88 -0
- package/test/header-overflow.test.js +55 -0
- package/test/helper.js +496 -0
- package/test/hooks-async.test.js +1099 -0
- package/test/hooks.on-listen.test.js +1162 -0
- package/test/hooks.on-ready.test.js +421 -0
- package/test/hooks.test.js +3578 -0
- package/test/http-methods/copy.test.js +35 -0
- package/test/http-methods/custom-http-methods.test.js +114 -0
- package/test/http-methods/get.test.js +412 -0
- package/test/http-methods/head.test.js +263 -0
- package/test/http-methods/lock.test.js +108 -0
- package/test/http-methods/mkcalendar.test.js +143 -0
- package/test/http-methods/mkcol.test.js +35 -0
- package/test/http-methods/move.test.js +42 -0
- package/test/http-methods/propfind.test.js +136 -0
- package/test/http-methods/proppatch.test.js +105 -0
- package/test/http-methods/report.test.js +142 -0
- package/test/http-methods/search.test.js +233 -0
- package/test/http-methods/trace.test.js +21 -0
- package/test/http-methods/unlock.test.js +38 -0
- package/test/http2/closing.test.js +270 -0
- package/test/http2/constraint.test.js +109 -0
- package/test/http2/head.test.js +34 -0
- package/test/http2/plain.test.js +68 -0
- package/test/http2/secure-with-fallback.test.js +113 -0
- package/test/http2/secure.test.js +67 -0
- package/test/http2/unknown-http-method.test.js +34 -0
- package/test/https/custom-https-server.test.js +58 -0
- package/test/https/https.test.js +136 -0
- package/test/imports.test.js +17 -0
- package/test/inject.test.js +502 -0
- package/test/input-validation.js +335 -0
- package/test/internals/all.test.js +38 -0
- package/test/internals/content-type-parser.test.js +111 -0
- package/test/internals/context.test.js +31 -0
- package/test/internals/decorator.test.js +156 -0
- package/test/internals/errors.test.js +982 -0
- package/test/internals/handle-request.test.js +270 -0
- package/test/internals/hook-runner.test.js +449 -0
- package/test/internals/hooks.test.js +96 -0
- package/test/internals/initial-config.test.js +383 -0
- package/test/internals/logger.test.js +163 -0
- package/test/internals/plugin.test.js +170 -0
- package/test/internals/promise.test.js +63 -0
- package/test/internals/reply-serialize.test.js +714 -0
- package/test/internals/reply.test.js +1920 -0
- package/test/internals/req-id-gen-factory.test.js +133 -0
- package/test/internals/request-validate.test.js +1402 -0
- package/test/internals/request.test.js +506 -0
- package/test/internals/schema-controller-perf.test.js +40 -0
- package/test/internals/server.test.js +91 -0
- package/test/internals/validation.test.js +352 -0
- package/test/issue-4959.test.js +118 -0
- package/test/keep-alive-timeout.test.js +42 -0
- package/test/listen.1.test.js +154 -0
- package/test/listen.2.test.js +113 -0
- package/test/listen.3.test.js +83 -0
- package/test/listen.4.test.js +168 -0
- package/test/listen.5.test.js +122 -0
- package/test/logger/instantiation.test.js +341 -0
- package/test/logger/logger-test-utils.js +47 -0
- package/test/logger/logging.test.js +460 -0
- package/test/logger/options.test.js +579 -0
- package/test/logger/request.test.js +292 -0
- package/test/logger/response.test.js +183 -0
- package/test/logger/tap-parallel-not-ok +0 -0
- package/test/max-requests-per-socket.test.js +113 -0
- package/test/middleware.test.js +37 -0
- package/test/noop-set.test.js +19 -0
- package/test/nullable-validation.test.js +187 -0
- package/test/options.error-handler.test.js +5 -0
- package/test/options.test.js +5 -0
- package/test/output-validation.test.js +140 -0
- package/test/patch.error-handler.test.js +5 -0
- package/test/patch.test.js +5 -0
- package/test/plugin.1.test.js +230 -0
- package/test/plugin.2.test.js +314 -0
- package/test/plugin.3.test.js +287 -0
- package/test/plugin.4.test.js +504 -0
- package/test/plugin.helper.js +8 -0
- package/test/plugin.name.display.js +10 -0
- package/test/post-empty-body.test.js +38 -0
- package/test/pretty-print.test.js +366 -0
- package/test/promises.test.js +125 -0
- package/test/proto-poisoning.test.js +145 -0
- package/test/put.error-handler.test.js +5 -0
- package/test/put.test.js +5 -0
- package/test/register.test.js +184 -0
- package/test/reply-code.test.js +148 -0
- package/test/reply-early-hints.test.js +100 -0
- package/test/reply-error.test.js +815 -0
- package/test/reply-trailers.test.js +445 -0
- package/test/reply-web-stream-locked.test.js +37 -0
- package/test/request-error.test.js +624 -0
- package/test/request-header-host.test.js +339 -0
- package/test/request-id.test.js +118 -0
- package/test/request-timeout.test.js +53 -0
- package/test/route-hooks.test.js +635 -0
- package/test/route-prefix.test.js +904 -0
- package/test/route-shorthand.test.js +48 -0
- package/test/route.1.test.js +259 -0
- package/test/route.2.test.js +100 -0
- package/test/route.3.test.js +213 -0
- package/test/route.4.test.js +127 -0
- package/test/route.5.test.js +211 -0
- package/test/route.6.test.js +306 -0
- package/test/route.7.test.js +406 -0
- package/test/route.8.test.js +225 -0
- package/test/router-options.test.js +1108 -0
- package/test/same-shape.test.js +124 -0
- package/test/schema-examples.test.js +661 -0
- package/test/schema-feature.test.js +2198 -0
- package/test/schema-serialization.test.js +1171 -0
- package/test/schema-special-usage.test.js +1348 -0
- package/test/schema-validation.test.js +1572 -0
- package/test/scripts/validate-ecosystem-links.test.js +339 -0
- package/test/serialize-response.test.js +186 -0
- package/test/server.test.js +347 -0
- package/test/set-error-handler.test.js +69 -0
- package/test/skip-reply-send.test.js +317 -0
- package/test/stream-serializers.test.js +40 -0
- package/test/stream.1.test.js +94 -0
- package/test/stream.2.test.js +129 -0
- package/test/stream.3.test.js +198 -0
- package/test/stream.4.test.js +176 -0
- package/test/stream.5.test.js +188 -0
- package/test/sync-routes.test.js +32 -0
- package/test/throw.test.js +359 -0
- package/test/toolkit.js +63 -0
- package/test/trust-proxy.test.js +162 -0
- package/test/type-provider.test.js +22 -0
- package/test/types/content-type-parser.test-d.ts +72 -0
- package/test/types/decorate-request-reply.test-d.ts +18 -0
- package/test/types/dummy-plugin.ts +9 -0
- package/test/types/errors.test-d.ts +90 -0
- package/test/types/fastify.test-d.ts +352 -0
- package/test/types/hooks.test-d.ts +550 -0
- package/test/types/import.ts +2 -0
- package/test/types/instance.test-d.ts +588 -0
- package/test/types/logger.test-d.ts +277 -0
- package/test/types/plugin.test-d.ts +97 -0
- package/test/types/register.test-d.ts +237 -0
- package/test/types/reply.test-d.ts +254 -0
- package/test/types/request.test-d.ts +188 -0
- package/test/types/route.test-d.ts +553 -0
- package/test/types/schema.test-d.ts +135 -0
- package/test/types/serverFactory.test-d.ts +37 -0
- package/test/types/type-provider.test-d.ts +1213 -0
- package/test/types/using.test-d.ts +17 -0
- package/test/upgrade.test.js +52 -0
- package/test/url-rewriting.test.js +122 -0
- package/test/use-semicolon-delimiter.test.js +168 -0
- package/test/validation-error-handling.test.js +900 -0
- package/test/versioned-routes.test.js +603 -0
- package/test/web-api.test.js +616 -0
- package/test/wrap-thenable.test.js +30 -0
- package/types/content-type-parser.d.ts +75 -0
- package/types/context.d.ts +22 -0
- package/types/errors.d.ts +92 -0
- package/types/hooks.d.ts +875 -0
- package/types/instance.d.ts +609 -0
- package/types/logger.d.ts +107 -0
- package/types/plugin.d.ts +44 -0
- package/types/register.d.ts +42 -0
- package/types/reply.d.ts +81 -0
- package/types/request.d.ts +95 -0
- package/types/route.d.ts +199 -0
- package/types/schema.d.ts +61 -0
- package/types/server-factory.d.ts +19 -0
- package/types/type-provider.d.ts +130 -0
- 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
|
+
}
|
package/types/reply.d.ts
ADDED
|
@@ -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
|
+
}
|
package/types/route.d.ts
ADDED
|
@@ -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
|
+
}
|