import map from "./lodash/#map"; import zipObject from "./lodash/#zipObject"; import extractPrefskeyName from "./_internal/_extractPrefskeyName"; import partitionPrefsPairs from "./_internal/_partitionPrefsPairs"; import splitPrefsPairs from "./_internal/_splitPrefsPairs"; import splitPrefsSection from "./_internal/_splitPrefsSection"; import trimPrefsBlankChar from "./_internal/_trimPrefsBlankChar"; import readFile from "./readFile"; /** * 将首选项文件转换为对象键值对 * * @param {LooseFile} path * @returns {{ [x: string]: { [x: string]: string } }} * @since 0.1.0 * @category Soil * @see {@linkcode decodePrefs} * @example * * ```ts * const prefPath = _.createPath(_.pathUserData.fsName, "Adobe", "After Effects", "22.6", "Adobe After Effects 22.6 设置.txt"); * // 注意:每个版本的 Ae,偏好文件的存放位置都不同,主要区别在路径中的版本号,请确保正确的版本号方可读取。 * const prefData = _.parsePrefs(prefPath); * _.logJson(prefData); * // 结果:桌面 Json 日志会记录转换为标准 Json 的偏好文件。 * ``` */ function parsePrefs(path: LooseFile): { [x: string]: { [x: string]: string } } { const splitSection = splitPrefsSection(readFile(path) as string); const groupedSection = partitionPrefsPairs(splitSection); const section = map(groupedSection[0], extractPrefskeyName); const pairs = map(map(groupedSection[1], splitPrefsPairs), function (values) { const groupedPairs = partitionPrefsPairs(values); const keys = map(groupedPairs[0], extractPrefskeyName); return zipObject(keys, map(groupedPairs[1], trimPrefsBlankChar)); }); return zipObject(section, pairs); } export default parsePrefs;