import { ManifestValidationError } from '../errors/ManifestValidationError'; import { SchemaVersions, JobManifestModel, JOB_SCHEMA_VERSIONS } from '../ManifestModel'; import { isValidManifestVersion } from './isValidManifestVersion'; export function getAndAssertJobManifestVersion(manifest: JobManifestModel, schemaRegexp?: RegExp): SchemaVersions { if (!manifest['$schema']) { throw new ManifestValidationError( 'Could not determine manifest version. Your manifest must have a $schema property defined.', ); } let match; if (schemaRegexp) { match = schemaRegexp.exec(manifest['$schema']); } const version = match?.groups?.schema; if (version === undefined) { throw new ManifestValidationError('Could not determine manifest version from $schema value.'); } if (isValidManifestVersion(version)) { return version as SchemaVersions; } throw new ManifestValidationError( `manifest version "${version}" isn't a valid version. Valid versions are "${JOB_SCHEMA_VERSIONS.toString()}"`, ); }