fix: handle sparse array patches (#10)

This commit is contained in:
richard 2024-07-05 13:14:07 -07:00 • committed by GitHub
parent 9f28457452
commit a5a183c3a6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 0 deletions

View file

@ -44,8 +44,16 @@ local function apply(state: any, patches: any): any
end
local nextState = table.clone(state)
local stateIsArray = state[1] ~= nil
for key, patch in patches do
-- Diff-checking an array produces a sparse array, which will not be
-- preserved when converted to JSON. To prevent this, we turn string
-- keys back into numeric keys.
if stateIsArray and type(key) == "string" then
key = tonumber(key) or key
end
nextState[key] = apply(nextState[key], patch)
end