sf-decomposer 7.2.0 → 7.3.1
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 +15 -0
- package/README.md +57 -4
- package/oclif.manifest.json +1 -1
- package/package.json +9 -7
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,21 @@
|
|
|
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
|
+
## [7.3.1](https://github.com/mcarvin8/sf-decomposer/compare/v7.3.0...v7.3.1) (2026-08-25)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **deps:** bump the dependencies group across 1 directory with 3 updates ([#570](https://github.com/mcarvin8/sf-decomposer/issues/570)) ([eb03301](https://github.com/mcarvin8/sf-decomposer/commit/eb033016f168605668f33fe14ce9904e8b2f11fb))
|
|
14
|
+
* **package:** exclude lib/action from npm package ([af56788](https://github.com/mcarvin8/sf-decomposer/commit/af567883d2763e7224b1f7b13ef35add1658fecf))
|
|
15
|
+
|
|
16
|
+
## [7.3.0](https://github.com/mcarvin8/sf-decomposer/compare/v7.2.0...v7.3.0) (2026-08-24)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* **action:** add a GitHub Action wrapping decompose/recompose/verify ([#572](https://github.com/mcarvin8/sf-decomposer/issues/572)) ([b32391d](https://github.com/mcarvin8/sf-decomposer/commit/b32391dff7dd2d77868b4a67cc70f7563dd1e55b))
|
|
22
|
+
|
|
8
23
|
## [7.2.0](https://github.com/mcarvin8/sf-decomposer/compare/v7.1.1...v7.2.0) (2026-08-24)
|
|
9
24
|
|
|
10
25
|
|
package/README.md
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/sf-decomposer)
|
|
4
4
|
[](https://npmjs.com/package/sf-decomposer)
|
|
5
|
+
[](https://github.com/marketplace/actions/sf-decomposer)
|
|
5
6
|
[](https://raw.githubusercontent.com/mcarvin8/sf-decomposer/main/LICENSE.md)
|
|
6
7
|
[](https://qlty.sh/gh/mcarvin8/projects/sf-decomposer)
|
|
7
8
|
[](https://codecov.io/gh/mcarvin8/sf-decomposer)
|
|
8
9
|
[](https://dashboard.stryker-mutator.io/reports/github.com/mcarvin8/sf-decomposer/main)
|
|
9
10
|
[](https://mcarvin8.github.io/sf-decomposer/dev/bench/runtime/)
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
**Decomposes** large Salesforce metadata XML files into smaller, version-control–friendly files (XML, JSON, YAML, JSON5), and **recomposes** them back into deployment-ready metadata — as a Salesforce CLI plugin, or as a GitHub Action that needs neither the CLI nor a plugin install.
|
|
13
|
+
|
|
14
|
+
- Using the Salesforce CLI? Start at [Setup](#setup).
|
|
15
|
+
- Running this in CI without the CLI? Skip straight to [GitHub Action](#github-action).
|
|
12
16
|
|
|
13
17
|
<!-- TABLE OF CONTENTS -->
|
|
14
18
|
<details>
|
|
@@ -21,6 +25,7 @@ A Salesforce CLI plugin that **decomposes** large metadata XML files into smalle
|
|
|
21
25
|
- [4. Configure Hooks](#4-configure-hooks-recommended)
|
|
22
26
|
- [Daily Workflow](#daily-workflow)
|
|
23
27
|
- [Commands](#commands)
|
|
28
|
+
- [GitHub Action](#github-action)
|
|
24
29
|
- [Reference](#reference)
|
|
25
30
|
- [Decompose Strategies](#decompose-strategies)
|
|
26
31
|
- [Supported Metadata](#supported-metadata)
|
|
@@ -215,7 +220,7 @@ EXAMPLES
|
|
|
215
220
|
`sf decomposer decompose -x "manifest/package.xml" -m "flow"`
|
|
216
221
|
```
|
|
217
222
|
|
|
218
|
-
_See code: [src/commands/decomposer/decompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.
|
|
223
|
+
_See code: [src/commands/decomposer/decompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.1/src/commands/decomposer/decompose.ts)_
|
|
219
224
|
|
|
220
225
|
## `sf decomposer recompose`
|
|
221
226
|
|
|
@@ -261,7 +266,7 @@ EXAMPLES
|
|
|
261
266
|
`sf decomposer recompose -x "manifest/package.xml" -m "flow"`
|
|
262
267
|
```
|
|
263
268
|
|
|
264
|
-
_See code: [src/commands/decomposer/recompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.
|
|
269
|
+
_See code: [src/commands/decomposer/recompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.1/src/commands/decomposer/recompose.ts)_
|
|
265
270
|
|
|
266
271
|
## `sf decomposer verify`
|
|
267
272
|
|
|
@@ -325,11 +330,59 @@ EXAMPLES
|
|
|
325
330
|
`sf decomposer verify -x "manifest/package.xml" --config`
|
|
326
331
|
```
|
|
327
332
|
|
|
328
|
-
_See code: [src/commands/decomposer/verify.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.
|
|
333
|
+
_See code: [src/commands/decomposer/verify.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.1/src/commands/decomposer/verify.ts)_
|
|
329
334
|
<!-- commandsstop -->
|
|
330
335
|
|
|
331
336
|
---
|
|
332
337
|
|
|
338
|
+
## GitHub Action
|
|
339
|
+
|
|
340
|
+
`decompose`, `recompose`, and `verify` are also available as a GitHub Action — a container action, so it needs **no Salesforce CLI and no `sf-decomposer` plugin install**. One action, dispatched by a `mode` input, mirrors the three CLI commands one-for-one: same flags (as inputs), same `.sfdecomposer.config.json` support via `config: true`.
|
|
341
|
+
|
|
342
|
+
```yaml
|
|
343
|
+
- uses: actions/checkout@v7
|
|
344
|
+
|
|
345
|
+
- name: Decompose retrieved metadata
|
|
346
|
+
uses: mcarvin8/sf-decomposer@v7
|
|
347
|
+
with:
|
|
348
|
+
mode: decompose
|
|
349
|
+
metadata-type: |
|
|
350
|
+
permissionset
|
|
351
|
+
flow
|
|
352
|
+
postpurge: 'true'
|
|
353
|
+
|
|
354
|
+
- name: Verify the round trip before merging
|
|
355
|
+
uses: mcarvin8/sf-decomposer@v7
|
|
356
|
+
with:
|
|
357
|
+
mode: verify
|
|
358
|
+
config: 'true'
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Or point it at an existing `.sfdecomposer.config.json` for either step instead of listing flags: `with: { mode: decompose, config: 'true' }`.
|
|
362
|
+
|
|
363
|
+
**Inputs** (all optional except `mode`; multi-value inputs are newline-separated, matching `actions/checkout`'s own multiline convention):
|
|
364
|
+
|
|
365
|
+
| Input | Used by | Description |
|
|
366
|
+
|--------------------------------|----------------------|-----------------------------------------------------------------------------------|
|
|
367
|
+
| `mode` | all | `decompose`, `recompose`, or `verify`. |
|
|
368
|
+
| `metadata-type` | all | Metadata suffix(es) to process, one per line. |
|
|
369
|
+
| `manifest` | all | Path to a package.xml manifest to scope the run to. |
|
|
370
|
+
| `ignore-package-directory` | all | Package director(y/ies) to skip, one per line. |
|
|
371
|
+
| `config` | all | Read settings from `.sfdecomposer.config.json`, same as the CLI's `--config`. |
|
|
372
|
+
| `format` | decompose, verify | `xml`, `json`, `json5`, or `yaml`. Default `xml`. |
|
|
373
|
+
| `strategy` | decompose, verify | `unique-id` or `grouped-by-tag`. Default `unique-id`. |
|
|
374
|
+
| `decompose-nested-permissions` | decompose, verify | With `grouped-by-tag`, further decompose permission set object/field permissions. |
|
|
375
|
+
| `prepurge` | decompose | Remove existing decomposed files before decomposing. |
|
|
376
|
+
| `postpurge` | decompose, recompose | After decompose, remove originals; after recompose, remove decomposed files. |
|
|
377
|
+
| `update-forceignore` | decompose | Append decomposed file patterns to `.forceignore`. |
|
|
378
|
+
| `update-gitattributes` | decompose | Mark decomposed files as generated in `.gitattributes`. |
|
|
379
|
+
|
|
380
|
+
**Outputs:** `metadata` (newline-separated list of processed suffixes), `types-count`; `verify` additionally sets `drift-count` and `reordered-count`, and fails the step when `drift-count` is greater than 0.
|
|
381
|
+
|
|
382
|
+
See [`action.yml`](action.yml) for the full input/output reference.
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
333
386
|
## Reference
|
|
334
387
|
|
|
335
388
|
### Decompose Strategies
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-decomposer",
|
|
3
3
|
"description": "Decompose Salesforce metadata into granular, VCS-friendly files; recompose for deployment.",
|
|
4
|
-
"version": "7.
|
|
4
|
+
"version": "7.3.1",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@oclif/core": "4.
|
|
7
|
-
"@salesforce/core": "9.1.
|
|
8
|
-
"@salesforce/sf-plugins-core": "13.0.
|
|
6
|
+
"@oclif/core": "4.14.0",
|
|
7
|
+
"@salesforce/core": "9.1.5",
|
|
8
|
+
"@salesforce/sf-plugins-core": "13.0.3",
|
|
9
9
|
"config-disassembler": "3.3.0"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@
|
|
12
|
+
"@actions/core": "3.0.1",
|
|
13
|
+
"@biomejs/biome": "2.5.10",
|
|
13
14
|
"@commitlint/cli": "21.2.2",
|
|
14
15
|
"@commitlint/config-conventional": "21.2.2",
|
|
15
16
|
"@salesforce/cli-plugins-testkit": "5.3.66",
|
|
@@ -17,7 +18,7 @@
|
|
|
17
18
|
"@stryker-mutator/core": "10.0.0",
|
|
18
19
|
"@stryker-mutator/vitest-runner": "10.0.0",
|
|
19
20
|
"@types/node": "26.2.0",
|
|
20
|
-
"@vitest/coverage-v8": "4.1.
|
|
21
|
+
"@vitest/coverage-v8": "4.1.11",
|
|
21
22
|
"husky": "9.1.7",
|
|
22
23
|
"knip": "6.32.2",
|
|
23
24
|
"lint-staged": "17.3.0",
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
"shx": "0.4.0",
|
|
27
28
|
"tsx": "4.23.12",
|
|
28
29
|
"typescript": "7.0.2",
|
|
29
|
-
"vitest": "4.1.
|
|
30
|
+
"vitest": "4.1.11",
|
|
30
31
|
"wireit": "0.14.13"
|
|
31
32
|
},
|
|
32
33
|
"engines": {
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
},
|
|
35
36
|
"files": [
|
|
36
37
|
"/lib",
|
|
38
|
+
"!/lib/action/**",
|
|
37
39
|
"/messages",
|
|
38
40
|
"/oclif.manifest.json",
|
|
39
41
|
"/oclif.lock",
|