local Util = require("lazyvim.util") ---@class lazyvim.util.json local M = {} ---@param value any ---@param indent string local function encode(value, indent) local t = type(value) if t == "string" then return string.format("%q", value) elseif t == "number" or t == "boolean" then return tostring(value) elseif t == "table" then local is_list = Util.is_list(value) local parts = {} local next_indent = indent .. " " if is_list then ---@diagnostic disable-next-line: no-unknown for _, v in ipairs(value) do local e = encode(v, next_indent) if e then table.insert(parts, next_indent .. e) end end return "[\n" .. table.concat(parts, ",\n") .. "\n" .. indent .. "]" else local keys = vim.tbl_keys(value) table.sort(keys) ---@diagnostic disable-next-line: no-unknown for _, k in ipairs(keys) do local e = encode(value[k], next_indent) if e then table.insert(parts, next_indent .. string.format("%q", k) .. ": " .. e) end end return "{\n" .. table.concat(parts, ",\n") .. "\n" .. indent .. "}" end end end function M.encode(value) return encode(value, "") end return M