@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
112 lines • 9.66 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 fs = __importStar(require("fs-extra"));
const ProjectConfig_1 = __importDefault(require("../../core/project/ProjectConfig"));
const ajv_1 = __importDefault(require("ajv"));
const lodash = require("lodash");
const yaml = require('js-yaml');
const path = require('path');
class ReleaseConfigLoader {
get releaseConfig() {
// Return clone of releaseDefinition for immutability
return lodash.cloneDeep(this._releaseConfig);
}
constructor(logger, pathToReleaseDefinition, isExplicitDependencyCheckEnabled = false) {
this.logger = logger;
this.isExplicitDependencyCheckEnabled = isExplicitDependencyCheckEnabled;
this._releaseConfig = yaml.load(fs.readFileSync(pathToReleaseDefinition, 'utf8'));
this.validateReleaseDefinitionGeneratorConfig(this._releaseConfig);
// Easy to handle here than with schema
if (this._releaseConfig.includeOnlyArtifacts &&
this.releaseConfig.excludeArtifacts) {
throw new Error('Error: Invalid schema: either use includeArtifacts or excludeArtifacts');
}
// Easy to handle here than with schema
if (this._releaseConfig.includeOnlyPackageDependencies &&
this.releaseConfig.excludePackageDependencies) {
throw new Error('Error: Invalid schema: either use includePackageDependencies or excludePackageDependencies');
}
// Workaround for jsonschema not supporting validation based on dependency value
if (this._releaseConfig.releasedefinitionProperties?.baselineOrg &&
!this._releaseConfig.releasedefinitionProperties?.skipIfAlreadyInstalled)
throw new Error("Release option 'skipIfAlreadyInstalled' must be true for 'baselineOrg'");
}
getPackagesAsPerReleaseConfig(directory) {
let packages = [];
let projectConfig = ProjectConfig_1.default.getSFDXProjectConfig(directory);
//Read sfdx project json
let sfdxPackages = ProjectConfig_1.default.getAllPackagesFromProjectConfig(projectConfig);
for (const sfdxPackage of sfdxPackages) {
if (this.getArtifactPredicate(sfdxPackage)) {
packages.push(sfdxPackage);
}
}
if (packages.length > 0) {
for (const sfdxPackage of sfdxPackages) {
if (this.getPackageDependencyPredicate(sfdxPackage)) {
packages.push(sfdxPackage);
}
}
}
return packages;
}
validateReleaseDefinitionGeneratorConfig(releaseDefinitionGeneratorSchema) {
let schema = fs.readJSONSync(path.join(__dirname, '..', '..', '..', 'resources', 'schemas', 'release-config.schema.json'), { encoding: 'UTF-8' });
let validator = new ajv_1.default({ allErrors: true }).compile(schema);
let validationResult = validator(releaseDefinitionGeneratorSchema);
if (!validationResult) {
let errorMsg = `Release definition generation config does not meet schema requirements, ` +
`found ${validator.errors.length} validation errors:\n`;
validator.errors.forEach((error, errorNum) => {
errorMsg += `\n${errorNum + 1}: ${error.instancePath}: ${error.message} ${JSON.stringify(error.params, null, 4)}`;
});
throw new Error(errorMsg);
}
}
getArtifactPredicate(artifact) {
if (this.releaseConfig.includeOnlyArtifacts) {
return this.releaseConfig.includeOnlyArtifacts?.includes(artifact);
}
else if (this.releaseConfig.excludeArtifacts) {
return !this.releaseConfig.excludeArtifacts?.includes(artifact);
}
else if (this.isExplicitDependencyCheckEnabled && this.releaseConfig.dependencyOn) {
return this.releaseConfig.dependencyOn?.includes(artifact);
}
else
return true;
}
getPackageDependencyPredicate(artifact) {
if (this.isExplicitDependencyCheckEnabled && this.releaseConfig.dependencyOn) {
return this.releaseConfig.dependencyOn?.includes(artifact);
}
}
}
exports.default = ReleaseConfigLoader;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsZWFzZUNvbmZpZ0xvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbXBsL3JlbGVhc2UvUmVsZWFzZUNvbmZpZ0xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQStCO0FBQy9CLHFGQUE2RDtBQUM3RCw4Q0FBNkI7QUFFN0IsaUNBQWtDO0FBQ2xDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsTUFBcUIsbUJBQW1CO0lBR3BDLElBQUksYUFBYTtRQUNiLHFEQUFxRDtRQUNyRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxZQUEyQixNQUFjLEVBQUUsdUJBQStCLEVBQVUsbUNBQXlDLEtBQUs7UUFBdkcsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUEyQyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQWM7UUFDOUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsd0NBQXdDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRW5FLHVDQUF1QztRQUN2QyxJQUNJLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQ3JDLENBQUM7WUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUNELHVDQUF1QztRQUN2QyxJQUNJLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQThCO1lBQ2xELElBQUksQ0FBQyxh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