Imported skill validate from vercel
Scanned 9/11/2026
Install to Claude Code
npx -y skills add bitwikiorg/skills.md --skill validate --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Validate?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/bitwikiorg-validate-skills-md)More formats (shields.io, HTML) on the badges page.
---
description: Imported skill validate from vercel
name: validate
signature: 9e6af88e36acaaad49458f5e0d0d55cc496570956b38ee489f108929a2cc85ce
source: /a0/tmp/skills_research/vercel/packages/react-best-practices-build/src/validate.ts
---
#!/usr/bin/env node
/**
* Validate rule files follow the correct structure
*/
import { readdir } from 'fs/promises'
import { join } from 'path'
import { Rule } from './types.js'
import { parseRuleFile } from './parser.js'
import { RULES_DIR } from './config.js'
interface ValidationError {
file: string
ruleId?: string
message: string
}
/**
* Validate a rule
*/
function validateRule(rule: Rule, file: string): ValidationError[] {
const errors: ValidationError[] = []
// Note: rule.id is auto-generated during build, not required in source files
if (!rule.title || rule.title.trim().length === 0) {
errors.push({ file, ruleId: rule.id, message: 'Missing or empty title' })
}
if (!rule.explanation || rule.explanation.trim().length === 0) {
errors.push({ file, ruleId: rule.id, message: 'Missing or empty explanation' })
}
if (!rule.examples || rule.examples.length === 0) {
errors.push({ file, ruleId: rule.id, message: 'Missing examples (need at least one bad and one good example)' })
} else {
// Filter out informational examples (notes, trade-offs, etc.) that don't have code
const codeExamples = rule.examples.filter(e => e.code && e.code.trim().length > 0)
const hasBad = codeExamples.some(e =>
e.label.toLowerCase().includes('incorrect') ||
e.label.toLowerCase().includes('wrong') ||
e.label.toLowerCase().includes('bad')
)
const hasGood = codeExamples.some(e =>
e.label.toLowerCase().includes('correct') ||
e.label.toLowerCase().includes('good') ||
e.label.toLowerCase().includes('usage') ||
e.label.toLowerCase().includes('implementation') ||
e.label.toLowerCase().includes('example')
)
if (codeExamples.length === 0) {
errors.push({ file, ruleId: rule.id, message: 'Missing code examples' })
} else if (!hasBad && !hasGood) {
errors.push({ file, ruleId: rule.id, message: 'Missing bad/incorrect or good/correct examples' })
}
}
const validImpacts: Rule['impact'][] = ['CRITICAL', 'HIGH', 'MEDIUM-HIGH', 'MEDIUM', 'LOW-MEDIUM', 'LOW']
if (!validImpacts.includes(rule.impact)) {
errors.push({ file, ruleId: rule.id, message: `Invalid impact level: ${rule.impact}. Must be one of: ${validImpacts.join(', ')}` })
}
return errors
}
/**
* Main validation function
*/
async function validate() {
try {
console.log('Validating rule files...')
console.log(`Rules directory: ${RULES_DIR}`)
const files = await readdir(RULES_DIR)
const ruleFiles = files.filter(f => f.endsWith('.md') && !f.startsWith('_'))
const allErrors: ValidationError[] = []
for (const file of ruleFiles) {
const filePath = join(RULES_DIR, file)
try {
const { rule } = await parseRuleFile(filePath)
const errors = validateRule(rule, file)
allErrors.push(...errors)
} catch (error) {
allErrors.push({
file,
message: `Failed to parse: ${error instanceof Error ? error.message : String(error)}`
})
}
}
if (allErrors.length > 0) {
console.error('\n✗ Validation failed:\n')
allErrors.forEach(error => {
console.error(` ${error.file}${error.ruleId ? ` (${error.ruleId})` : ''}: ${error.message}`)
})
process.exit(1)
} else {
console.log(`✓ All ${ruleFiles.length} rule files are valid`)
}
} catch (error) {
console.error('Validation failed:', error)
process.exit(1)
}
}
validate()
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!