{
  "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"]
} 