valitype
    Preparing search index...

    valitype

    tests npm npm audit signatures license

    A lightweight TypeScript validation library for environment variables and configuration.

    • Validate values against predefined types (string, number, boolean, url, enum)
    • Support for custom validators with helpful utilities
    • Required field validation
    • Default values
    • Clear error messages
    npm install valitype
    
    import { validateValue, validators } from 'valitype';

    // Basic type validation
    validateValue('PORT', '8080', { type: 'number', required: true }); // returns 8080 as number
    validateValue('DEBUG', 'true', { type: 'boolean' }); // returns true as boolean
    validateValue('API_URL', 'https://api.example.com', { type: 'url', required: true }); // validates URL format

    // Enum validation
    validateValue('NODE_ENV', 'development', {
    type: { enum: ['development', 'production', 'test'] },
    default: 'development'
    });

    // Custom validation
    validateValue('API_KEY', 'abc123', {
    type: 'custom',
    validator: validators.regex(/^[a-z0-9]{6}$/),
    errorMessage: 'API_KEY must be 6 alphanumeric characters',
    required: true
    });
    { type: 'string', required?: boolean, default?: string }
    
    { type: 'number', required?: boolean, default?: number }
    
    { type: 'boolean', required?: boolean, default?: boolean }
    
    { type: 'url', required?: boolean, default?: string }
    
    { type: { enum: string[] }, required?: boolean, default?: string }
    
    { 
    type: 'custom',
    validator: (value: string | undefined) => boolean | string,
    required?: boolean,
    default?: string,
    errorMessage?: string
    }

    The library includes several built-in validator utilities:

    validators.regex(/^[A-Z]{3}$/, 'Must be 3 uppercase letters')
    
    validators.range(1, 100, 'Value must be between 1 and 100')
    
    validators.oneOf(['apple', 'banana', 'orange'], 'Must be a valid fruit')
    
    validators.date('YYYY-MM-DD', 'Must be a valid date')
    
    validators.json('Must be valid JSON')
    
    validators.awsArn('lambda', 'Must be a valid Lambda ARN')
    
    validators.all(
    validators.regex(/^[A-Z]/),
    validators.oneOf(['Alpha', 'Beta', 'Gamma'])
    )

    The library throws descriptive errors when validation fails:

    try {
    validateValue('PORT', 'abc', { type: 'number', required: true });
    } catch (error) {
    console.error(error.message); // "PORT must be a number"
    }

    Contributions are welcome. See CONTRIBUTING.md file.

    This library is licensed under the MIT License. See the LICENSE file for details.