diff --git a/types/index.d.ts b/types/index.d.ts index 7edaac1..992a00e 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -2,6 +2,7 @@ import { FastifyPluginCallback, + FastifyReply, FastifyRequest, preHandlerHookHandler, preValidationHookHandler, @@ -17,6 +18,28 @@ import { import { ClientOptions, ServerOptions, WebSocket } from 'ws' import { Logger } from 'pino' +type FastifyReplyWithFromParameters = FastifyReply & { + fromParameters: ( + url: string, + params?: unknown, + prefix?: string + ) => { url: string; options: unknown }; +} + +type ProxyPreHandlerHookHandler = ( + this: preHandlerHookHandler, + request: Parameters[0], + reply: FastifyReplyWithFromParameters, + done: Parameters[2] +) => void + +type ProxyPreValidationHookHandler = ( + this: preValidationHookHandler, + request: Parameters[0], + reply: FastifyReplyWithFromParameters, + done: Parameters[2] +) => void + interface WebSocketHooks { onConnect?: (context: { log: Logger }, source: WebSocket, target: WebSocket) => void; onDisconnect?: (context: { log: Logger }, source: WebSocket) => void; @@ -42,6 +65,7 @@ interface FastifyHttpProxyWebsocketOptionsEnabled { wsHooks?: WebSocketHooks; wsReconnect?: WebSocketReconnectOptions; } + interface FastifyHttpProxyWebsocketOptionsDisabled { websocket?: false | never; wsUpstream?: never; @@ -64,9 +88,9 @@ declare namespace fastifyHttpProxy { prefix?: string; rewritePrefix?: string; proxyPayloads?: boolean; - preHandler?: preHandlerHookHandler; - beforeHandler?: preHandlerHookHandler; - preValidation?: preValidationHookHandler; + preHandler?: ProxyPreHandlerHookHandler; + beforeHandler?: ProxyPreHandlerHookHandler; + preValidation?: ProxyPreValidationHookHandler; config?: Object; replyOptions?: FastifyReplyFromHooks; wsClientOptions?: ClientOptions & { queryString?: { [key: string]: unknown } | QueryStringFunction; }; diff --git a/types/index.test-d.ts b/types/index.test-d.ts index 5106bed..3b044cd 100644 --- a/types/index.test-d.ts +++ b/types/index.test-d.ts @@ -25,14 +25,21 @@ app.register(fastifyHttpProxy, { preHandler: (request, reply) => { expectType(request.raw) expectType(reply.raw) + expectType<(url: string, params?: unknown, prefix?: string) => { url: string; options: unknown }>(reply.fromParameters) }, beforeHandler: (request, reply) => { expectType(request.raw) expectType(reply.raw) + expectType<(url: string, params?: unknown, prefix?: string) => { url: string; options: unknown }>(reply.fromParameters) }, preValidation: (request, reply) => { expectType(request.raw) expectType(reply.raw) + expectType<(url: string, params?: unknown, prefix?: string) => { url: string; options: unknown }>(reply.fromParameters) + + const result = reply.fromParameters('/') + expectType(result.options) + expectType(result.url) }, base: 'whatever', cacheURLs: 10,