diff options
author | 2023-03-29 23:25:39 +0200 | |
---|---|---|
committer | 2023-03-29 23:33:30 +0200 | |
commit | 3b625fd4736819b575f275ea39812c055565b13a (patch) | |
tree | 0dc0451e2b36e19888f51b02ae8bcaf8790b560d /src/tools/json-viewer/json.models.ts | |
parent | 863c8d0f6a7e23dbafaca69e6702870957488e8f (diff) | |
download | it-tools-3b625fd4736819b575f275ea39812c055565b13a.tar.gz it-tools-3b625fd4736819b575f275ea39812c055565b13a.tar.zst it-tools-3b625fd4736819b575f275ea39812c055565b13a.zip |
feat(json-prettify): sort keys
Diffstat (limited to 'src/tools/json-viewer/json.models.ts')
-rw-r--r-- | src/tools/json-viewer/json.models.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/tools/json-viewer/json.models.ts b/src/tools/json-viewer/json.models.ts new file mode 100644 index 0000000..15f981f --- /dev/null +++ b/src/tools/json-viewer/json.models.ts @@ -0,0 +1,35 @@ +import { get, type MaybeRef } from '@vueuse/core'; +import JSON5 from 'json5'; + +export { sortObjectKeys, formatJson }; + +function sortObjectKeys<T>(obj: T): T { + if (typeof obj !== 'object' || obj === null) { + return obj; + } + + if (Array.isArray(obj)) { + return obj.map(sortObjectKeys) as T; + } + + return Object.keys(obj) + .sort() + .reduce((sortedObj, key) => { + sortedObj[key] = sortObjectKeys((obj as Record<string, unknown>)[key]); + return sortedObj; + }, {} as Record<string, unknown>) as T; +} + +function formatJson({ + rawJson, + sortKeys = true, + indentSize = 3, +}: { + rawJson: MaybeRef<string>; + sortKeys?: MaybeRef<boolean>; + indentSize?: MaybeRef<number>; +}) { + const parsedObject = JSON5.parse(get(rawJson)); + + return JSON.stringify(get(sortKeys) ? sortObjectKeys(parsedObject) : parsedObject, null, get(indentSize)); +} |