local function u(u)return debug.traceback(u)end local function q(q,l)return function(r)if typeof(r)=="\102\117\110\099\116\105\111\110"then local q,P=xpcall(function()return r(l)end,u)if not q then l._errorReporter.reportReducerError(l:getState(),r,{message="\067\097\117\103\104\116 \101\114\114\111\114 \105\110 \116\104\117\110\107";thrownValue=P})return nil end return P end return q(r)end end return q
--[[
	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
