sf-decomposer
Version:
Break down large Salesforce metadata files into smaller, more manageable files for version control and then recreate deployment-compatible files.
43 lines • 2.03 kB
JavaScript
;
import { resolve, join, basename } from 'node:path';
import { readFile, readdir, stat } from 'node:fs/promises';
import { getRepoRoot } from '../service/getRepoRoot.js';
import { IGNORE_FILE } from '../helpers/constants.js';
export async function getPackageDirectories(metaDirectory, ignoreDirs) {
const { repoRoot, dxConfigFilePath } = await getRepoRoot();
if (!repoRoot || !dxConfigFilePath) {
throw new Error('Failed to retrieve repository root or sfdx-project.json path.');
}
process.chdir(repoRoot);
const ignorePath = resolve(repoRoot, IGNORE_FILE);
const sfdxProjectRaw = await readFile(dxConfigFilePath, 'utf-8');
const sfdxProject = JSON.parse(sfdxProjectRaw);
const normalizedIgnoreDirs = (ignoreDirs ?? []).map((dir) => basename(dir));
const packageDirectories = sfdxProject.packageDirectories.map((directory) => resolve(repoRoot, directory.path));
const searchPromises = packageDirectories.map(async (directory) => {
if (!normalizedIgnoreDirs.includes(basename(directory))) {
return searchRecursively(directory, metaDirectory);
}
});
const results = await Promise.all(searchPromises);
const metadataPaths = results.filter((filePath) => filePath !== undefined).map((filePath) => resolve(filePath));
return { metadataPaths, ignorePath };
}
async function searchRecursively(dxDirectory, subDirectoryName) {
const files = await readdir(dxDirectory);
const searchPromises = files.map(async (file) => {
const filePath = join(dxDirectory, file);
const stats = await stat(filePath);
if (stats.isDirectory()) {
if (file === subDirectoryName) {
return filePath;
}
else {
return searchRecursively(filePath, subDirectoryName);
}
}
});
const results = await Promise.all(searchPromises);
return results.find((result) => result !== undefined);
}
//# sourceMappingURL=getPackageDirectories.js.map