UNPKG

@flxbl-io/sfp

Version:

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

119 lines 11.2 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 sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger")); const os_1 = require("os"); const SFPStatsSender_1 = __importDefault(require("../../stats/SFPStatsSender")); const PackageEmptyChecker_1 = __importDefault(require("../validators/PackageEmptyChecker")); const SfpPackage_1 = require("../SfpPackage"); const CreatePackage_1 = require("./CreatePackage"); const TableConstants_1 = require("../../display/TableConstants"); const sfp_logger_2 = require("@flxbl-io/sfp-logger"); const sfp_logger_3 = require("@flxbl-io/sfp-logger"); const Table = require('cli-table'); class CreateSourcePackageImpl extends CreatePackage_1.CreatePackage { constructor(projectDirectory, sfpPackage, packageCreationParams, logger, params) { super(projectDirectory, sfpPackage, packageCreationParams, logger, params); this.projectDirectory = projectDirectory; this.sfpPackage = sfpPackage; this.packageCreationParams = packageCreationParams; this.logger = logger; this.params = params; } getTypeOfPackage() { return SfpPackage_1.PackageType.Source; } printAdditionalPackageSpecificHeaders() { } isEmptyPackage(projectDirectory, packageDirectory) { return PackageEmptyChecker_1.default.isEmptyFolder(projectDirectory, packageDirectory); } preCreatePackage(sfpPackage) { } async createPackage(sfpPackage) { this.handleApexTestClasses(sfpPackage); SFPStatsSender_1.default.logGauge('package.metadatacount', sfpPackage.metadataCount, { package: sfpPackage.packageName, type: sfpPackage.packageType, }); } postCreatePackage(sfpPackage) { } handleApexTestClasses(sfpPackage) { let classTypes = sfpPackage.apexClassesSortedByTypes; if (sfpPackage.isApexFound && classTypes?.testClass?.length == 0) { this.printSlowDeploymentWarning(); sfpPackage.isTriggerAllTests = true; } else if (sfpPackage.isApexFound && classTypes?.testClass?.length > 0) { if (classTypes?.parseError?.length > 0) { sfp_logger_1.default.printHeaderLine('', sfp_logger_2.COLOR_HEADER, sfp_logger_1.LoggerLevel.INFO, this.logger); sfp_logger_1.default.log('Unable to parse these classes to correctly identify test classes, Its not your issue, its ours!' + 'Please raise a issue in our repo!', sfp_logger_1.LoggerLevel.INFO, this.logger); this.printClassesIdentified(classTypes?.parseError); sfpPackage.isTriggerAllTests = true; } else { this.printHintForOptimizedDeployment(); sfpPackage.isTriggerAllTests = false; this.printClassesIdentified(classTypes?.testClass); sfpPackage.apexTestClassses = []; classTypes?.testClass.forEach((element) => { sfpPackage.apexTestClassses.push(element.name); }); } } } printHintForOptimizedDeployment() { sfp_logger_1.default.printHeaderLine('OPTION FOR DEPLOYMENT OPTIMIZATION AVAILABLE', sfp_logger_2.COLOR_HEADER, sfp_logger_1.LoggerLevel.INFO, this.logger); sfp_logger_1.default.log(`Following apex test classes were identified and can be used for deploying this package,${os_1.EOL}` + `in an optimal manner, provided each individual class meets the test coverage requirement of 75% and above${os_1.EOL}` + `Ensure each apex class/trigger is validated for coverage in the validation stage`, null, this.logger); sfp_logger_1.default.printHeaderLine('', sfp_logger_2.COLOR_HEADER, sfp_logger_1.LoggerLevel.INFO, this.logger); } printSlowDeploymentWarning() { sfp_logger_1.default.printHeaderLine('WARNING! YOU MIGHT NOT BE ABLE TO DEPLOY OR WILL HAVE A SLOW DEPLOYMENT', sfp_logger_3.COLOR_WARNING, sfp_logger_1.LoggerLevel.INFO, this.logger); sfp_logger_1.default.log(`This package has apex classes/triggers, however apex test classes were not found, You would not be able to deploy` + `to production org optimally if each class do not have coverage of 75% and above,We will attempt deploying` + `this package by triggering all local tests in the org which could be realy costly in terms of deployment time!`, null, this.logger); sfp_logger_1.default.printHeaderLine('', sfp_logger_2.COLOR_HEADER, sfp_logger_1.LoggerLevel.INFO, this.logger); } printClassesIdentified(fetchedClasses) { if (fetchedClasses === null || fetchedClasses === undefined) return; let table = new Table({ head: ['Class', 'Error'], chars: TableConstants_1.ZERO_BORDER_TABLE }); for (let fetchedClass of fetchedClasses) { let item = [fetchedClass.name, fetchedClass.error ? JSON.stringify(fetchedClass.error) : 'N/A']; table.push(item); } sfp_logger_1.default.log('Following apex test classes were identified', sfp_logger_1.LoggerLevel.INFO, this.logger); sfp_logger_1.default.log(table.toString(), sfp_logger_1.LoggerLevel.INFO, this.logger); } } exports.default = CreateSourcePackageImpl; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlYXRlU291cmNlUGFja2FnZUltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9wYWNrYWdlL3BhY2thZ2VDcmVhdG9ycy9DcmVhdGVTb3VyY2VQYWNrYWdlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUVBQXNFO0FBQ3RFLDJCQUF5QjtBQUV6QixnRkFBd0Q7QUFDeEQsNEZBQW9FO0FBQ3BFLDhDQUEwRTtBQUMxRSxtREFBZ0Q7QUFFaEQsaUVBQWlFO0FBRWpFLHFEQUFvRDtBQUNwRCxxREFBcUQ7QUFDckQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5DLE1BQXFCLHVCQUF3QixTQUFRLDZCQUFhO0lBQzlELFlBQ2MsZ0JBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLHFCQUE0QyxFQUM1QyxNQUFlLEVBQ2YsTUFBeUI7UUFFbkMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFOakUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7SUFHdkMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sd0JBQVcsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELHFDQUFxQyxLQUFJLENBQUM7SUFFMUMsY0FBYyxDQUFDLGdCQUF3QixFQUFFLGdCQUF3QjtRQUM3RCxPQUFPLDZCQUFtQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFzQixJQUFHLENB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