xml-disassembler 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@
5
5
 
6
6
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
7
7
 
8
+ ## [1.9.0](https://github.com/mcarvin8/xml-disassembler/compare/v1.8.0...v1.9.0) (2025-04-21)
9
+
10
+
11
+ ### Features
12
+
13
+ * export the transformers ([46ad06b](https://github.com/mcarvin8/xml-disassembler/commit/46ad06b2b7b4e96c4b69f5b23db72198973de5d5))
14
+
15
+ ## [1.8.0](https://github.com/mcarvin8/xml-disassembler/compare/v1.7.0...v1.8.0) (2025-04-18)
16
+
17
+
18
+ ### Features
19
+
20
+ * add new disassemble strategy ([9f65e31](https://github.com/mcarvin8/xml-disassembler/commit/9f65e319dcd78f4bcb5505f941bbe1358c557740))
21
+
8
22
  ## [1.7.0](https://github.com/mcarvin8/xml-disassembler/compare/v1.6.0...v1.7.0) (2025-04-12)
9
23
 
10
24
 
package/README.md CHANGED
@@ -26,8 +26,8 @@ This tool simplifies version control, improves diff readability, and streamlines
26
26
  - [Background](#background)
27
27
  - [Install](#install)
28
28
  - [Disassembling Files](#disassembling-files)
29
+ - [Disassembly Strategies](#disassembly-strategies)
29
30
  - [Reassembling Files](#reassembling-files)
30
- - [Example](#example)
31
31
  - [Use Case](#use-case)
32
32
  - [Ignore File](#ignore-file)
33
33
  - [XML Parser](#xml-parser)
@@ -67,6 +67,8 @@ FLAGS
67
67
  - ignorePath: Path to an XML disassembly ignore file.
68
68
  - format: File format for the disassembled files ("xml", "ini", "json", "json5", "toml", "yaml")
69
69
  Defaults to "xml" if the format isn't supported or provided.
70
+ - strategy: Disassemble strategy ("unique-id" or "grouped-by-tag")
71
+ Defaults to "unique-id" if strategy isn't supported or provided.
70
72
  */
71
73
  import { DisassembleXMLFileHandler } from "xml-disassembler";
72
74
 
@@ -79,9 +81,56 @@ await handler.disassemble({
79
81
  postPurge: true,
80
82
  ignorePath: ".xmldisassemblerignore",
81
83
  format: "json",
84
+ strategy: "unique-id",
82
85
  });
83
86
  ```
84
87
 
88
+ ## Disassembly Strategies
89
+
90
+ `xml-disassembler` supports two disassembly strategies to suit different use cases for nested elements. You can choose a strategy by setting the strategy option when calling disassemble().
91
+
92
+ 🔹 unique-id (default)
93
+
94
+ > This is the strategy all previous versions of the `xml-disassembler` follow.
95
+
96
+ Disassembles each nested element into its own file under sub-directories.
97
+
98
+ File names are generated using one or more unique identifier elements (uniqueIdElements) or fallback to a SHA-256 hash.
99
+
100
+ Leaf elements remain grouped in a file named after the original XML.
101
+
102
+ Best for maximum diff granularity and precision in version control.
103
+
104
+ **Disassembled Directory Samples for Unique IDs**
105
+
106
+ | Format | Unique ID Elements | SHA-256 Hashes |
107
+ | --------- | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
108
+ | **XML** | ![XML UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled.png)<br> | ![XML Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes.png)<br> |
109
+ | **YAML** | ![YAML UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-yaml.png)<br> | ![YAML Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-yaml.png)<br> |
110
+ | **JSON** | ![JSON UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-json.png)<br> | ![JSON Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-json.png)<br> |
111
+ | **JSON5** | ![JSON5 UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-json5.png)<br> | ![JSON5 Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-json5.png)<br> |
112
+ | **TOML** | ![TOML UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-toml.png)<br> | ![TOML Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-toml.png)<br> |
113
+ | **INI** | ![INI UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-ini.png)<br> | ![INI Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-ini.png)<br> |
114
+
115
+ 🔸 grouped-by-tag
116
+
117
+ Groups all nested elements by tag name into a single file (e.g., all `<fieldPermissions>` into `fieldPermissions.xml`).
118
+
119
+ Leaf elements remain grouped in a file named after the original XML.
120
+
121
+ Useful for simplifying diff views and reducing file count in large projects.
122
+
123
+ **Disassembled Directory Samples for Grouped by Tag**
124
+
125
+ | Format | Unique ID Elements |
126
+ | --------- | ----------------------------------------------------------------------------------------------------------------------------- |
127
+ | **XML** | ![XML tag](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-tags.png)<br> |
128
+ | **YAML** | ![YAML tag](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-tags-yaml.png)<br> |
129
+ | **JSON** | ![JSON tag](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-tags-json.png)<br> |
130
+ | **JSON5** | ![JSON5 tag](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-tags-json5.png)<br> |
131
+ | **TOML** | ![TOML tag](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-tags-toml.png)<br> |
132
+ | **INI** | ![INI tag](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-tags-ini.png)<br> |
133
+
85
134
  ## Reassembling Files
86
135
 
87
136
  Reassemble a directory of disassembled files (XML/INI/JSON/JSON5/TOML/YAML) into a single XML file.
@@ -104,68 +153,6 @@ await handler.reassemble({
104
153
  });
105
154
  ```
106
155
 
107
- ## Example
108
-
109
- **Input XML file (`HR_Admin.permissionset-meta.xml`)**
110
-
111
- ```xml
112
- <?xml version="1.0" encoding="UTF-8"?>
113
- <PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
114
- <applicationVisibilities>
115
- <application>JobApps__Recruiting</application>
116
- <visible>true</visible>
117
- </applicationVisibilities>
118
- <classAccesses>
119
- <apexClass>Send_Email_Confirmation</apexClass>
120
- <enabled>true</enabled>
121
- </classAccesses>
122
- <fieldPermissions>
123
- <editable>true</editable>
124
- <field>Job_Request__c.Salary__c</field>
125
- <readable>true</readable>
126
- </fieldPermissions>
127
- <description>Grants all rights needed for an HR administrator to manage employees.</description>
128
- <label>HR Administration</label>
129
- <userLicense>Salesforce</userLicense>
130
- <objectPermissions>
131
- <allowCreate>true</allowCreate>
132
- <allowDelete>true</allowDelete>
133
- <allowEdit>true</allowEdit>
134
- <allowRead>true</allowRead>
135
- <viewAllRecords>true</viewAllRecords>
136
- <modifyAllRecords>true</modifyAllRecords>
137
- <object>Job_Request__c</object>
138
- </objectPermissions>
139
- <pageAccesses>
140
- <apexPage>Job_Request_Web_Form</apexPage>
141
- <enabled>true</enabled>
142
- </pageAccesses>
143
- <recordTypeVisibilities>
144
- <recordType>Recruiting.DevManager</recordType>
145
- <visible>true</visible>
146
- </recordTypeVisibilities>
147
- <tabSettings>
148
- <tab>Job_Request__c</tab>
149
- <visibility>Available</visibility>
150
- </tabSettings>
151
- <userPermissions>
152
- <enabled>true</enabled>
153
- <name>APIEnabled</name>
154
- </userPermissions>
155
- </PermissionSet>
156
- ```
157
-
158
- **Disassembled Directory Samples**
159
-
160
- | Format | Unique ID Elements | SHA-256 Hashes |
161
- | --------- | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
162
- | **XML** | ![XML UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled.png)<br> | ![XML Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes.png)<br> |
163
- | **YAML** | ![YAML UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-yaml.png)<br> | ![YAML Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-yaml.png)<br> |
164
- | **JSON** | ![JSON UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-json.png)<br> | ![JSON Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-json.png)<br> |
165
- | **JSON5** | ![JSON5 UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-json5.png)<br> | ![JSON5 Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-json5.png)<br> |
166
- | **TOML** | ![TOML UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-toml.png)<br> | ![TOML Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-toml.png)<br> |
167
- | **INI** | ![INI UID](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-ini.png)<br> | ![INI Hash](https://raw.githubusercontent.com/mcarvin8/xml-disassembler/main/.github/images/disassembled-hashes-ini.png)<br> |
168
-
169
156
  ## Use Case
170
157
 
171
158
  See [`sf-decomposer`](https://github.com/mcarvin8/sf-decomposer) for a Salesforce CLI use case: