local module = {} function module.init() local hooks = {} local hookTrigger = function (name, ...) if not hooks[name] then return ... end local args = {...} for _, func in ipairs(hooks[name]) do if type(func) == 'function' then local retn = {func(unpack(args))} if #retn > 0 then for idx, val in ipairs(retn) do args[idx] = val end end end end return unpack(args) end return function (list) for name, func in pairs(list) do if type(func) == 'function' then hooks[name] = hooks[name] or {} table.insert(hooks[name], func) end end return hookTrigger end end return module