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>) → TResCall 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>) → TResWrap a raw function to always be called with the specified middleware(s)
Examples
-- ...
local printNew = Middleware.Wrap(printSometing, loggerMiddleware)
printNew { Message = "Wassup" }