| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
                        - #!/usr/bin/env node
 - 
 - const fs = require('fs')
 - const path = require('path')
 - const { camelCase } = require('lodash')
 - 
 - // Import the NAMESPACES array from i18next-config.ts
 - function getNamespacesFromConfig() {
 -   const configPath = path.join(__dirname, 'i18next-config.ts')
 -   const configContent = fs.readFileSync(configPath, 'utf8')
 -   
 -   // Extract NAMESPACES array using regex
 -   const namespacesMatch = configContent.match(/const NAMESPACES = \[([\s\S]*?)\]/)
 -   if (!namespacesMatch) {
 -     throw new Error('Could not find NAMESPACES array in i18next-config.ts')
 -   }
 -   
 -   // Parse the namespaces
 -   const namespacesStr = namespacesMatch[1]
 -   const namespaces = namespacesStr
 -     .split(',')
 -     .map(line => line.trim())
 -     .filter(line => line.startsWith("'") || line.startsWith('"'))
 -     .map(line => line.slice(1, -1)) // Remove quotes
 -   
 -   return namespaces
 - }
 - 
 - function getNamespacesFromTypes() {
 -   const typesPath = path.join(__dirname, '../types/i18n.d.ts')
 -   
 -   if (!fs.existsSync(typesPath)) {
 -     return null
 -   }
 -   
 -   const typesContent = fs.readFileSync(typesPath, 'utf8')
 -   
 -   // Extract namespaces from Messages type
 -   const messagesMatch = typesContent.match(/export type Messages = \{([\s\S]*?)\}/)
 -   if (!messagesMatch) {
 -     return null
 -   }
 -   
 -   // Parse the properties
 -   const propertiesStr = messagesMatch[1]
 -   const properties = propertiesStr
 -     .split('\n')
 -     .map(line => line.trim())
 -     .filter(line => line.includes(':'))
 -     .map(line => line.split(':')[0].trim())
 -     .filter(prop => prop.length > 0)
 -   
 -   return properties
 - }
 - 
 - function main() {
 -   try {
 -     console.log('🔍 Checking i18n types synchronization...')
 -     
 -     // Get namespaces from config
 -     const configNamespaces = getNamespacesFromConfig()
 -     console.log(`📦 Found ${configNamespaces.length} namespaces in config`)
 -     
 -     // Convert to camelCase for comparison
 -     const configCamelCase = configNamespaces.map(ns => camelCase(ns)).sort()
 -     
 -     // Get namespaces from type definitions
 -     const typeNamespaces = getNamespacesFromTypes()
 -     
 -     if (!typeNamespaces) {
 -       console.error('❌ Type definitions file not found or invalid')
 -       console.error('   Run: pnpm run gen:i18n-types')
 -       process.exit(1)
 -     }
 -     
 -     console.log(`🔧 Found ${typeNamespaces.length} namespaces in types`)
 -     
 -     const typeCamelCase = typeNamespaces.sort()
 -     
 -     // Compare arrays
 -     const configSet = new Set(configCamelCase)
 -     const typeSet = new Set(typeCamelCase)
 -     
 -     // Find missing in types
 -     const missingInTypes = configCamelCase.filter(ns => !typeSet.has(ns))
 -     
 -     // Find extra in types
 -     const extraInTypes = typeCamelCase.filter(ns => !configSet.has(ns))
 -     
 -     let hasErrors = false
 -     
 -     if (missingInTypes.length > 0) {
 -       hasErrors = true
 -       console.error('❌ Missing in type definitions:')
 -       missingInTypes.forEach(ns => console.error(`   - ${ns}`))
 -     }
 -     
 -     if (extraInTypes.length > 0) {
 -       hasErrors = true
 -       console.error('❌ Extra in type definitions:')
 -       extraInTypes.forEach(ns => console.error(`   - ${ns}`))
 -     }
 -     
 -     if (hasErrors) {
 -       console.error('\n💡 To fix synchronization issues:')
 -       console.error('   Run: pnpm run gen:i18n-types')
 -       process.exit(1)
 -     }
 -     
 -     console.log('✅ i18n types are synchronized')
 -     
 -   } catch (error) {
 -     console.error('❌ Error:', error.message)
 -     process.exit(1)
 -   }
 - }
 - 
 - if (require.main === module) {
 -   main()
 - }
 
 
  |