diff --git a/src/features/projects/domain/IProjectConfig.ts b/src/features/projects/domain/IProjectConfig.ts index 7f047f19..ef4fd74b 100644 --- a/src/features/projects/domain/IProjectConfig.ts +++ b/src/features/projects/domain/IProjectConfig.ts @@ -1,17 +1,25 @@ -export type ProjectConfigRemoteVersion = { - readonly id?: string - readonly name: string - readonly specifications: ProjectConfigRemoteSpecification[] -} +import { z } from "zod" -export type ProjectConfigRemoteSpecification = { - readonly id?: string - readonly name: string - readonly url: string -} +export const ProjectConfigRemoteSpecificationSchema = z.object({ + id: z.coerce.string().optional(), + name: z.coerce.string(), + url: z.string() +}) -export default interface IProjectConfig { - readonly name?: string - readonly image?: string - readonly remoteVersions?: ProjectConfigRemoteVersion[] -} +export const ProjectConfigRemoteVersionSchema = z.object({ + id: z.coerce.string().optional(), + name: z.coerce.string(), + specifications: ProjectConfigRemoteSpecificationSchema.array() +}) + +export const IProjectConfigSchema = z.object({ + name: z.coerce.string().optional(), + image: z.string().optional(), + remoteVersions: ProjectConfigRemoteVersionSchema.array().optional() +}) + +export type ProjectConfigRemoteSpecification = z.infer +export type ProjectConfigRemoteVersion = z.infer +export type IProjectConfig = z.infer + +export default IProjectConfig diff --git a/src/features/projects/domain/ProjectConfigParser.ts b/src/features/projects/domain/ProjectConfigParser.ts index 9f1ee5f3..321e6c17 100644 --- a/src/features/projects/domain/ProjectConfigParser.ts +++ b/src/features/projects/domain/ProjectConfigParser.ts @@ -1,13 +1,12 @@ -import { parse } from 'yaml' -import IProjectConfig from "./IProjectConfig" +import { parse } from "yaml" +import IProjectConfig, { IProjectConfigSchema } from "./IProjectConfig" export default class ProjectConfigParser { parse(rawConfig: string): IProjectConfig { const obj = parse(rawConfig) - if (obj !== null) { - return obj - } else { + if (obj === null) { return {} } + return IProjectConfigSchema.parse(obj) } }