56 lines
1.3 KiB
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
|