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