import { ResourceNotFoundError } from '@squiz/dx-common-lib'; import { JsonValidationService } from '@squiz/dx-json-schema-lib'; import fsExtra from 'fs-extra'; import { JobManifestV1 } from '../../job/manifest/JobManifestV1'; import { ManifestValidationError } from '../errors/ManifestValidationError'; import { JobManifestModel } from '../ManifestModel'; import { getAndAssertJobManifestVersion } from '../utils/getAndAssertJobManifestVersion'; export class ManifestServiceForDev { protected jobValidationService: JsonValidationService = new JsonValidationService(); protected getJobManifest(manifestModel: JobManifestModel, manifestPath: string): JobManifestV1 { const schemaVersion = getAndAssertJobManifestVersion(manifestModel, JobManifestV1.getJobSchemaVersionRegex()); if (schemaVersion === 'JobV1') { return new JobManifestV1(manifestModel, manifestPath); } throw new ManifestValidationError(`Unsupported manifest schema version ${schemaVersion}`); } public async readJobManifest(manifestPath: string): Promise { if (await fsExtra.pathExists(manifestPath)) { const manifest = JSON.parse(await fsExtra.readFile(manifestPath, { encoding: 'utf-8' })) as JobManifestModel; await this.assertJobManifestMeetsSchemaVersion(manifest, JobManifestV1.getJobSchemaVersionRegex()); return this.getJobManifest(manifest, manifestPath); } throw new ResourceNotFoundError(`manifest could not be found`); } protected async assertJobManifestMeetsSchemaVersion(manifest: JobManifestModel, schemaVersionRegex: RegExp) { getAndAssertJobManifestVersion(manifest, schemaVersionRegex); this.jobValidationService.validateManifest(manifest, 'JobV1'); } }