UNPKG

@flxbl-io/sfp

Version:

sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model

102 lines 8.61 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Git_1 = __importDefault(require("../git/Git")); const IgnoreFiles_1 = __importDefault(require("../ignore/IgnoreFiles")); const ProjectConfig_1 = __importDefault(require("../project/ProjectConfig")); const MetadataFiles_1 = __importDefault(require("../metadata/MetadataFiles")); const fs = __importStar(require("fs-extra")); const path = require("path"); const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger")); class ChangedComponentsFetcher { constructor(baseBranch) { this.baseBranch = baseBranch; } async fetch() { const components = []; let git = await Git_1.default.initiateRepo(); let projectConfig = ProjectConfig_1.default.getSFDXProjectConfig(null); if (!this.baseBranch.includes('origin')) { // for user convenience, use full ref name to avoid errors involving missing local refs this.baseBranch = `remotes/origin/${this.baseBranch}`; } let diff = await git.diff([this.baseBranch, `HEAD`, `--no-renames`, `--name-only`]); // Filter diff to package directories diff = diff.filter((filepath) => projectConfig.packageDirectories.find((pkg) => // TODO: make comparison more robust filepath.includes(pkg.path))); // Apply root forceignore to the diff let ignoreFiles = new IgnoreFiles_1.default(fs.readFileSync('.forceignore', 'utf8')); diff = ignoreFiles.filter(diff); let componentSuccesses = this.getComponentSuccessesFromReports(); if (diff.length > 0) { for (const filepath of diff) { const fullApiName = MetadataFiles_1.default.getFullApiName(filepath); // find package that file belongs to const indexOfPackage = projectConfig.packageDirectories.findIndex((pkg) => filepath.includes(pkg.path)); const packageName = projectConfig.packageDirectories[indexOfPackage].package; const componentSuccess = componentSuccesses.find((component) => component.fullName === fullApiName && component.id); if (componentSuccess) { const component = { id: componentSuccess.id, fullName: componentSuccess.fullName, type: componentSuccess.componentType, files: [filepath], package: packageName, packageType: ProjectConfig_1.default.getPackageType(projectConfig, packageName), indexOfPackage: indexOfPackage, }; components.push(component); } else { sfp_logger_1.default.log(`Unable to find ID for ${fullApiName} in deployment reports`, sfp_logger_1.LoggerLevel.DEBUG); // Ignore file if it's not an identifiable component continue; } } } return components; } /** * Aggregates component successes from MDAPI deploy reports */ getComponentSuccessesFromReports() { let componentSuccesses = []; const reportsDir = '.sfpowerscripts/mdapiDeployReports'; if (fs.existsSync(reportsDir)) { let reports = fs.readdirSync(reportsDir); reports.forEach((report) => { let data = JSON.parse(fs.readFileSync(path.join(reportsDir, report), 'utf8')); componentSuccesses = componentSuccesses.concat(data.result.details.componentSuccesses); }); } return componentSuccesses; } } exports.default = ChangedComponentsFetcher; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhbmdlZENvbXBvbmVudHNGZXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvZGVwZW5kZW5jeS9DaGFuZ2VkQ29tcG9uZW50c0ZldGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUE2QjtBQUM3Qix3RUFBZ0Q7QUFDaEQsNkVBQXFEO0FBQ3JELDhFQUFzRDtBQUV0RCw2Q0FBK0I7QUFDL0IsNkJBQThCO0FBQzlCLG1FQUE4RDtBQUU5RCxNQUFxQix3QkFBd0I7SUFDekMsWUFBb0IsVUFBa0I7UUFBbEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtJQUFHLENBQUM7SUFFMUMsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLElBQUksR0FBRyxHQUFRLE1BQU0sYUFBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhDLElBQUksYUFBYSxHQUFHLHVCQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEMsdUZBQXVGO1lBQ3ZGLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBRUQsSUFBSSxJQUFJLEdBQWEsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFOUYscUNBQXFDO1FBQ3JDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDNUIsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FB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