import { Component } from '@atlassian/forge-graphql-types'; import { InvalidConfigFileError } from './models/errors'; import { CompassYaml } from '../../../../types'; import ConfigFileParser, { isObjEmpty } from './config-file-parser'; import { INVALID_YAML_ERROR, componentNotFound } from './models/error-messages'; export default function validateConfigFile( file: CompassYaml, currentComponent?: Component, ): void { let validationErrors: Array = []; if (!currentComponent) { throw new InvalidConfigFileError([componentNotFound(file?.id)]); } if (isObjEmpty(file)) { throw new InvalidConfigFileError([INVALID_YAML_ERROR]); } const typeId = file.typeId ?? currentComponent?.typeId ?? currentComponent?.type; const configFileParser = new ConfigFileParser(typeId); configFileParser.validateConfig(file); configFileParser.validateConfigCustomFieldsAgainstComponent( file.customFields, currentComponent.customFields, ); validationErrors = validationErrors.concat(configFileParser.errors); if (validationErrors.length > 0) { throw new InvalidConfigFileError(validationErrors); } }