@vibe-validate/config
Version:
Configuration system for vibe-validate with TypeScript-first design and config templates
181 lines (124 loc) • 4.72 kB
Markdown
# @vibe-validate/config
Configuration system for vibe-validate with strict Zod schema validation and JSON Schema support.
## Features
- ✅ **Strict Schema Validation**: Runtime validation with Zod (rejects unknown properties)
- ✅ **JSON Schema Support**: IDE autocomplete and validation for YAML configs
- ✅ **YAML Configuration**: Primary format with schema validation
- ✅ **Type Safety**: Full TypeScript definitions for programmatic use
## Installation
```bash
npm install @vibe-validate/config
```
## Usage
### YAML Configuration (Recommended)
Create a `vibe-validate.config.yaml` file using a template:
```bash
npx vibe-validate init --template typescript-nodejs
```
**Available templates:**
- `minimal` - Bare-bones starting point
- `typescript-library` - TypeScript libraries/npm packages
- `typescript-nodejs` - Node.js applications
- `typescript-react` - React/Next.js applications
All templates: https://github.com/jdutton/vibe-validate/tree/main/packages/cli/config-templates
### Example YAML Configuration
<!-- config:example -->
```yaml
$schema: https://unpkg.com/@vibe-validate/config/config.schema.json
# Git settings
git:
mainBranch: main
autoSync: false
warnIfBehind: true
# Validation configuration
validation:
phases:
- name: Pre-Qualification
parallel: true
steps:
- name: TypeScript
command: tsc --noEmit
description: Type-check all code
- name: ESLint
command: eslint .
description: Lint for code quality
- name: Testing
parallel: false
steps:
- name: Unit Tests
command: npm test
description: Run test suite
failFast: true # Stop all validation on first phase failure
```
### YAML Schema Support
The `$schema` property enables IDE autocomplete and validation:
<!-- config:partial -->
```yaml
# Version-pinned (recommended for production)
$schema: https://unpkg.com/@vibe-validate/config@0.15.0/config.schema.json
# Latest version (auto-updates to newest)
$schema: https://unpkg.com/@vibe-validate/config/config.schema.json
```
**Versioning Strategy:**
- **Version-pinned URLs** - Match your installed package version, stable API
- **Latest URLs** - Auto-update to newest schema, good for docs/prototyping
- **`vibe-validate init`** - Automatically generates version-pinned URLs
This gives you:
- ✅ Autocomplete for all configuration properties
- ✅ Inline validation errors
- ✅ Hover documentation for each field
- ✅ Type checking for YAML configs
See [Schema Documentation](../../docs/schemas.md) for complete details on versioning and all published schemas.
## API (Programmatic Usage)
### `loadConfig(cwd?)`
Load configuration from current directory:
```typescript
import { loadConfig } from '@vibe-validate/config';
const config = await loadConfig(); // Searches for vibe-validate.config.yaml
```
### `loadConfigFromFile(path)`
Load and validate configuration from a specific file:
```typescript
import { loadConfigFromFile } from '@vibe-validate/config';
const config = await loadConfigFromFile('./vibe-validate.config.yaml');
```
### `findAndLoadConfig(cwd?)`
Find and load configuration from working directory:
```typescript
import { findAndLoadConfig } from '@vibe-validate/config';
const config = await findAndLoadConfig(); // Searches for config in cwd
```
### `validateConfig(rawConfig)`
Validate a raw configuration object:
```typescript
import { validateConfig, safeValidateConfig } from '@vibe-validate/config';
// Throws ZodError on invalid config
const config = validateConfig(rawConfig);
// Returns { success, data?, errors? }
const result = safeValidateConfig(rawConfig);
if (!result.success) {
console.error(result.errors);
}
```
## Configuration File Discovery
The loader searches for the config file:
- `vibe-validate.config.yaml` (only supported format)
## Configuration Schema
See the complete configuration reference: https://github.com/jdutton/vibe-validate/blob/main/docs/configuration-reference.md
### Key Sections
- **`git`** - Git repository settings (mainBranch, autoSync, etc.)
- **`validation`** - Validation phases and steps configuration
- **`validation.phases`** - Array of validation phases to execute
- **`validation.phases[].steps`** - Array of commands to run in each phase
- **`validation.failFast`** - Stop all validation on first phase failure (default: true)
### Strict Validation
All Zod schemas use strict validation - unknown properties are rejected:
<!-- config:partial -->
```yaml
validation:
phases: []
unknownProperty: true # ❌ ERROR: Unrecognized key 'unknownProperty'
```
This catches typos and prevents configuration drift.
## License
MIT