import { type MaybeRef, get } from '@vueuse/core'; import JSON5 from 'json5'; import { jsonrepair } from 'jsonrepair'; export { sortObjectKeys, formatJson }; function sortObjectKeys(obj: T): T { if (typeof obj !== 'object' || obj === null) { return obj; } if (Array.isArray(obj)) { return obj.map(sortObjectKeys) as unknown as T; } return Object.keys(obj) .sort((a, b) => a.localeCompare(b)) .reduce((sortedObj, key) => { sortedObj[key] = sortObjectKeys((obj as Record)[key]); return sortedObj; }, {} as Record) as T; } function formatJson({ rawJson, sortKeys = true, indentSize = 3, repairJson = false, }: { rawJson: MaybeRef sortKeys?: MaybeRef indentSize?: MaybeRef repairJson?: MaybeRef }) { const unwrappedJson = get(rawJson); const jsonString = get(repairJson) ? jsonrepair(unwrappedJson) : unwrappedJson; const parsedObject = JSON5.parse(jsonString); return JSON.stringify(get(sortKeys) ? sortObjectKeys(parsedObject) : parsedObject, null, get(indentSize)); }