@forge/manifest

13.7.0-next.013.7.0-next.1
out/validators/modules-validators/dashboards/validate-dashboard-modules.js
+out/validators/modules-validators/dashboards/validate-dashboard-modules.jsNew file
+55
Index: package/out/validators/modules-validators/dashboards/validate-dashboard-modules.js
===================================================================
--- package/out/validators/modules-validators/dashboards/validate-dashboard-modules.js
+++ package/out/validators/modules-validators/dashboards/validate-dashboard-modules.js
@@ -0,0 +1,55 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.validateDashboardModules = void 0;
+const text_1 = require("../../../text");
+const types_1 = require("../../../types");
+const utils_1 = require("../../../utils");
+const DASHBOARD_MODULE_ALLOWED_PROPERTIES = [
+    {
+        moduleType: types_1.AllModuleTypes.DashboardsWidget,
+        allowedProperties: new Set([
+            'key',
+            'title',
+            'description',
+            'thumbnail',
+            'resource',
+            'render',
+            'edit',
+            'resolver',
+            'aiContext'
+        ])
+    },
+    {
+        moduleType: types_1.AllModuleTypes.DashboardsFilter,
+        allowedProperties: new Set(['key', 'title', 'icon', 'function', 'resource', 'render', 'edit', 'resolver'])
+    },
+    {
+        moduleType: types_1.AllModuleTypes.DashboardsBackgroundScript,
+        allowedProperties: new Set(['key', 'resource', 'render', 'resolver'])
+    }
+];
+const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
+const buildAdditionalPropertyError = (moduleType, additionalProperty, moduleKey, yamlContentByLine) => ({
+    message: text_1.errors.schemaError(undefined, [moduleType], text_1.errors.schema.additionalProperties(additionalProperty)),
+    reference: text_1.References.Modules,
+    level: 'error',
+    ...(0, utils_1.findPosition)(additionalProperty, yamlContentByLine ?? [], moduleKey)
+});
+const validateAllowedProperties = (moduleType, module, allowedProperties, moduleKey, yamlContentByLine) => Object.keys(module)
+    .filter((property) => !allowedProperties.has(property))
+    .map((property) => buildAdditionalPropertyError(moduleType, property, moduleKey, yamlContentByLine));
+const validateDashboardModules = (modules, yamlContentByLine) => {
+    const validationErrors = [];
+    DASHBOARD_MODULE_ALLOWED_PROPERTIES.forEach(({ moduleType, allowedProperties }) => {
+        const dashboardModules = modules[moduleType];
+        if (!Array.isArray(dashboardModules)) {
+            return;
+        }
+        dashboardModules.filter(isRecord).forEach((module) => {
+            const moduleKey = typeof module.key === 'string' ? module.key : undefined;
+            validationErrors.push(...validateAllowedProperties(moduleType, module, allowedProperties, moduleKey, yamlContentByLine));
+        });
+    });
+    return validationErrors;
+};
+exports.validateDashboardModules = validateDashboardModules;