sf-decomposer 6.16.0 → 6.17.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,18 @@
|
|
|
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
|
+
## [6.17.0](https://github.com/mcarvin8/sf-decomposer/compare/v6.16.0...v6.17.0) (2026-05-04)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **decompose:** expand uniqueIdElements coverage for 11 metadata types ([#432](https://github.com/mcarvin8/sf-decomposer/issues/432)) ([7e8d73a](https://github.com/mcarvin8/sf-decomposer/commit/7e8d73a15fbcc860d1aff78067e5851703216c9a))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **decompose:** bump config-disassembler to 1.1.3 and add approval/entitlement uniqueIdElements ([#430](https://github.com/mcarvin8/sf-decomposer/issues/430)) ([82b2458](https://github.com/mcarvin8/sf-decomposer/commit/82b2458a228e2a0a9ff5a7a49ad1fcc763fb0274))
|
|
19
|
+
|
|
8
20
|
## [6.16.0](https://github.com/mcarvin8/sf-decomposer/compare/v6.15.1...v6.16.0) (2026-05-01)
|
|
9
21
|
|
|
10
22
|
|
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
[](https://raw.githubusercontent.com/mcarvin8/sf-decomposer/main/LICENSE.md)
|
|
6
6
|
[](https://qlty.sh/gh/mcarvin8/projects/sf-decomposer)
|
|
7
7
|
[](https://codecov.io/gh/mcarvin8/sf-decomposer)
|
|
8
|
+
[](https://mcarvin8.github.io/sf-decomposer/dev/bench/runtime/)
|
|
8
9
|
|
|
9
10
|
A Salesforce CLI plugin that **decomposes** large metadata XML files into smaller, version-control–friendly files (XML, JSON, YAML, JSON5), and **recomposes** them back into deployment-ready metadata.
|
|
10
11
|
|
|
@@ -23,6 +23,45 @@ declare const _default: {
|
|
|
23
23
|
loyaltyProgramSetup: {
|
|
24
24
|
uniqueIdElements: string[];
|
|
25
25
|
};
|
|
26
|
+
entitlementProcess: {
|
|
27
|
+
uniqueIdElements: string[];
|
|
28
|
+
};
|
|
29
|
+
approvalProcess: {
|
|
30
|
+
uniqueIdElements: string[];
|
|
31
|
+
};
|
|
32
|
+
quickAction: {
|
|
33
|
+
uniqueIdElements: string[];
|
|
34
|
+
};
|
|
35
|
+
md: {
|
|
36
|
+
uniqueIdElements: string[];
|
|
37
|
+
};
|
|
38
|
+
pathAssistant: {
|
|
39
|
+
uniqueIdElements: string[];
|
|
40
|
+
};
|
|
41
|
+
omniSupervisorConfig: {
|
|
42
|
+
uniqueIdElements: string[];
|
|
43
|
+
};
|
|
44
|
+
genAiPromptTemplate: {
|
|
45
|
+
uniqueIdElements: string[];
|
|
46
|
+
};
|
|
47
|
+
mlDomain: {
|
|
48
|
+
uniqueIdElements: string[];
|
|
49
|
+
};
|
|
50
|
+
liveChatAgentConfig: {
|
|
51
|
+
uniqueIdElements: string[];
|
|
52
|
+
};
|
|
53
|
+
liveChatButton: {
|
|
54
|
+
uniqueIdElements: string[];
|
|
55
|
+
};
|
|
56
|
+
duplicateRule: {
|
|
57
|
+
uniqueIdElements: string[];
|
|
58
|
+
};
|
|
59
|
+
queue: {
|
|
60
|
+
uniqueIdElements: string[];
|
|
61
|
+
};
|
|
62
|
+
reportType: {
|
|
63
|
+
uniqueIdElements: string[];
|
|
64
|
+
};
|
|
26
65
|
mutingpermissionset: {
|
|
27
66
|
uniqueIdElements: string[];
|
|
28
67
|
};
|
|
@@ -71,6 +71,83 @@ export default [
|
|
|
71
71
|
loyaltyProgramSetup: {
|
|
72
72
|
uniqueIdElements: ['processName'],
|
|
73
73
|
},
|
|
74
|
+
entitlementProcess: {
|
|
75
|
+
// `<milestones>` items have no `<fullName>`/`<name>`; the canonical key
|
|
76
|
+
// is `<milestoneName>`. Without this, every milestone shard falls back
|
|
77
|
+
// to a SHA-256 hash filename.
|
|
78
|
+
uniqueIdElements: ['milestoneName'],
|
|
79
|
+
},
|
|
80
|
+
approvalProcess: {
|
|
81
|
+
// `<approvalStep>` already keys off `<name>` via the default list, but
|
|
82
|
+
// `<allowedSubmitters>` items only carry `<type>` (e.g. `creator`,
|
|
83
|
+
// `owner`, `queue`). Multiple submitters with the same `<type>` in one
|
|
84
|
+
// process will collide and fall back to SHA-256, which is acceptable
|
|
85
|
+
// (and rare in practice) compared to *every* allowedSubmitters shard
|
|
86
|
+
// hashing today.
|
|
87
|
+
uniqueIdElements: ['type'],
|
|
88
|
+
},
|
|
89
|
+
quickAction: {
|
|
90
|
+
// `<fieldOverrides>` and `<quickActionLayoutItems>` both key off
|
|
91
|
+
// `<field>`. Singleton wrappers like `<quickActionLayout>` and
|
|
92
|
+
// `<quickActionSendEmailOptions>` still hash (one stable hash per
|
|
93
|
+
// parent), which is correct and intentional.
|
|
94
|
+
uniqueIdElements: ['field'],
|
|
95
|
+
},
|
|
96
|
+
md: {
|
|
97
|
+
// `<values>` items inside a `<CustomMetadata>` record are keyed by
|
|
98
|
+
// `<field>`. Each customMetadata file holds 1..N values for distinct
|
|
99
|
+
// fields, so `<field>` is unique per shard.
|
|
100
|
+
uniqueIdElements: ['field'],
|
|
101
|
+
},
|
|
102
|
+
pathAssistant: {
|
|
103
|
+
// `<pathAssistantSteps>` items use `<picklistValueName>` (a stage
|
|
104
|
+
// value like "Planning", "Pre-Live Review") as their natural key.
|
|
105
|
+
uniqueIdElements: ['picklistValueName'],
|
|
106
|
+
},
|
|
107
|
+
omniSupervisorConfig: {
|
|
108
|
+
// Six sibling repeating elements: `<omniSupervisorConfigUser>` /
|
|
109
|
+
// `<...Group>` / `<...Queue>` / `<...Profile>` / `<...Skill>` /
|
|
110
|
+
// `<...Action>`. Each item carries exactly one of these inner-name
|
|
111
|
+
// fields, and `find_id_in_subtree` picks whichever one is present.
|
|
112
|
+
uniqueIdElements: ['user', 'group', 'queue', 'profile', 'skill', 'actionName'],
|
|
113
|
+
},
|
|
114
|
+
genAiPromptTemplate: {
|
|
115
|
+
// `<templateVersions>` items carry a unique `<versionIdentifier>` per
|
|
116
|
+
// version. The trailing `_<n>` makes it filesystem-safe.
|
|
117
|
+
uniqueIdElements: ['versionIdentifier'],
|
|
118
|
+
},
|
|
119
|
+
mlDomain: {
|
|
120
|
+
// `<mlIntents>` items use `<developerName>` as their canonical key.
|
|
121
|
+
uniqueIdElements: ['developerName'],
|
|
122
|
+
},
|
|
123
|
+
liveChatAgentConfig: {
|
|
124
|
+
// `<transferableButtons>` items carry `<button>`, `<supervisorSkills>`
|
|
125
|
+
// items carry `<skill>`. `<assignments>` items wrap heterogeneous
|
|
126
|
+
// user/group payloads with no single keyable field, so they continue
|
|
127
|
+
// to hash (stable per content).
|
|
128
|
+
uniqueIdElements: ['button', 'skill'],
|
|
129
|
+
},
|
|
130
|
+
liveChatButton: {
|
|
131
|
+
// `<skills>` items use `<skill>`; `<deployments>` items use
|
|
132
|
+
// `<deployment>`.
|
|
133
|
+
uniqueIdElements: ['skill', 'deployment'],
|
|
134
|
+
},
|
|
135
|
+
duplicateRule: {
|
|
136
|
+
// `<duplicateRuleMatchRules>` items carry `<matchingRule>`. Each
|
|
137
|
+
// match rule appears once per duplicate rule, so the field is unique
|
|
138
|
+
// within the parent.
|
|
139
|
+
uniqueIdElements: ['matchingRule'],
|
|
140
|
+
},
|
|
141
|
+
queue: {
|
|
142
|
+
// `<queueSobject>` items are keyed by `<sobjectType>` (e.g. `Case`,
|
|
143
|
+
// `Lead`). Each sobject appears at most once per queue.
|
|
144
|
+
uniqueIdElements: ['sobjectType'],
|
|
145
|
+
},
|
|
146
|
+
reportType: {
|
|
147
|
+
// `<sections>` items use `<masterLabel>` as their natural key. Same
|
|
148
|
+
// pattern as `globalValueSetTranslation`/`standardValueSetTranslation`.
|
|
149
|
+
uniqueIdElements: ['masterLabel'],
|
|
150
|
+
},
|
|
74
151
|
mutingpermissionset: {
|
|
75
152
|
uniqueIdElements: [
|
|
76
153
|
'application',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniqueIdElements.js","sourceRoot":"","sources":["../../src/metadata/uniqueIdElements.ts"],"names":[],"mappings":"AAAA,eAAe;IACb;QACE,OAAO,EAAE;YACP,gBAAgB,EAAE;gBAChB,aAAa;gBACb,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,YAAY;gBACZ,KAAK;gBACL,OAAO;gBACP,cAAc;gBACd,mBAAmB;gBACnB,QAAQ;gBACR,cAAc;gBACd,cAAc;gBACd,WAAW;aACZ;SACF;QACD,aAAa,EAAE;YACb,gBAAgB,EAAE;gBAChB,aAAa;gBACb,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,YAAY;gBACZ,KAAK;gBACL,OAAO;gBACP,WAAW;gBACX,6BAA6B;gBAC7B,uBAAuB;aACxB;SACF;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE;gBAChB,WAAW;gBACX,QAAQ;gBACR,OAAO;gBACP,QAAQ;gBACR,YAAY;gBACZ,iBAAiB;gBACjB,mBAAmB;gBACnB,YAAY;gBACZ,YAAY;aACb;SACF;QACD,yBAAyB,EAAE;YACzB,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,2BAA2B,EAAE;YAC3B,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,GAAG,EAAE;YACH,gBAAgB,EAAE;gBAChB,eAAe;gBACf,gBAAgB;gBAChB,sBAAsB;gBACtB,eAAe;gBACf,iBAAiB;gBACjB,QAAQ;gBACR,gBAAgB;aACjB;SACF;QACD,qBAAqB,EAAE;YACrB,gBAAgB,EAAE,CAAC,SAAS,CAAC;SAC9B;QACD,mBAAmB,EAAE;YACnB,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,mBAAmB,EAAE;YACnB,gBAAgB,EAAE;gBAChB,aAAa;gBACb,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,YAAY;gBACZ,KAAK;gBACL,OAAO;gBACP,WAAW;gBACX,6BAA6B;gBAC7B,uBAAuB;aACxB;SACF;KACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"uniqueIdElements.js","sourceRoot":"","sources":["../../src/metadata/uniqueIdElements.ts"],"names":[],"mappings":"AAAA,eAAe;IACb;QACE,OAAO,EAAE;YACP,gBAAgB,EAAE;gBAChB,aAAa;gBACb,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,YAAY;gBACZ,KAAK;gBACL,OAAO;gBACP,cAAc;gBACd,mBAAmB;gBACnB,QAAQ;gBACR,cAAc;gBACd,cAAc;gBACd,WAAW;aACZ;SACF;QACD,aAAa,EAAE;YACb,gBAAgB,EAAE;gBAChB,aAAa;gBACb,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,YAAY;gBACZ,KAAK;gBACL,OAAO;gBACP,WAAW;gBACX,6BAA6B;gBAC7B,uBAAuB;aACxB;SACF;QACD,IAAI,EAAE;YACJ,gBAAgB,EAAE;gBAChB,WAAW;gBACX,QAAQ;gBACR,OAAO;gBACP,QAAQ;gBACR,YAAY;gBACZ,iBAAiB;gBACjB,mBAAmB;gBACnB,YAAY;gBACZ,YAAY;aACb;SACF;QACD,yBAAyB,EAAE;YACzB,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,2BAA2B,EAAE;YAC3B,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,GAAG,EAAE;YACH,gBAAgB,EAAE;gBAChB,eAAe;gBACf,gBAAgB;gBAChB,sBAAsB;gBACtB,eAAe;gBACf,iBAAiB;gBACjB,QAAQ;gBACR,gBAAgB;aACjB;SACF;QACD,qBAAqB,EAAE;YACrB,gBAAgB,EAAE,CAAC,SAAS,CAAC;SAC9B;QACD,mBAAmB,EAAE;YACnB,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,kBAAkB,EAAE;YAClB,wEAAwE;YACxE,uEAAuE;YACvE,8BAA8B;YAC9B,gBAAgB,EAAE,CAAC,eAAe,CAAC;SACpC;QACD,eAAe,EAAE;YACf,uEAAuE;YACvE,mEAAmE;YACnE,uEAAuE;YACvE,qEAAqE;YACrE,qEAAqE;YACrE,iBAAiB;YACjB,gBAAgB,EAAE,CAAC,MAAM,CAAC;SAC3B;QACD,WAAW,EAAE;YACX,iEAAiE;YACjE,+DAA+D;YAC/D,kEAAkE;YAClE,6CAA6C;YAC7C,gBAAgB,EAAE,CAAC,OAAO,CAAC;SAC5B;QACD,EAAE,EAAE;YACF,mEAAmE;YACnE,qEAAqE;YACrE,4CAA4C;YAC5C,gBAAgB,EAAE,CAAC,OAAO,CAAC;SAC5B;QACD,aAAa,EAAE;YACb,kEAAkE;YAClE,kEAAkE;YAClE,gBAAgB,EAAE,CAAC,mBAAmB,CAAC;SACxC;QACD,oBAAoB,EAAE;YACpB,iEAAiE;YACjE,gEAAgE;YAChE,mEAAmE;YACnE,mEAAmE;YACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;SAC/E;QACD,mBAAmB,EAAE;YACnB,sEAAsE;YACtE,yDAAyD;YACzD,gBAAgB,EAAE,CAAC,mBAAmB,CAAC;SACxC;QACD,QAAQ,EAAE;YACR,oEAAoE;YACpE,gBAAgB,EAAE,CAAC,eAAe,CAAC;SACpC;QACD,mBAAmB,EAAE;YACnB,uEAAuE;YACvE,kEAAkE;YAClE,qEAAqE;YACrE,gCAAgC;YAChC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;SACtC;QACD,cAAc,EAAE;YACd,4DAA4D;YAC5D,kBAAkB;YAClB,gBAAgB,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;SAC1C;QACD,aAAa,EAAE;YACb,iEAAiE;YACjE,qEAAqE;YACrE,qBAAqB;YACrB,gBAAgB,EAAE,CAAC,cAAc,CAAC;SACnC;QACD,KAAK,EAAE;YACL,oEAAoE;YACpE,wDAAwD;YACxD,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,UAAU,EAAE;YACV,oEAAoE;YACpE,wEAAwE;YACxE,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,mBAAmB,EAAE;YACnB,gBAAgB,EAAE;gBAChB,aAAa;gBACb,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,YAAY;gBACZ,KAAK;gBACL,OAAO;gBACP,WAAW;gBACX,6BAA6B;gBAC7B,uBAAuB;aACxB;SACF;KACF;CACF,CAAC"}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-decomposer",
|
|
3
3
|
"description": "Split large Salesforce metadata files into version-control-friendly pieces and rebuild deployment-ready files.",
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.17.0",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@oclif/core": "^4",
|
|
7
7
|
"@salesforce/core": "^8.26.3",
|
|
8
8
|
"@salesforce/sf-plugins-core": "^12.2.6",
|
|
9
9
|
"@salesforce/source-deploy-retrieve": "^12.35.0",
|
|
10
|
-
"config-disassembler": "^1.1.
|
|
10
|
+
"config-disassembler": "^1.1.3",
|
|
11
11
|
"fast-xml-parser": "^5.7.2",
|
|
12
12
|
"p-limit": "^7.3.0"
|
|
13
13
|
},
|