@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
JavaScript
;
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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