Middleware
Middleware singleton utility
Types
MiddlewareArgs<TArgs>
type
MiddlewareArgs<TArgs> =
TArgs
&
{
[
string
]
:
any
}
MiddlewareResult<TRes,TArgs>
type
MiddlewareResult<TRes,TArgs> =
TRes
&
{
next:
MiddlewareArgs
<
TArgs
>
?
,
[
string
]
:
any
}
Middleware<TArgs,TRes>
type
Middleware<TArgs,TRes> =
(
MiddlewareArgs
<
TArgs
>
)
→
MiddlewareResult
<
TRes,
TArgs
>
Middlewares<TArgs,TRes>
Functions
Call
Middleware.
Call
(
handler:
MiddlewareHandler
<
TArgs,
TRes
>
,
middlewares:
Middlewares
<
TArgs,
TRes
>
,
args:
MiddlewareArgs
<
TArgs
>
) →
TRes
Call a raw function with specified middleware and arguments
Examples
--!strict
--!optimize 2
-- type PrintSomethingArgs = { Message: string }
-- type PrintSomethingRet = {}
local function printSometing(args: PrintSomethingArgs): PrintSomethingRet
print(args.Message)
return {}
end
local loggerMiddleware: Middleware.Middleware<PrintSomethingArgs, PrintSomethingRet> = function(args)
args.Message = "[INFO]: " .. args.Message
return {
next = args
}
end
Middleware.Call(printSometing, loggerMiddleware, { Message = "Hello" })
Wrap
Middleware.
Wrap
(
handler:
MiddlewareHandler
<
TArgs,
TRes
>
,
middlewares:
Middlewares
<
TArgs,
TRes
>
) →
(
MiddlewareArgs
<
TArgs
>
)
→
TRes
Wrap a raw function to always be called with the specified middleware(s)
Examples
-- ...
local printNew = Middleware.Wrap(printSometing, loggerMiddleware)
printNew { Message = "Wassup" }