@forge/manifest

12.9.012.9.0-experimental-04cc2b9
out/validators/modules-validators/bitbucket/validateWorkspacePageProperties.js
+out/validators/modules-validators/bitbucket/validateWorkspacePageProperties.jsNew file
+51
Index: package/out/validators/modules-validators/bitbucket/validateWorkspacePageProperties.js
===================================================================
--- package/out/validators/modules-validators/bitbucket/validateWorkspacePageProperties.js
+++ package/out/validators/modules-validators/bitbucket/validateWorkspacePageProperties.js
@@ -0,0 +1,51 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.validateWorkspacePageProperties = void 0;
+const text_1 = require("../../../text");
+const types_1 = require("../../../types");
+const utils_1 = require("../../../utils");
+const constants_1 = require("../constants");
+const BITBUCKET_MODULE_TYPES = Object.values(types_1.AllModuleTypes).filter((moduleType) => moduleType.startsWith('bitbucket:'));
+const hasProperty = (module, property) => {
+    return typeof module === 'object' && module !== null && Object.prototype.hasOwnProperty.call(module, property);
+};
+const validateSingleAllowedProperty = (modules, moduleType, property, yamlContentByLine) => {
+    const modulesWithPropertySetToTrue = (modules[moduleType] || []).filter((module) => module[property]);
+    if (modulesWithPropertySetToTrue.length <= 1) {
+        return [];
+    }
+    const moduleKeys = modulesWithPropertySetToTrue.map((module) => module.key);
+    return modulesWithPropertySetToTrue.map((module) => {
+        return {
+            message: text_1.errors.modules.bitbucket.singleEntryOfModuleWithProperty(moduleType, property, moduleKeys),
+            reference: text_1.References.Modules,
+            level: 'error',
+            ...(0, utils_1.findPosition)(module.key, yamlContentByLine)
+        };
+    });
+};
+const validatePropertyNotAllowedForModules = (modules, property, allowedModuleType, yamlContentByLine) => {
+    const validationErrors = [];
+    BITBUCKET_MODULE_TYPES.filter((moduleType) => moduleType !== allowedModuleType).forEach((moduleType) => {
+        (modules[moduleType] || [])
+            .filter((module) => hasProperty(module, property))
+            .forEach((module) => {
+            validationErrors.push({
+                message: text_1.errors.modules.bitbucket.propertyOnlyAllowedForModule(property, moduleType, allowedModuleType),
+                reference: text_1.References.Modules,
+                level: 'error',
+                ...(0, utils_1.findPosition)(module.key, yamlContentByLine)
+            });
+        });
+    });
+    return validationErrors;
+};
+const validateWorkspacePageProperties = (modules, yamlContentByLine) => {
+    return [
+        ...validateSingleAllowedProperty(modules, types_1.AllModuleTypes.BitbucketWorkspaceSettingsMenuPage, constants_1.USE_AS_CONFIG, yamlContentByLine),
+        ...validateSingleAllowedProperty(modules, types_1.AllModuleTypes.BitbucketWorkspaceGlobalPage, constants_1.USE_AS_GET_STARTED, yamlContentByLine),
+        ...validatePropertyNotAllowedForModules(modules, constants_1.USE_AS_CONFIG, types_1.AllModuleTypes.BitbucketWorkspaceSettingsMenuPage, yamlContentByLine),
+        ...validatePropertyNotAllowedForModules(modules, constants_1.USE_AS_GET_STARTED, types_1.AllModuleTypes.BitbucketWorkspaceGlobalPage, yamlContentByLine)
+    ];
+};
+exports.validateWorkspacePageProperties = validateWorkspacePageProperties;