UNPKG

type-compiler

Version:

A TypeScript compiler plugin for enhanced runtime type checking and analysis with Zod validation

115 lines (104 loc) 3.72 kB
{ "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"] }