mirror of
https://github.com/imezx/Warp.git
synced 2025-04-24 15:10:03 +00:00
46 lines
857 B
Lua
46 lines
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)
|