import { plainToClass } from 'class-transformer'; import { IsBoolean, IsEnum, IsNumber, IsString, validateSync } from 'class-validator'; enum Environment { Development = "development", Production = "production", Test = "test", Provision = "provision", } class EnvironmentVariables { @IsEnum(Environment) NODE_ENV: Environment; @IsNumber() PORT: number; @IsString() DB_MAIN_HOST: string; @IsNumber() DB_MAIN_PORT: number; @IsString() DB_MAIN_USER: string; @IsString() DB_MAIN_PASSWORD: string; @IsString() DB_MAIN_DATABASE: string; @IsBoolean() TYPEORM_LOGGING: boolean; } export function validate(config: Record) { const validatedConfig = plainToClass( EnvironmentVariables, config, { enableImplicitConversion: true }, ); const errors = validateSync(validatedConfig, { skipMissingProperties: false }); if (errors.length > 0) { throw new Error(errors.toString()); } return validatedConfig; }