import { build, parse } from "plist" import * as fs from "fs/promises" type PlistValue = string | number | boolean | Date | PlistObject | PlistValue[] interface PlistObject { [key: string]: PlistValue } function sortObjectKeys(obj: PlistValue): PlistValue { if (obj === null || typeof obj !== "object") { return obj } if (Array.isArray(obj)) { return obj.map(sortObjectKeys) } const result: PlistObject = {} Object.keys(obj) .sort() .forEach(key => { result[key] = sortObjectKeys((obj as PlistObject)[key]) }) return result } export async function savePlistFile(path: string, data: PlistValue): Promise { const sortedData = sortObjectKeys(data) const plist = build(sortedData) await fs.writeFile(path, plist) } export async function parsePlistFile(file: string): Promise { const data = await fs.readFile(file, "utf8") return parse(data) as T } export type { PlistValue, PlistObject }