{"_id":"@akhilkamsala/translate-core","name":"@akhilkamsala/translate-core","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@akhilkamsala/translate-core","version":"1.0.0","description":"Core translation engine for AI-powered translation platform","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"exports":{"./package.json":"./package.json",".":{"bahu-bashi/source":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"keywords":["translation","ai","i18n","localization","typescript"],"author":"","license":"MIT","dependencies":{"tslib":"^2.3.0"},"devDependencies":{"@types/node":"^20.0.0"},"_id":"@akhilkamsala/translate-core@1.0.0","gitHead":"b16c2bffac25031a020b1319dad203dd31440840","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-hb9J/WHWWW5y/wp/v7kk8mKW1DCFz928kouivIHE5P++gIwkpbaaNhR8qWVezXZTRpNCcvLbjzfPKNO5hlo/jQ==","shasum":"a5d2743ea3edcad7b00081b15e03034c86bfc762","tarball":"https://registry.npmjs.org/@akhilkamsala/translate-core/-/translate-core-1.0.0.tgz","fileCount":81,"unpackedSize":244706,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFPCgcGW2iKtIkGa/kUZfNI18W0l8mrcY8JDrN08oiCcAiA9RG2V+UI/eoMANVGlceGR3SmmcWm5VEONiC+qAL1kQw=="}]},"_npmUser":{"name":"akhilkamsala","email":"akhilkamsala043@gmail.com"},"directories":{},"maintainers":[{"name":"akhilkamsala","email":"akhilkamsala043@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/translate-core_1.0.0_1763187174875_0.613406576681504"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-15T06:12:54.768Z","1.0.0":"2025-11-15T06:12:55.083Z","modified":"2025-11-15T06:12:55.336Z"},"maintainers":[{"name":"akhilkamsala","email":"akhilkamsala043@gmail.com"}],"description":"Core translation engine for AI-powered translation platform","keywords":["translation","ai","i18n","localization","typescript"],"license":"MIT","readme":"# @ai/translate-core\n\nA production-grade, framework-agnostic TypeScript library for AI-powered translation. Designed to be consumed by CLI tools, VS Code extensions, web backends, and other applications.\n\n## Features\n\n- 🤖 **AI Provider Abstraction** - Works with any AI provider (OpenAI, Claude, Gemini, etc.)\n- 📝 **Multiple Translation Modes** - Text, code, files, and batch processing\n- 🧠 **Translation Memory** - Fuzzy matching for reusing previous translations\n- ⚡ **Smart Caching** - LRU cache for improved performance\n- 🔧 **Code-Aware** - Preserves code structure, indentation, and comments\n- 📦 **Batch Processing** - Concurrent translation with progress tracking\n- 🎯 **Type-Safe** - 100% TypeScript with comprehensive type definitions\n- 🔌 **Framework-Agnostic** - Pure TypeScript, no framework dependencies\n\n## Installation\n\n```bash\nnpm install @ai/translate-core\n# or\nyarn add @ai/translate-core\n# or\npnpm add @ai/translate-core\n```\n\n## Quick Start\n\n### 1. Implement an AI Provider\n\nFirst, create a provider that implements the `AIProvider` interface:\n\n```typescript\nimport { AIProvider, TranslationOptions, LanguageDetectionResult } from '@ai/translate-core';\n\nclass OpenAIProvider implements AIProvider {\n  readonly name = 'openai';\n  private apiKey: string;\n\n  constructor(apiKey: string) {\n    this.apiKey = apiKey;\n  }\n\n  async translate(\n    text: string,\n    targetLanguage: string,\n    options?: TranslationOptions\n  ): Promise<string> {\n    // Call OpenAI API\n    const response = await fetch('https://api.openai.com/v1/chat/completions', {\n      method: 'POST',\n      headers: {\n        'Authorization': `Bearer ${this.apiKey}`,\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        model: 'gpt-4',\n        messages: [\n          {\n            role: 'system',\n            content: `Translate the following text to ${targetLanguage}. ${options?.context || ''}`,\n          },\n          {\n            role: 'user',\n            content: text,\n          },\n        ],\n      }),\n    });\n\n    const data = await response.json();\n    return data.choices[0].message.content;\n  }\n\n  async detectLanguage(text: string): Promise<LanguageDetectionResult> {\n    // Implement language detection\n    // ...\n    return { language: 'en', confidence: 0.95 };\n  }\n}\n```\n\n### 2. Use the Unified Translator\n\n```typescript\nimport { Translator } from '@ai/translate-core';\n\n// Create provider\nconst provider = new OpenAIProvider('your-api-key');\n\n// Create translator\nconst translator = new Translator({\n  provider,\n  useTranslationMemory: true,\n  useCache: true,\n});\n\n// Translate text\nconst result = await translator.translateText(\n  'Hello, world!',\n  'es', // Spanish\n  { sourceLanguage: 'en' }\n);\n\nconsole.log(result); // \"¡Hola, mundo!\"\n```\n\n## Usage Examples\n\n### Text Translation\n\n```typescript\nimport { TextTranslator } from '@ai/translate-core';\n\nconst textTranslator = new TextTranslator(provider, {\n  maxTextSize: 10000,\n  chunkSize: 5000,\n  autoDetectLanguage: true,\n});\n\nconst translated = await textTranslator.translate(\n  'This is a long text...',\n  'fr' // French\n);\n```\n\n### Code Translation\n\n```typescript\nimport { CodeTranslator } from '@ai/translate-core';\n\nconst codeTranslator = new CodeTranslator(provider, {\n  preserveIndentation: true,\n  preserveComments: true,\n  translateVariableNames: false,\n});\n\nconst code = `\n// This is a comment\nfunction greet(name: string) {\n  return \\`Hello, \\${name}!\\`;\n}\n`;\n\nconst translatedCode = await codeTranslator.translate(\n  code,\n  'es',\n  'typescript'\n);\n```\n\n### File Translation\n\n```typescript\nimport { FileTranslator } from '@ai/translate-core';\n\nconst fileTranslator = new FileTranslator(provider);\n\nconst result = await fileTranslator.translateFile(\n  './src/messages.ts',\n  'de' // German\n);\n\nconsole.log(result.content);\nconsole.log(result.fileType); // 'code'\n```\n\n### Batch Translation\n\n```typescript\nimport { BatchTranslator } from '@ai/translate-core';\n\nconst batchTranslator = new BatchTranslator(provider, {\n  concurrency: 3,\n  continueOnError: true,\n  onProgress: (event) => {\n    console.log(`Progress: ${event.percentage}% (${event.completed}/${event.total})`);\n  },\n});\n\nconst result = await batchTranslator.translateFiles(\n  ['file1.ts', 'file2.ts', 'file3.md'],\n  'ja' // Japanese\n);\n\nconsole.log(`Success: ${result.successCount}, Failed: ${result.failureCount}`);\n```\n\n### Provider Registry\n\n```typescript\nimport { ProviderRegistry } from '@ai/translate-core';\n\nconst registry = new ProviderRegistry();\n\n// Register multiple providers\nregistry.register('openai', new OpenAIProvider('key1'), true); // Set as default\nregistry.register('claude', new ClaudeProvider('key2'));\nregistry.register('gemini', new GeminiProvider('key3'));\n\n// Use with translator\nconst translator = new Translator({\n  provider: 'openai', // Use by name\n  providerRegistry: registry,\n});\n\n// Switch providers\ntranslator.setProvider('claude');\n\n// List available providers\nconsole.log(registry.list()); // ['openai', 'claude', 'gemini']\n```\n\n### Translation Memory\n\n```typescript\nimport { TranslationMemory } from '@ai/translate-core';\n\nconst memory = new TranslationMemory(0.8); // 80% similarity threshold\n\n// Store translations\nmemory.store('Hello', 'Hola', 'en', 'es');\nmemory.store('Goodbye', 'Adiós', 'en', 'es');\n\n// Lookup exact match\nconst match = memory.lookup('Hello', 'en', 'es');\nif (match?.isExact) {\n  console.log(match.entry.translated); // 'Hola'\n}\n\n// Fuzzy matching\nconst fuzzy = memory.lookup('Helo', 'en', 'es'); // Typo\nif (fuzzy && fuzzy.score > 0.8) {\n  console.log(`Found match with ${fuzzy.score} similarity`);\n}\n\n// Export/Import\nconst entries = memory.export();\n// Save to file...\nmemory.import(entries);\n```\n\n### Caching\n\n```typescript\nimport { Cache } from '@ai/translate-core';\n\nconst cache = new Cache<string>(1000); // Max 1000 entries\n\ncache.set('key1', 'value1');\nconst value = cache.get('key1');\n\nconsole.log(cache.size()); // 1\nconsole.log(cache.has('key1')); // true\n\ncache.clear();\n```\n\n### Language Detection\n\n```typescript\nimport { LanguageDetector } from '@ai/translate-core';\n\nconst detector = new LanguageDetector(provider);\n\nconst result = await detector.detect('Bonjour le monde');\nconsole.log(result.language); // 'fr'\nconsole.log(result.confidence); // 0.95\n```\n\n## Advanced Usage\n\n### Custom Error Handling\n\n```typescript\nimport {\n  FileNotSupportedError,\n  InvalidLanguageError,\n  TranslationTooLargeError,\n  ProviderNotFoundError,\n} from '@ai/translate-core';\n\ntry {\n  await translator.translateFile('document.pdf', 'es');\n} catch (error) {\n  if (error instanceof FileNotSupportedError) {\n    console.error(`File type ${error.extension} not supported`);\n  } else if (error instanceof InvalidLanguageError) {\n    console.error(`Invalid language: ${error.languageCode}`);\n  } else if (error instanceof TranslationTooLargeError) {\n    console.error(`Text too large: ${error.actualSize}/${error.maxSize}`);\n  }\n}\n```\n\n### Custom Logger\n\n```typescript\nimport { Logger, LogLevel } from '@ai/translate-core';\n\nconst logger = new Logger({\n  level: LogLevel.DEBUG,\n  timestamps: true,\n  handler: (level, message, data) => {\n    // Custom logging logic\n    console.log(`[${level}] ${message}`, data);\n  },\n});\n\nlogger.info('Translation started');\nlogger.debug('Processing chunk 1/5');\nlogger.error('Translation failed', error);\n```\n\n### File Utilities\n\n```typescript\nimport { listFilesRecursively, readFile, writeFile } from '@ai/translate-core';\n\n// List all TypeScript files\nconst files = await listFilesRecursively('./src', ['.ts', '.tsx']);\n\nfor (const file of files) {\n  console.log(file.path, file.size);\n}\n\n// Read and write files\nconst content = await readFile('./input.txt');\nawait writeFile('./output.txt', translatedContent);\n```\n\n## API Reference\n\n### Core Classes\n\n- **`Translator`** - Unified translation API with all features\n- **`TextTranslator`** - Plain text translation with chunking\n- **`CodeTranslator`** - Code-aware translation\n- **`FileTranslator`** - File-based translation\n- **`BatchTranslator`** - Batch processing with concurrency\n- **`ProviderRegistry`** - Manage multiple AI providers\n- **`TranslationMemory`** - Fuzzy translation memory\n- **`Cache`** - LRU cache implementation\n- **`LanguageDetector`** - Language detection service\n\n### Interfaces\n\n- **`AIProvider`** - Interface for AI provider implementations\n- **`TranslationOptions`** - Options for translation requests\n- **`FileTranslationResult`** - Result of file translation\n- **`BatchTranslationResult`** - Result of batch translation\n\n### Error Classes\n\n- **`FileNotSupportedError`** - Unsupported file type\n- **`InvalidLanguageError`** - Invalid language code\n- **`TranslationTooLargeError`** - Text exceeds size limit\n- **`ProviderNotFoundError`** - Provider not in registry\n\n## Architecture\n\n```\n@ai/translate-core\n├── providers/          # AI provider abstraction\n│   ├── AIProvider.ts\n│   └── ProviderRegistry.ts\n├── translation/        # Translation engines\n│   ├── Translator.ts\n│   ├── TextTranslator.ts\n│   ├── CodeTranslator.ts\n│   ├── FileTranslator.ts\n│   └── BatchTranslator.ts\n├── memory/            # Memory and caching\n│   ├── TranslationMemory.ts\n│   └── Cache.ts\n├── utils/             # Utilities\n│   ├── fileIO.ts\n│   ├── logger.ts\n│   └── similarity.ts\n└── errors/            # Error classes\n```\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines before submitting PRs.\n\n","readmeFilename":"README.md","_rev":"1-ba7869a3801f966fe171de1573e105a3"}