UNPKG

vtex

Version:

The platform for e-commerce apps

54 lines (53 loc) 2.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ManifestValidator = void 0; const utils_1 = require("../error/utils"); const namePattern = '[\\w_-]+'; const vendorPattern = '[\\w_-]+'; const versionPattern = '\\d+\\.\\d+\\.\\d+(-.*)?'; const wildVersionPattern = '\\d+\\.((\\d+\\.\\d+)|(\\d+\\.x)|x)(-.*)?'; const majorVersionLocatorPattern = '\\d+\\.((\\d+\\.\\d+)|(\\d+\\.x)|x)(-.*)?'; const appID = new RegExp(`^${vendorPattern}\\.${namePattern}$`); const dependencyName = new RegExp(`^(${vendorPattern}\\.|(infra):)${namePattern}(@${wildVersionPattern})?$`); const appLocator = new RegExp(`^${vendorPattern}\\.${namePattern}(?:@${wildVersionPattern})?$`); class ManifestValidator { static validate(manifest) { const vendorRegex = new RegExp(`^${this.vendorPattern}$`); const nameRegex = new RegExp(`^${this.namePattern}$`); const versionRegex = new RegExp(`^${this.versionPattern}$`); if (manifest.name === undefined) { throw utils_1.createFlowIssueError("Field 'name' should be set in manifest.json file"); } if (manifest.version === undefined) { throw utils_1.createFlowIssueError("Field 'version' should be set in manifest.json file"); } if (manifest.vendor === undefined) { throw utils_1.createFlowIssueError("Field 'vendor' should be set in manifest.json file"); } if (!nameRegex.test(manifest.name)) { throw utils_1.createFlowIssueError("Field 'name' may contain only letters, numbers, underscores and hyphens"); } if (!vendorRegex.test(manifest.vendor)) { throw utils_1.createFlowIssueError("Field 'vendor' may contain only letters, numbers, underscores and hyphens"); } if (!versionRegex.test(manifest.version)) { throw utils_1.createFlowIssueError('The version format is invalid'); } } static validateApp(app, skipVersion = false) { const regex = skipVersion ? ManifestValidator.appID : ManifestValidator.appLocator; if (!regex.test(app)) { throw utils_1.createFlowIssueError(`Invalid app format, please use <vendor>.<name>${skipVersion ? '' : '[@<version>]'}`); } return app; } } exports.ManifestValidator = ManifestValidator; ManifestValidator.namePattern = namePattern; ManifestValidator.vendorPattern = vendorPattern; ManifestValidator.versionPattern = versionPattern; ManifestValidator.wildVersionPattern = wildVersionPattern; ManifestValidator.majorVersionLocatorPattern = majorVersionLocatorPattern; ManifestValidator.appID = appID; ManifestValidator.dependencyName = dependencyName; ManifestValidator.appLocator = appLocator;