Clients/Client2018/content/LuaPackages/RoduxImpl/loggerMiddleware.lua

56 lines
1.3 KiB
Lua

local indent = " "
local function prettyPrint(value, indentLevel)
indentLevel = indentLevel or 0
local output = {}
if typeof(value) == "table" then
table.insert(output, "{\n")
for key, value in pairs(value) do
table.insert(output, indent:rep(indentLevel + 1))
table.insert(output, tostring(key))
table.insert(output, " = ")
table.insert(output, prettyPrint(value, indentLevel + 1))
table.insert(output, "\n")
end
table.insert(output, indent:rep(indentLevel))
table.insert(output, "}")
elseif typeof(value) == "string" then
table.insert(output, string.format("%q", value))
table.insert(output, " (string)")
else
table.insert(output, tostring(value))
table.insert(output, " (")
table.insert(output, typeof(value))
table.insert(output, ")")
end
return table.concat(output, "")
end
-- We want to be able to override outputFunction in tests, so the shape of this
-- module is kind of unconventional.
--
-- We fix it this weird shape in init.lua.
local loggerMiddleware = {
outputFunction = print,
}
function loggerMiddleware.middleware(nextDispatch, store)
return function(action)
local result = nextDispatch(action)
loggerMiddleware.outputFunction(("Action dispatched: %s\nState changed to: %s"):format(
prettyPrint(action),
prettyPrint(store:getState())
))
return result
end
end
return loggerMiddleware