UNPKG

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
'use strict'; 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