This extension formats Salesforce XML files more meaningfully to improve readability and minimize changes.
This extension is powered by the xml2js library with some customizations to implement file-specific indentation requirements, special characters escaping, and a newline character at the end of the XML file.
The sorting algorithm is custom comparator-based sort tailored for Salesforce XML files. This algorithm is inspired by the SwagUp.sf-xml-formatter sorting algorithm using a similar sorting approach.
- Identify Type: Determine if the input is a primitive value (number, string, etc.), an array, or an object.
- Generate Identifiers:
- For primitive values, convert the value to a string.
- For arrays, recursively generate identifiers for each element and combine them into a single identifier.
- For objects, recursively generate identifiers for each key-value pair, using a specified set of relevant keys if provided, and combine them into a single identifier.
- Custom Comparison: Compare two elements by their generated identifiers to determine their sort order.
- Recursive Sorting:
- For arrays, recursively sort each element and then sort the array based on the custom comparison.
- For objects, recursively sort the values of each key and create a new object with the sorted keys.
- Sorted keys are defined in the
mappedKeys
option in the sortConfig.ts file. - Unsorted keys are defined in the
unmappedKeys
option in the sortConfig.ts file.
- Sorted keys are defined in the
It also handles special characters in string values, such as apostrophes, which are escaped when formatted. The algorithm also inserts a newline characters at the end of the XML file.