UNPKG

@flxbl-io/sfp

Version:

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

93 lines 7.83 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 ProjectConfig_1 = __importDefault(require("./core/project/ProjectConfig")); const ajv_1 = __importDefault(require("ajv")); const path = require("path"); const fs = __importStar(require("fs-extra")); const SfpPackage_1 = require("./core/package/SfpPackage"); const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger")); class ProjectValidation { constructor() { this.projectConfig = ProjectConfig_1.default.getSFDXProjectConfig(null); this.ajv = new ajv_1.default({ allErrors: true }); this.resourcesDir = path.join(__dirname, '..', 'resources', 'schemas'); } validateSFDXProjectJSON() { let schema = fs.readJSONSync(path.join(this.resourcesDir, `sfdx-project.schema.json`), { encoding: 'UTF-8' }); let validator = this.ajv.compile(schema); let isSchemaValid = validator(this.projectConfig); if (!isSchemaValid) { let errorMsg = `The sfdx-project.json is invalid, Please fix the following errors\n`; validator.errors.forEach((error, errorNum) => { errorMsg += `\n${errorNum + 1}: ${error.instancePath}: ${error.message} ${JSON.stringify(error.params, null, 4)}`; }); sfp_logger_1.default.log(`The following attributes are not recognized by sfp, You might need to remove them`, sfp_logger_1.LoggerLevel.WARN); sfp_logger_1.default.log(errorMsg, sfp_logger_1.LoggerLevel.WARN); } } validatePackageNames() { ProjectConfig_1.default.getAllPackageDirectoriesFromConfig(this.projectConfig).forEach((pkg) => { let name = pkg.package; if (name.length > 38) { throw new Error('sfdx-project.json validation failed for package "' + pkg['package'] + '".' + `Package name exceed maximum length of 38 characters.`); } else if (name.match(/^[a-zA-Z0-9-._~]+$/) === null) { throw new Error('sfdx-project.json validation failed for package "' + pkg['package'] + '".' + `Package names can only contain alphanumeric characters and the symbols - . _ ~.`); } }); } validatePackageBuildNumbers() { ProjectConfig_1.default.getAllPackageDirectoriesFromConfig(this.projectConfig).forEach((pkg) => { let packageType = ProjectConfig_1.default.getPackageType(this.projectConfig, pkg.package); let pattern = /NEXT$|LATEST$/i; if (pkg.versionNumber.match(pattern) && (packageType === SfpPackage_1.PackageType.Source || packageType === SfpPackage_1.PackageType.Data)) { throw new Error('sfdx-project.json validation failed for package "' + pkg['package'] + '".' + ' Build-number keywords "NEXT" & "LATEST" are not supported for ' + packageType + ' packages.' + '\nTry the following:' + '\n - If package should be built as a ' + packageType + ' package, use 0 instead of NEXT/LATEST' + '\n - If package should be built as an Unlocked package, ensure the package has been created in the Devhub and the ID included in packageAliases of sfdx-project.json'); } }); } } exports.default = ProjectValidation; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdFZhbGlkYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUHJvamVjdFZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlGQUF5RDtBQUN6RCw4Q0FBc0I7QUFDdEIsNkJBQThCO0FBQzlCLDZDQUErQjtBQUMvQiwwREFBd0Q7QUFDeEQsbUVBQThEO0FBRTlELE1BQXFCLGlCQUFpQjtJQUtsQztRQUNJLElBQUksQ0FBQyxhQUFhLEdBQUcsdUJBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSx1QkFBdUI7UUFDMUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pCLElBQUksUUFBUSxHQUFXLHFFQUFxRSxDQUFDO1lBRTdGLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUN6QyxRQUFRLElBQUksS0FBSyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUNwRixLQUFLLENBQUMsTUFBTSxFQUNaLElBQUksRUFDSixDQUFDLENBQ0osRUFBRSxDQUFDO1lBQ1IsQ0FBQyxDQUFDLENBQUM7WUFHTCxvQkFBUyxDQUFDLEdBQUcsQ0FBQyxtRkFBbUYsRUFBQyx3QkFBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ25ILG9CQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSx3QkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDTCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3ZCLHVCQUFhLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pGLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDdkIsSUFBSyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUNYLG1EQUFtRDtvQkFDbkQsR0FBRyxDQUFDLFNBQVMsQ0FBQztvQkFDVixJQUFJO29CQUNSLHNEQUFzRCxDQUN6RCxDQUFBO1lBQ0wsQ0FBQztpQkFBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDWCxtREFBbUQ7b0JBQ25ELEdBQUcsQ0FBQyxTQUFTLENBQUM7b0JBQ1YsSUFBSTtvQkFDUixpRkFBaUYsQ0FDcEYsQ0FBQTtZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSwyQkFBMkI7UUFDOUIsdUJBQWEsQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakYsSUFBSSxXQUFXLEdBQUcsdUJBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFaEYsSUFBSSxPQUFPLEdBQVcsZ0JBQWdCLENBQUM7WUFDdkMsSUFDSSxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ2hDLENBQUMsV0FBVyxLQUFLLHdCQUFXLENBQUMsTUFBTSxJQUFJLFdBQVcsS0FBSyx3QkFBVyxDQUFDLElBQUksQ0FBQyxFQUMxRSxDQUFDO2dCQUNDLE1BQU0sSUFBSSxLQUFLLENBQ1gsbURBQW1EO29CQUMvQyxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUNkLElBQUk7b0JBQ0osaUVBQWlFO29CQUNqRSxXQUFXO29CQUNYLFlBQVk7b0JBQ1osc0JBQXNCO29CQUN0Qix1Q0FBdUM7b0JBQ3ZDLFdBQVc7b0JBQ1gsd0NBQXdDO29CQUN4QyxzS0FBc0ssQ0FDN0ssQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQS9FRCxvQ0ErRUMifQ==