type-compiler
Version:
A TypeScript compiler plugin for enhanced runtime type checking and analysis with Zod validation
115 lines (104 loc) • 3.72 kB
JSON
{
"compilerOptions": {
"target": "es2020",
"module": "commonjs",
"strict": true,
"outDir": "./dist",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"plugins": [
{
"name": "type-compiler",
"generateZodSchemas": true,
"zodSchemaPrefix": "z",
"specialFieldValidators": {
"email": "z.string().email()",
"birthDate": "z.string().pipe(z.coerce.date())",
"url": "z.string().url()",
"phoneNumber": "z.string().regex(/^\\+?[1-9]\\d{1,14}$/)",
"uuid": "z.string().uuid()",
"ipAddress": "z.string().ip()",
"password": "z.string().min(8).regex(/[A-Z]/).regex(/[a-z]/).regex(/[0-9]/).regex(/[^A-Za-z0-9]/)",
"username": "z.string().toLowerCase().trim().min(3)",
"age": "z.number().int().min(0).max(120)",
"latitude": "z.number().min(-90).max(90)",
"longitude": "z.number().min(-180).max(180)",
// Pattern-based validators (new feature)
"^.*Email$": {
"pattern": true,
"validator": "z.string().email()"
},
"^id[A-Z]": {
"pattern": true,
"validator": "z.string().uuid()"
},
"^price[A-Z]": {
"pattern": true,
"validator": "z.number().min(0)"
},
"(^img|^image)[A-Z]": {
"pattern": true,
"validator": "z.string().url()"
},
"^(lat|Long)[A-Z]": {
"pattern": true,
"validator": "z.number()"
},
// Timestamps and date fields
"^.*(?:At|Date|Time)$": {
"pattern": true,
"validator": "z.date().or(z.string().pipe(z.coerce.date()))"
},
// Monetary values
"(?:amount|cost|price|fee|total)(?:$|[A-Z])": {
"pattern": true,
"validator": "z.number().min(0).or(z.string().regex(/^\\d+(\\.\\d{1,2})?$/).transform(Number))"
},
// Status fields
".*Status$": {
"pattern": true,
"validator": "z.enum(['active', 'inactive', 'pending', 'completed', 'failed', 'cancelled']).or(z.string())"
},
// Identifiers
".*(?:Id|Key|Code)$": {
"pattern": true,
"validator": "z.string().min(1)"
},
// Percentage fields
".*(?:Percent|Rate|Ratio)$": {
"pattern": true,
"validator": "z.number().min(0).max(100)"
},
// Count fields
".*Count$": {
"pattern": true,
"validator": "z.number().int().min(0)"
},
// Dimension fields
"(?:width|height|depth|length|radius|size)(?:$|[A-Z])": {
"pattern": true,
"validator": "z.number().positive()"
},
// Boolean flags
"^is[A-Z]|^has[A-Z]|^can[A-Z]|^should[A-Z]": {
"pattern": true,
"validator": "z.boolean()"
},
// Tags, categories, and collections
"^(?:tags|categories|items|products|users)$": {
"pattern": true,
"validator": "z.array(z.any())"
},
// Color values
".*[Cc]olor$": {
"pattern": true,
"validator": "z.string().regex(/^#([0-9A-F]{3}){1,2}$/i).or(z.string().regex(/^rgb\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}\\)$/))"
}
}
}
]
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}