Warp/src/Index/Util/Middleware.luau
EternityDev 064075fbd9 v1.0.12
2024-05-29 16:58:20 +07:00

46 lines
No EOL
857 B
Lua

--!strict
--!native
--!optimize 2
local Middleware = {}
Middleware.__index = Middleware
local function wrap(middleware: (...any) -> (...any)): (...any) -> boolean
return function(...): boolean
local obj: any = { ... }
local s, r = pcall(function()
return middleware(table.unpack(obj))
end)
if not s and r then
warn(r)
r = nil
table.clear(obj)
obj = nil
end
return s
end
end
function Middleware.new(key: string)
return setmetatable({
root = key,
bridge = function(...: any?): any?
return true
end,
}, Middleware)
end
function Middleware:middleware(middleware: (...any) -> (...any))
self.bridge = wrap(middleware)
return self
end
function Middleware:key(): string
return self.root
end
function Middleware:destroy()
table.clear(self)
setmetatable(self, nil)
end
return Middleware.new :: typeof(Middleware.new)