sf-decomposer 5.3.6 → 5.3.8
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 +14 -0
- package/README.md +4 -7
- package/lib/metadata/getPackageDirectories.js +16 -20
- package/lib/metadata/getPackageDirectories.js.map +1 -1
- package/lib/service/getRepoRoot.js +19 -25
- package/lib/service/getRepoRoot.js.map +1 -1
- package/oclif.lock +18 -18
- package/oclif.manifest.json +1 -1
- package/package.json +5 -5
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
|
+
## [5.3.8](https://github.com/mcarvin8/sf-decomposer/compare/v5.3.7...v5.3.8) (2025-02-03)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **deps:** bump @salesforce/source-deploy-retrieve ([3d3b160](https://github.com/mcarvin8/sf-decomposer/commit/3d3b16029fa3b56f48d17694e5a0fb25d173ac2e))
|
|
14
|
+
|
|
15
|
+
## [5.3.7](https://github.com/mcarvin8/sf-decomposer/compare/v5.3.6...v5.3.7) (2025-02-03)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* upgrade disassemblers ([f36035b](https://github.com/mcarvin8/sf-decomposer/commit/f36035b309604dff445438823bf3cf16e529f65b))
|
|
21
|
+
|
|
8
22
|
## [5.3.6](https://github.com/mcarvin8/sf-decomposer/compare/v5.3.5...v5.3.6) (2025-02-01)
|
|
9
23
|
|
|
10
24
|
|
package/README.md
CHANGED
|
@@ -27,8 +27,7 @@ A Salesforce CLI plugin to break down large metadata files into smaller, more ma
|
|
|
27
27
|
|
|
28
28
|
**DISCLAIMERS:**
|
|
29
29
|
|
|
30
|
-
- You must update the `.forceignore` to have the Salesforce CLI ignore the decomposed files created by this plugin. See
|
|
31
|
-
- Updates to the `.gitignore` are optional if you are using this in a git-based repo and can be updated based on what you want to be staged in your repo.
|
|
30
|
+
- You must update the `.forceignore` to have the Salesforce CLI ignore the decomposed files created by this plugin. See [Ignore Files](#ignore-files).
|
|
32
31
|
- It is recommended that you extensively test this plugin in a sandbox environment on the metadata types for which you wish to use this tool.
|
|
33
32
|
- Do not change your production/QA pipelines until you have tested this and are happy with the results.
|
|
34
33
|
- Ensure your deployment pipelines are stable before implementing this plugin.
|
|
@@ -222,7 +221,7 @@ The ignore file is not read by the recompose command.
|
|
|
222
221
|
|
|
223
222
|
## Hooks
|
|
224
223
|
|
|
225
|
-
**NOTE:** In order to avoid errors during the retrieval, you must configure your `.forceignore` file to have the Salesforce CLI ignore the decomposed files. See
|
|
224
|
+
**NOTE:** In order to avoid errors during the retrieval, you must configure your `.forceignore` file to have the Salesforce CLI ignore the decomposed files. See [Ignore Files](#ignore-files) section.
|
|
226
225
|
|
|
227
226
|
A post-retrieve hook (for the decompose command) and a pre-run hook (for the recompose command) have been configured if you elect to use them. The post-retrieve hook will automatically decompose the desired metadata types after every Salesforce CLI retrieval (`sf project retrieve start` command). The pre-run hook will automatically recompose the desired metadata types before every Salesforce CLI deployment/validation (`sf project deploy start` and `sf project deploy validate` commands).
|
|
228
227
|
|
|
@@ -238,17 +237,15 @@ If the `.sfdecomposer.config.json` file isn't found, the hooks will be skipped.
|
|
|
238
237
|
|
|
239
238
|
## Ignore Files
|
|
240
239
|
|
|
241
|
-
You **must** update the `.forceignore` to have the Salesforce CLI ignore the decomposed files created by this plugin. Optionally, you can add the recomposed files to your `.gitignore` to avoid staging those in your git-based repository.
|
|
242
|
-
|
|
243
240
|
### `.forceignore` updates
|
|
244
241
|
|
|
245
|
-
The Salesforce CLI
|
|
242
|
+
The Salesforce CLI **must** ignore the decomposed files and allow the recomposed files.
|
|
246
243
|
|
|
247
244
|
You can use the sample [.forceignore](https://raw.githubusercontent.com/mcarvin8/sf-decomposer/main/samples/.forceignore) provided. Update the decomposed file extensions based on what format you're using (`.xml`, `.json`, or `.yaml`).
|
|
248
245
|
|
|
249
246
|
### `.gitignore` updates
|
|
250
247
|
|
|
251
|
-
|
|
248
|
+
Optionally, Git (or whatever version control system you are using) can ignore the recomposed files so you don't stage those in your repositories. You can also ignore the log created by the disassembler package.
|
|
252
249
|
|
|
253
250
|
You can use the sample [.gitignore](https://raw.githubusercontent.com/mcarvin8/sf-decomposer/main/samples/.gitignore) provided.
|
|
254
251
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
/* eslint-disable no-await-in-loop */
|
|
3
2
|
import { resolve, join, basename } from 'node:path';
|
|
4
3
|
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
5
4
|
import { getRepoRoot } from '../service/getRepoRoot.js';
|
|
@@ -15,33 +14,30 @@ export async function getPackageDirectories(metaDirectory, ignoreDirs) {
|
|
|
15
14
|
const sfdxProject = JSON.parse(sfdxProjectRaw);
|
|
16
15
|
const normalizedIgnoreDirs = (ignoreDirs ?? []).map((dir) => basename(dir));
|
|
17
16
|
const packageDirectories = sfdxProject.packageDirectories.map((directory) => resolve(repoRoot, directory.path));
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
continue;
|
|
17
|
+
const searchPromises = packageDirectories.map(async (directory) => {
|
|
18
|
+
if (!normalizedIgnoreDirs.includes(basename(directory))) {
|
|
19
|
+
return searchRecursively(directory, metaDirectory);
|
|
22
20
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
}
|
|
21
|
+
});
|
|
22
|
+
const results = await Promise.all(searchPromises);
|
|
23
|
+
const metadataPaths = results.filter((filePath) => filePath !== undefined).map((filePath) => resolve(filePath));
|
|
28
24
|
return { metadataPaths, ignorePath };
|
|
29
25
|
}
|
|
30
26
|
async function searchRecursively(dxDirectory, subDirectoryName) {
|
|
31
27
|
const files = await readdir(dxDirectory);
|
|
32
|
-
|
|
28
|
+
const searchPromises = files.map(async (file) => {
|
|
33
29
|
const filePath = join(dxDirectory, file);
|
|
34
30
|
const stats = await stat(filePath);
|
|
35
|
-
if (stats.isDirectory()
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
if (stats.isDirectory()) {
|
|
32
|
+
if (file === subDirectoryName) {
|
|
33
|
+
return filePath;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return searchRecursively(filePath, subDirectoryName);
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
return undefined;
|
|
39
|
+
});
|
|
40
|
+
const results = await Promise.all(searchPromises);
|
|
41
|
+
return results.find((result) => result !== undefined);
|
|
46
42
|
}
|
|
47
43
|
//# sourceMappingURL=getPackageDirectories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/metadata/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/metadata/getPackageDirectories.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
/* eslint-disable no-await-in-loop */
|
|
3
2
|
import { access } from 'node:fs/promises';
|
|
4
3
|
import { join, dirname } from 'node:path';
|
|
5
4
|
import { SFDX_PROJECT_FILE_NAME } from '../helpers/constants.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
found = true;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// If file not found, move up one directory level
|
|
22
|
-
const parentDir = dirname(currentDir);
|
|
23
|
-
if (currentDir === parentDir) {
|
|
24
|
-
// Reached the root without finding the file, throw an error
|
|
25
|
-
throw new Error('sfdx-project.json not found in any parent directory.');
|
|
26
|
-
}
|
|
27
|
-
currentDir = parentDir;
|
|
5
|
+
async function findRepoRoot(dir) {
|
|
6
|
+
const filePath = join(dir, SFDX_PROJECT_FILE_NAME);
|
|
7
|
+
try {
|
|
8
|
+
// Check if sfdx-project.json exists in the current directory
|
|
9
|
+
await access(filePath);
|
|
10
|
+
return { repoRoot: dir, dxConfigFilePath: filePath };
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
const parentDir = dirname(dir);
|
|
14
|
+
if (dir === parentDir) {
|
|
15
|
+
// Reached the root without finding the file, throw an error
|
|
16
|
+
throw new Error(`${SFDX_PROJECT_FILE_NAME} not found in any parent directory.`);
|
|
28
17
|
}
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
// Recursively search in the parent directory
|
|
19
|
+
return findRepoRoot(parentDir);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function getRepoRoot() {
|
|
23
|
+
const currentDir = process.cwd();
|
|
24
|
+
return findRepoRoot(currentDir);
|
|
31
25
|
}
|
|
32
26
|
//# sourceMappingURL=getRepoRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRepoRoot.js","sourceRoot":"","sources":["../../src/service/getRepoRoot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,
|
|
1
|
+
{"version":3,"file":"getRepoRoot.js","sourceRoot":"","sources":["../../src/service/getRepoRoot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,KAAK,UAAU,YAAY,CACzB,GAAW;IAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CAAC,GAAG,sBAAsB,qCAAqC,CAAC,CAAC;QAClF,CAAC;QACD,6CAA6C;QAC7C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC"}
|
package/oclif.lock
CHANGED
|
@@ -1596,10 +1596,10 @@
|
|
|
1596
1596
|
string-width "^7.2.0"
|
|
1597
1597
|
terminal-link "^3.0.0"
|
|
1598
1598
|
|
|
1599
|
-
"@salesforce/source-deploy-retrieve@^12.14.
|
|
1600
|
-
version "12.14.
|
|
1601
|
-
resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-12.14.
|
|
1602
|
-
integrity sha512-
|
|
1599
|
+
"@salesforce/source-deploy-retrieve@^12.14.2":
|
|
1600
|
+
version "12.14.2"
|
|
1601
|
+
resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-12.14.2.tgz#c14c62f2d72d5415265401068bb0e046a2b0f973"
|
|
1602
|
+
integrity sha512-ZLV5YYNZV7d+ONzrgA+VeMsdWr+sqx2WQaswFK6RzrHPqItsczp6RM298oOZm8ZvKJCdQpjiRi0/cDqKGX/nkw==
|
|
1603
1603
|
dependencies:
|
|
1604
1604
|
"@salesforce/core" "^8.8.2"
|
|
1605
1605
|
"@salesforce/kit" "^3.2.3"
|
|
@@ -7791,10 +7791,10 @@ write-file-atomic@^3.0.0:
|
|
|
7791
7791
|
signal-exit "^3.0.2"
|
|
7792
7792
|
typedarray-to-buffer "^3.1.5"
|
|
7793
7793
|
|
|
7794
|
-
xml-disassembler@^1.3.
|
|
7795
|
-
version "1.3.
|
|
7796
|
-
resolved "https://registry.yarnpkg.com/xml-disassembler/-/xml-disassembler-1.3.
|
|
7797
|
-
integrity sha512-
|
|
7794
|
+
xml-disassembler@^1.3.11:
|
|
7795
|
+
version "1.3.11"
|
|
7796
|
+
resolved "https://registry.yarnpkg.com/xml-disassembler/-/xml-disassembler-1.3.11.tgz#427ea0ef5ab679dce3ff931136834c821dd1e374"
|
|
7797
|
+
integrity sha512-SK20Co9nxwnQIDh7qlSX9lPsp4Zho+ysMXulsUmDhEAYLe57WHaBfi0DcdgTrB9cWBgjrM8TtipK7FZ81rzCag==
|
|
7798
7798
|
dependencies:
|
|
7799
7799
|
fast-xml-parser "^4.5.1"
|
|
7800
7800
|
ignore "^5.3.1"
|
|
@@ -7809,21 +7809,21 @@ xml2js@^0.6.2:
|
|
|
7809
7809
|
sax ">=0.6.0"
|
|
7810
7810
|
xmlbuilder "~11.0.0"
|
|
7811
7811
|
|
|
7812
|
-
xml2json-disassembler@^1.1.
|
|
7813
|
-
version "1.1.
|
|
7814
|
-
resolved "https://registry.yarnpkg.com/xml2json-disassembler/-/xml2json-disassembler-1.1.
|
|
7815
|
-
integrity sha512-
|
|
7812
|
+
xml2json-disassembler@^1.1.11:
|
|
7813
|
+
version "1.1.11"
|
|
7814
|
+
resolved "https://registry.yarnpkg.com/xml2json-disassembler/-/xml2json-disassembler-1.1.11.tgz#3500612985d0139021bf960031b4cfbde719dc2a"
|
|
7815
|
+
integrity sha512-SeiOFYNo5+T0wLNBWuQaePYo7P+LDIBGK8ZfbWolkWtK5o3isoR+955oDdnc/M3edpVElUi2hHq338PgG56ing==
|
|
7816
7816
|
dependencies:
|
|
7817
7817
|
tslib "^2.6.2"
|
|
7818
|
-
xml-disassembler "^1.3.
|
|
7818
|
+
xml-disassembler "^1.3.11"
|
|
7819
7819
|
|
|
7820
|
-
xml2yaml-disassembler@^1.1.
|
|
7821
|
-
version "1.1.
|
|
7822
|
-
resolved "https://registry.yarnpkg.com/xml2yaml-disassembler/-/xml2yaml-disassembler-1.1.
|
|
7823
|
-
integrity sha512-
|
|
7820
|
+
xml2yaml-disassembler@^1.1.11:
|
|
7821
|
+
version "1.1.11"
|
|
7822
|
+
resolved "https://registry.yarnpkg.com/xml2yaml-disassembler/-/xml2yaml-disassembler-1.1.11.tgz#cd3f2a1394fed8df41d62184eecefb112d129f62"
|
|
7823
|
+
integrity sha512-gvEYlHVn0nqiP0P0iGZrtL4RlTg1jFCvP+QHSWSTDhsdCQP66B5qgaiKgjkPLrwq1aMsEQf0C4Wxxc1ogNwlnw==
|
|
7824
7824
|
dependencies:
|
|
7825
7825
|
tslib "^2.6.2"
|
|
7826
|
-
xml-disassembler "^1.3.
|
|
7826
|
+
xml-disassembler "^1.3.11"
|
|
7827
7827
|
yaml "^2.7.0"
|
|
7828
7828
|
|
|
7829
7829
|
xmlbuilder@~11.0.0:
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-decomposer",
|
|
3
3
|
"description": "Decomposes Salesforce metadata into more manageable files.",
|
|
4
|
-
"version": "5.3.
|
|
4
|
+
"version": "5.3.8",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@oclif/core": "^4",
|
|
7
7
|
"@salesforce/core": "^8.2.1",
|
|
8
8
|
"@salesforce/sf-plugins-core": "^11.2.1",
|
|
9
|
-
"@salesforce/source-deploy-retrieve": "^12.14.
|
|
9
|
+
"@salesforce/source-deploy-retrieve": "^12.14.2",
|
|
10
10
|
"fs-extra": "^11.2.0",
|
|
11
|
-
"xml-disassembler": "^1.3.
|
|
12
|
-
"xml2json-disassembler": "^1.1.
|
|
13
|
-
"xml2yaml-disassembler": "^1.1.
|
|
11
|
+
"xml-disassembler": "^1.3.11",
|
|
12
|
+
"xml2json-disassembler": "^1.1.11",
|
|
13
|
+
"xml2yaml-disassembler": "^1.1.11"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@commitlint/cli": "^18.6.1",
|