--[[ A middleware that allows for functions to be dispatched. Functions will receive a single argument, the store itself. This middleware consumes the function; middleware further down the chain will not receive it. ]] local function tracebackReporter(message) return debug.traceback(message) end local function thunkMiddleware(nextDispatch, store) return function(action) if typeof(action) == "function" then local ok, result = xpcall(function() return action(store) end, tracebackReporter) if not ok then -- report the error and move on so it's non-fatal app store._errorReporter.reportReducerError(store:getState(), action, { message = "Caught error in thunk", thrownValue = result, }) return nil end return result end return nextDispatch(action) end end return thunkMiddleware